本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
将您自己的推理代码用于批量转换
本部分介绍Amazon 的工作原理 SageMaker 与运行您自己的推理代码进行批量转换的 Docker 容器交互。使用此信息编写推理代码并创建 Docker 镜像。
的工作原理 SageMaker 运行你的推理图像
要配置容器以作为可执行文件运行,请使用 Dockerfile 中的 ENTRYPOINT
指令。请注意以下几点:
-
对于批量转换, SageMaker 按如下方式运行容器:
docker run
image
serveSageMaker 覆盖
CMD
通过指定容器中的语句serve
图像名称后面的参数。serve
参数覆盖您使用 Dockerfile 中的CMD
命令提供的参数。 -
建议您使用
exec
形式的ENTRYPOINT
指令:ENTRYPOINT ["executable", "param1", "param2"]
例如:
ENTRYPOINT ["python", "k_means_inference.py"]
-
SageMaker 设置中指定的环境变量
CreateModel
和CreateTransformJob
在您的容器上。此外,还填充以下环境变量:-
SAGEMAKER_BATCH
始终将设置为true
当容器在 “Batch 转换” 中运行时。 -
SAGEMAKER_MAX_PAYLOAD_IN_MB
设置为通过 HTTP 发送到容器的最大负载。 -
SAGEMAKER_BATCH_STRATEGY
将设置为SINGLE_RECORD
当每次调用向容器发送一条记录时MULTI_RECORD
当容器获得的记录数量与有效载荷中的记录数量一样多时。 -
SAGEMAKER_MAX_CONCURRENT_TRANSFORMS
设置为最大数/invocations
可以同时打开的请求。
注意
最后三个环境变量来自用户进行的 API 调用。如果用户没有为它们设置值,则不会传递这些值。在这种情况下,要么是默认值,要么是算法请求的值(响应
/execution-parameters
)被使用。 -
-
如果您打算使用 GPU 设备进行模型推断(通过在您的计算机中指定基于 GPU 的 ML 计算实例)
CreateTransformJob
request),请确保你的容器兼容 nvidia-docker。不要将 NVIDIA 驱动程序与镜像捆绑。有关 nvidia-docker 的更多信息,请参阅 NVIDIA/nvidia-docker。 -
不能使用
init
初始化程序作为 SageMaker 容器中的入口点,因为它会被训练参数和服务参数混淆。
的工作原理 SageMaker 加载您的模型构件
在一个CreateModel
请求,容器定义包括ModelDataUrl
参数,用于指定 Amazon S3 中存储模型构件的位置。当您使用以下应用程序时: SageMaker 为了进行推论,它使用这些信息来确定从何处复制模型工件。它将构件复制到 Docker 容器中的 /opt/ml/model
目录,以供您的推理代码使用。
ModelDataUrl
参数必须指向 tar.gz 文件。否则, SageMaker 无法下载该文件。如果你在里面训练一个模型 SageMaker,它将构件保存为 Amazon S3 中的单个压缩 tar 文件。如果您在其他框架中训练模型,则需要将模型构件作为压缩的 tar 文件存储在 Amazon S3 中。 SageMaker 解压缩这个 tar 文件并将其保存在/opt/ml/model
批处理转换作业开始之前容器中的目录。
容器如何使用请求
容器必须实施一个 Web 服务器,以响应端口 8080 上的调用和 ping 请求。对于批量转换,您可以选择设置算法来实现执行参数请求,从而为其提供动态运行时配置 SageMaker. SageMaker使用以下端点:
-
ping
— 用于定期检查容器的运行状况。 SageMaker 等待 HTTP200
在发送调用请求之前,成功发出 ping 请求的状态码和空正文。当调用请求发出后,您可以使用 ping 请求将模型加载到内存中,以生成推理。 -
(可选)
execution-parameters
—允许算法在运行时为作业提供最佳调整参数。根据容器可用的内存和 CPU,算法会选择合适的MaxConcurrentTransforms
,BatchStrategy
,以及MaxPayloadInMB
工作的价值。
在调用请求之前, SageMaker 尝试调用执行参数请求。在创建批处理转换作业时,您可以为MaxConcurrentTransforms
,BatchStrategy
,以及MaxPayloadInMB
参数。 SageMaker 使用以下优先顺序确定这些参数的值:
-
您在创建时提供的参数值
CreateTransformJob
请求。 -
模型容器在以下情况下返回的值 SageMaker 调用执行参数终端节点>
-
默认参数值,列在下表中。
参数 默认值 MaxConcurrentTransforms
1
BatchStrategy
MULTI_RECORD
MaxPayloadInMB
6
对 a 的回应GET
执行参数请求是一个 JSON 对象,其密钥为MaxConcurrentTransforms
,BatchStrategy
,以及MaxPayloadInMB
参数。以下是一个有效响应的示例:
{ “MaxConcurrentTransforms”: 8, “BatchStrategy": "MULTI_RECORD", "MaxPayloadInMB": 6 }
容器应如何响应推理请求
为了获得推论,亚马逊 SageMaker 向推理容器发送 POST 请求。POST 请求正文包含来自Amazon S3 的数据。亚马逊 SageMaker 将请求传递给容器,并返回容器的推断结果,将响应中的数据保存到 Amazon S3。
要接收推理请求,容器必须有一个在端口 8080 上侦听的 Web 服务器,并且必须接受到针对 /invocations
终端节点的 POST 请求。推理请求超时和最大重试次数可以通过以下方式配置ModelClientConfig
.
容器应如何响应运行状况检查 (Ping) 请求
容器上的最简单要求是使用 HTTP 200 状态代码和空白正文进行响应。这指示 SageMaker 容器已准备好接受推理请求/invocations
终端节点。
虽然最低限制供容器用来返回静态 200,但容器开发人员可使用此功能执行更深入的检查。请求超时时间为/ping
尝试次数为 2 秒。