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

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

调用多模型终端节点

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

Amazon SDK for Python (Boto 3)

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

response = runtime_sagemaker_client.invoke_endpoint( EndpointName = "<ENDPOINT_NAME>", ContentType = "text/csv", TargetModel = "<MODEL_FILENAME>.tar.gz", Body = body)
Amazon CLI

以下示例演示如何使用以下示例发出具有两行的 CSV 请求:Amazon Command Line Interface(Amazon CLI):

aws sagemaker-runtime invoke-endpoint \ --endpoint-name "<ENDPOINT_NAME>" \ --body "1.0,2.0,5.0"$'\n'"2.0,3.0,4.0" \ --content-type "text/csv" \ --target-model "<MODEL_NAME>.tar.gz" output_file.txt

网络 ACL 和安全组都允许 (因此可到达您的实例) 的发起 ping 的output_file.txt如果推理成功,就会提出有关你的推理请求的信息。有关如何使用Amazon CLI请参阅使用Amazon CLI在 SageMaker Python 开发工具包文档中。

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

在模型上重试请求 Notready异常错误

你第一次打电话invoke_endpoint对于模型,该模型将从 Amazon Simple Storage Services 下载并加载到推理容器中。这使得第一个电话需要更长的时间才能返回。由于模型已加载,所以对同一模型的后续调用完成速度更快。

SageMaker 返回呼叫的响应invoke_endpoint在 60 秒内。有些型号太大,无法在 60 秒内下载。如果模型没有在 60 秒超时限制之前完成加载,请求invoke_endpoint使用错误代码返回ModelNotReadyException,模型将继续下载并加载到推理容器中,持续长达 360 秒。如果你得到ModelNotReadyException的错误代码invoke_endpoint请求,请重试请求。默认情况下,Amazon适用于 Python 的开发工具包 (Boto 3)传统重试模式) 和 Java 重试invoke_endpoint导致的请求ModelNotReadyException错误消息。您可以配置重试策略以继续重试请求长达 360 秒。如果您预计模型下载并加载到容器的时间超过 60 秒,请将 SDK 套接字超时设置为 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_sagemaker_client = boto3.client('sagemaker-runtime', config=config)