將模型部署至 Amazon EC2 - Amazon SageMaker

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

將模型部署至 Amazon EC2

若要取得預測,EC2請使用 Amazon 將模型部署至 Amazon SageMaker。

將模型部署至 SageMaker 託管服務

若要EC2使用 Amazon 透過 Amazon 託管模型 SageMaker,建立和執行訓練任務請呼叫xgb_model估算器deploy的方法來部署您在 中訓練的模型。呼叫 deploy 方法時,您必須指定要用於託管端點的 EC2 ML 執行個體數量和類型。

import sagemaker from sagemaker.serializers import CSVSerializer xgb_predictor=xgb_model.deploy( initial_instance_count=1, instance_type='ml.t2.medium', serializer=CSVSerializer() )
  • initial_instance_count (int) — 要部署模型的執行個體數目。

  • instance_type (str) — 您要操作已部署模型的執行個體類型。

  • serializer (int) – 將各種格式 ( NumPy 陣列、清單、檔案或緩衝區) 的輸入資料序列化為 CSV格式化字串。我們使用這個,因為XGBoost演算法接受 CSV 格式的輸入檔案。

deploy方法會建立可部署模型、設定 SageMaker託管服務端點,並啟動端點以託管模型。如需詳細資訊,請參閱 Amazon SageMaker Python SDK SageMaker 中的一般估算器部署類別方法。若要擷取 deploy 方法所產生的端點名稱,請執行下列程式碼:

xgb_predictor.endpoint_name

這應該會傳回的端點名稱 xgb_predictor。端點名稱的格式為 "sagemaker-xgboost-YYYY-MM-DD-HH-MM-SS-SSS"。此端點在機器學習 (ML) 執行個體中保持作用中狀態,而且您可以隨時進行即時預測,除非您稍後將其關閉。複製此端點名稱並儲存,以便在 SageMaker Studio 或 SageMaker筆記本執行個體的其他位置重複使用和進行即時預測。

提示

若要進一步了解如何編譯和最佳化模型以部署至 Amazon EC2執行個體或邊緣裝置,請參閱使用 Neo 編譯和部署模型

(選用) 使用 SageMaker Predictor 重複使用託管端點

將模型部署至端點後,您可以配對端點並持續在任何其他筆記本中進行即時預測,藉此設定新的 SageMaker 預測器。下列範例程式碼示範如何使用 SageMaker Predictor 類別,使用相同的端點來設定新的預測器物件。重新使用您用於 xgb_predictor 的端點名稱。

import sagemaker xgb_predictor_reuse=sagemaker.predictor.Predictor( endpoint_name="sagemaker-xgboost-YYYY-MM-DD-HH-MM-SS-SSS", sagemaker_session=sagemaker.Session(), serializer=sagemaker.serializers.CSVSerializer() )

xgb_predictor_reuse Predictor 的行為與原始 xgb_predictor 完全相同。如需詳細資訊,請參閱 Amazon SageMaker Python SDK中的 SageMaker Predictor 類別。

(選用) 使用批次轉換進行預測

您可以執行一次性批次推論任務,使用 SageMaker 批次轉換對測試資料集進行預測,而不是在生產中託管端點。模型訓練完成後,您可以將估算器擴展至以 SageMaker Transformer 類別為基礎的transformer物件。批次轉換器從指定的 S3 儲存貯體讀取輸入資料並進行預測。

執行批次轉換任務
  1. 執行下列程式碼,將測試資料集的特徵資料欄轉換為 CSV 檔案,並上傳至 S3 儲存貯體:

    X_test.to_csv('test.csv', index=False, header=False) boto3.Session().resource('s3').Bucket(bucket).Object( os.path.join(prefix, 'test/test.csv')).upload_file('test.csv')
  2. 為批次轉換任務指定URIs輸入和輸出的 S3 儲存貯體,如下所示:

    # The location of the test dataset batch_input = 's3://{}/{}/test'.format(bucket, prefix) # The location to store the results of the batch transform job batch_output = 's3://{}/{}/batch-prediction'.format(bucket, prefix)
  3. 建立指定最少參數數目的轉換器物件:執行批次轉換工作的 instance_countinstance_type 參數,output_path以及儲存預測資料,如下所示:

    transformer = xgb_model.transformer( instance_count=1, instance_type='ml.m4.xlarge', output_path=batch_output )
  4. 通過執行 transformer 物件的 transform() 方法,如下所示啟動批次轉換工作:

    transformer.transform( data=batch_input, data_type='S3Prefix', content_type='text/csv', split_type='Line' ) transformer.wait()
  5. 當批次轉換任務完成時, 會 SageMaker 建立儲存在batch_output路徑中的test.csv.out預測資料,其格式應該如下:s3://sagemaker-<region>-111122223333/demo-sagemaker-xgboost-adult-income-prediction/batch-prediction。執行下列動作 AWS CLI ,以下載批次轉換工作的輸出資料:

    ! aws s3 cp {batch_output} ./ --recursive

    這應該在當前工作目錄下建立 test.csv.out 檔案。您將能夠看到根據XGBoost訓練任務的羅吉斯迴歸預測的浮點數。