将您自己的推理代码用于批量转换 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

将您自己的推理代码用于批量转换

此部分介绍 Amazon SageMaker 如何与运行您自己的用于批量转换的推理代码的 Docker 容器进行交互。使用此信息编写推理代码并创建 Docker 镜像。

SageMaker 如何运行您的推理映像

要配置容器以作为可执行文件运行,请使用 Dockerfile 中的 ENTRYPOINT 指令。请注意以下几点:

  • 对于批量转换,SageMaker 会将容器运行为:

    docker run image serve

    SageMaker 会覆盖默认CMD语句,通过在容器中指定serve参数。serve 参数覆盖您使用 Dockerfile 中的 CMD 命令提供的参数。

     

  • 建议您使用 exec 形式的 ENTRYPOINT 指令:

    ENTRYPOINT ["executable", "param1", "param2"]

    例如:

    ENTRYPOINT ["python", "k_means_inference.py"]

     

  • SageMaker 会将环境变量设置为CreateModelCreateTransformJob在您的容器上。此外,将填充以下环境变量:

    • 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 设备用于模型推理 (通过在CreateTransformJob请求),请确保您的容器与 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 中训练模型,它以单个 tar 压缩文件的形式将构件保存在 Amazon S3 中。如果在另一个框架中训练模型,则需要以 tar 压缩文件的形式将模型构件存储在 Amazon S3 中。SageMaker 解压缩此 tar 文件,并将其保存在/opt/ml/model目录启动批处理转换作业之前。

容器如何使用请求

容器必须实施一个 Web 服务器,以响应端口 8080 上的调用和 ping 请求。对于批量转换,您可以选择设置算法以实施执行参数请求,以便为 SageMaker 提供动态运行时配置。SageMaker 使用以下端点:

  • ping-用于定期检查容器的运行状况。SageMaker 等待 HTTP200状态代码和成功 ping 请求的空正文,然后再发送调用请求。当调用请求发出后,您可以使用 ping 请求将模型加载到内存中,以生成推理。

  • (可选)execution-parameters-允许算法在运行时为作业提供最佳调整参数。根据容器可用的内存和 CPU,算法选择适当的MaxConcurrentTransformsBatchStrategy, 和MaxPayloadInMB作业的值。

在调用请求前,SageMaker 尝试调用执行参数请求。当您创建批量转换作业时,您可以为MaxConcurrentTransformsBatchStrategy, 和MaxPayloadInMB参数。SageMaker 使用以下优先顺序确定这些参数的值:

  1. 在创建CreateTransformJob请求.

  2. 当 SageMaker 调用执行参数终端节点时模型容器返回的值 >

  3. 默认参数值,如下表所列。

    参数 默认值
    MaxConcurrentTransforms

    1

    BatchStrategy

    MULTI_RECORD

    MaxPayloadInMB

    6

响应GET执行参数请求是一个 JSON 对象,带有MaxConcurrentTransformsBatchStrategy, 和MaxPayloadInMB参数。以下是一个有效响应的示例:

{ “MaxConcurrentTransforms”: 8, “BatchStrategy": "MULTI_RECORD", "MaxPayloadInMB": 6 }

容器应如何响应推理请求

为了获得推理,Amazon SageMaker 将 POST 请求发送到推理容器。POST 请求正文包含来自 Amazon S3 的数据。Amazon SageMaker 将请求传递给容器,并从容器返回推理结果,同时将响应中的数据保存到 Amazon S3。

要接收推理请求,容器必须有一个在端口 8080 上侦听的 Web 服务器,并且必须接受到针对 /invocations 终端节点的 POST 请求。模型容器必须在 600 秒内响应请求。

容器应如何响应运行状况检查 (Ping) 请求

容器上的最简单要求是使用 HTTP 200 状态代码和空白正文进行响应。这告知 SageMaker 容器已准备好接受/invocations终端节点。

虽然最低限制供容器用来返回静态 200,但容器开发人员可使用此功能执行更深入的检查。请求超时/ping尝试为 2 秒。