调用多模型终端节点 - Amazon SageMaker
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

调用多模型终端节点

要调用多模型终端节点,请像调用单个模型终端节点一样invoke_endpoint,从SageMaker运行时使用 ,但需要进行更改。传递新 TargetModel 参数,该参数指定要定向到终端节点上的哪些模型。SageMaker 运行时 InvokeEndpoint 请求支持 X-Amzn-SageMaker-Target-Model 作为新标头,该标头采用为调用指定的模型的相对路径。SageMaker 系统通过组合作为 CreateModel API 调用一部分提供的前缀和模型的相对路径来构造模型的绝对路径。

以下示例预测请求使用示例笔记本中的适用于 Python 的 AWS 开发工具包 (Boto 3)

response = runtime_sm_client.invoke_endpoint( EndpointName = ’my-endpoint’, ContentType = 'text/csv', TargetModel = ’Houston_TX.tar.gz’, Body = body)

多模型终端节点根据需要动态加载目标模型。您可以在运行 MME 示例笔记本时发现这一点,该笔记本会针对单个终端节点后托管的多个目标模型遍历随机调用。针对给定模型的第一个请求需要更长时间,因为必须从 Amazon Simple Storage Service (Amazon S3) 下载模型并将其加载到内存中。(这称为冷启动。) 由于加载模型后没有额外开销,因此后续调用完成速度更快。

在 ModelNotReadyException 错误上重试请求

首次invoke_endpoint为模型调用 时,将从 下载模型Amazon Simple Storage Service并将其加载到推理容器中。这将使第一个调用的返回时间更长。对同一模型的后续调用完成速度更快,因为已加载模型。

SageMaker 将在 invoke_endpoint 60 秒内返回对 的调用的响应。某些模型太大,无法在 60 秒内下载。如果模型未在 60 秒超时限制之前完成加载,则 对 的请求invoke_endpoint将返回错误代码 ModelNotReadyException,并且模型将继续下载并加载到推理容器中长达 360 秒。如果您收到 ModelNotReadyException 请求的invoke_endpoint错误代码,请重试该请求。默认情况下,适用于 Python (Boto 3) SDKs使用AWS传统重试模式)和 Java 重试请求会导致invoke_endpoint错误。ModelNotReadyException您可以配置重试策略以继续重试请求,最长为 360 秒。如果您希望模型下载并加载到容器中需要超过 60 秒,请将开发工具包套接字超时设置为 70 秒。有关为 Boto 3 配置重试策略的更多信息,请参阅配置重试模式。以下代码显示了一个示例,该示例将重试策略配置为对 重试调用invoke_endpoint达 180 秒。

import boto3 from botocore.config import Config # This example retry strategy sets the retry attempts to 2. # With this setting, the request can attempt to download and/or load the model # for upto 180 seconds: 1 orginal request (60 seconds) + 2 retries (120 seconds) config = Config( read_timeout=70, retries={ 'max_attempts': 2 # This value can be adjusted to 5 to go up to the 360s max timeout } ) runtime_sm_client = boto3.client('sagemaker-runtime', config=config)