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

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

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

本部分介绍亚马逊如何 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 设备用于模型推理(通过在您的中指定基于 GPU 的 ML 计算实例)。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 }

容器应如何响应推理请求

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

要接收推理请求,容器必须有一个在端口 8080 上侦听的 Web 服务器,并且必须接受到针对 /invocations 终端节点的 POST 请求。推理请求超时和最大重试次数可以通过ModelClientConfig.

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

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

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