本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用推論管道執行即時預測
您可以使用推論管道中已訓練的模型,直接進行即時預測,而不需要執行外部預先處理。設定管道時,您可以選擇使用 Amazon 中已提供的內建功能轉換器 SageMaker。或者,您可以只使用幾行 scikit-learn 或 Spark 程式碼,以實作您自己的轉換邏輯。
MLeap
管道中的容器會監聽 SAGEMAKER_BIND_TO_PORT
環境變數指定的連接埠 (而不是 8080)。在推論管道中執行 時, SageMaker 會自動將此環境變數提供給容器。如果此環境變數不存在,容器預設使用連接埠 8080。若要表示您的容器符合此需求,請使用下列命令,將標籤新增到您的 Dockerfile:
LABEL com.amazonaws.sagemaker.capabilities.accept-bind-to-port=true
如果您的容器需要監聽第二個連接埠,請選擇 SAGEMAKER_SAFE_PORT_RANGE
環境變數指定的範圍內的連接埠。將值指定為 格式 的包含範圍"XXXX-YYYY"
,其中 XXXX
和 YYYY
是多位數整數。當您在多容器管道中執行容器時, 會自動 SageMaker 提供此值。
注意
若要在包含SageMaker 內建演算法的管道中使用自訂 Docker 映像,您需要 Amazon Elastic Container Registry (Amazon ECR) 政策 。您的 Amazon ECR儲存庫必須授予 SageMaker提取映像的許可。如需詳細資訊,請參閱對推論管道的 Amazon ECR許可進行故障診斷。
建立和部署推論管道端點
下列程式碼會使用 SparkML 建立和部署即時推論管道模型,並使用 串聯XGBoost模型 SageMaker SDK。
from sagemaker.model import Model from sagemaker.pipeline_model import PipelineModel from sagemaker.sparkml.model import SparkMLModel sparkml_data = 's3://{}/{}/{}'.format(s3_model_bucket, s3_model_key_prefix, 'model.tar.gz') sparkml_model = SparkMLModel(model_data=sparkml_data) xgb_model = Model(model_data=xgb_model.model_data, image=training_image) model_name = 'serial-inference-' + timestamp_prefix endpoint_name = 'serial-inference-ep-' + timestamp_prefix sm_model = PipelineModel(name=model_name, role=role, models=[sparkml_model, xgb_model]) sm_model.deploy(initial_instance_count=1, instance_type='ml.c4.xlarge', endpoint_name=endpoint_name)
從推論管道端點要求即時推論
下列範例說明如何透過呼叫推論端點並以 JSON 格式傳遞請求承載,進行即時預測:
import sagemaker from sagemaker.predictor import json_serializer, json_deserializer, Predictor payload = { "input": [ { "name": "Pclass", "type": "float", "val": "1.0" }, { "name": "Embarked", "type": "string", "val": "Q" }, { "name": "Age", "type": "double", "val": "48.0" }, { "name": "Fare", "type": "double", "val": "100.67" }, { "name": "SibSp", "type": "double", "val": "1.0" }, { "name": "Sex", "type": "string", "val": "male" } ], "output": { "name": "features", "type": "double", "struct": "vector" } } predictor = Predictor(endpoint=endpoint_name, sagemaker_session=sagemaker.Session(), serializer=json_serializer, content_type='text/csv', accept='application/json' print(predictor.predict(payload))
您從 predictor.predict(payload)
得到的回應是模型的推論結果。
即時推論管道範例
您可以使用 SKLearn預測程式來執行此範例筆記本