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

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

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

本部分介绍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 设备进行模型推断(通过在您的计算机中指定基于 GPU 的 ML 计算实例)CreateTransformJobrequest),请确保你的容器兼容 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 使用以下优先顺序确定这些参数的值:

  1. 您在创建时提供的参数值CreateTransformJob请求。

  2. 模型容器在以下情况下返回的值 SageMaker 调用执行参数终端节点>

  3. 默认参数值,列在下表中。

    参数 默认值
    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 秒。