运行实时预测,以增强推理管道 - Amazon SageMaker
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

运行实时预测,以增强推理管道

您可以在推理管道中使用经训练的模型直接进行实时预测,无需执行外部预处理。在配置管道时,您可以选择使用 中已有的内置功能转换器Amazon SageMaker。或者,您可以使用几行 scikit-learn 或 Spark 代码来实现自己的转换逻辑。

MLeap 是一种用于机器学习管道的序列化格式和执行引擎,它支持 Spark、scikit-learn 和 TensorFlow,用于训练管道并将其导出到称为 MLeap Bundle 的序列化管道中。您可以将服务包反序列化到 Spark 用于批量模式评分,或者反序列化到 MLeap 运行时以强化实时 API 服务。

管道中的容器侦听由 SAGEMAKER_BIND_TO_PORT 环境变量指定的端口(而不是 8080)。在推理管道中运行时, SageMaker 会自动将此环境变量提供给容器。如果此环境变量不存在,则容器应默认为使用端口 8080。要指示您的容器使用此要求进行编译,请使用以下命令将标签添加到您的 Dockerfile:

LABEL com.amazonaws.sagemaker.capabilities.accept-bind-to-port=true

如果您的容器需要侦听第二个端口,请在 环境变量指定的范围内SAGEMAKER_SAFE_PORT_RANGE选择一个端口。将 值指定为 格式的包含范围"XXXX-YYYY",其中 XXXXYYYY 是多位数整数。当您在多容器管道中运行容器时, 将自动SageMaker提供此值。

注意

要在包括 SageMaker 内置算法的管道中使用自定义 Docker 镜像,您需要具有 Amazon Elastic Container Registry (Amazon ECR) 策略。您的 Amazon ECR 存储库必须授予 SageMaker 权限才能拉取镜像。有关更多信息,请参阅。推理管道的 Amazon ECR 权限问题排查

创建和部署推理管道终端节点

以下代码通过 SageMaker 开发工具包,使用 SparkML 和 XGBoost 模型按顺序创建和部署实时推理管道模型。

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, RealTimePredictor from sagemaker.content_types import CONTENT_TYPE_CSV, CONTENT_TYPE_JSON 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 = RealTimePredictor(endpoint=endpoint_name, sagemaker_session=sagemaker.Session(), serializer=json_serializer, content_type=CONTENT_TYPE_JSON, accept=CONTENT_TYPE_CSV) print(predictor.predict(payload))

您从 predictor.predict(payload) 中得到的响应是模型的推理结果。

实时推理管道示例

您可以使用 SKLearn 预测器运行此示例笔记本,该预测器显示如何部署终端节点,运行推理请求,然后对响应进行反序列化。在Amazon SageMaker 示例 GitHub 存储库中找到此笔记本和更多例子。