多模型端点的自定义容器合同 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

多模型端点的自定义容器合同

要处理多个模型,您的容器必须支持一组 API,使亚马逊 SageMaker 能够与容器通信,以便根据需要加载、列出、获取和卸载模型。model_name 在新 API 集中用作键输入参数。客户容器需要使用 model_name 作为映射键来跟踪已加载的模型。此外,model_name 是一个不透明的标识符,不一定是传递给 InvokeEndpoint API 的 TargetModel 参数的值。InvokeEndpoint 请求中的原始 TargetModel 值作为可用于日志记录目的的 X-Amzn-SageMaker-Target-Model 标头传递给 API 中的容器。

注意

目前,只有 NVIDIA Triton Inference Server 容器支持支持 GPU SageMaker 的实例的多模型端点。该容器已实施了下文定义的合同。客户可以直接将此容器与其多模型 GPU 端点一起使用,无需任何额外工作。

您可以在容器上为 CPU 支持的多模型端点配置以下 API。

加载模型 API

指示容器将主体的 url 字段中的特定模型加载到客户容器的内存中,并使用分配的 model_name 来跟踪该模型。加载模型后,容器应准备好使用此 model_name 提供推理请求。

POST /models HTTP/1.1 Content-Type: application/json Accept: application/json { "model_name" : "{model_name}", "url" : "/opt/ml/models/{model_name}/model", }
注意

如果已加载 model_name,此 API 应返回 409。每当由于内存不足或任何其他资源而无法加载模型时,此 API 都应向返回一个 507 HTTP 状态码 SageMaker,然后该状态码会启动卸载未使用的模型进行回收。

列出模型 API

返回已加载到客户容器内存中的模型列表。

GET /models HTTP/1.1 Accept: application/json Response = { "models": [ { "modelName" : "{model_name}", "modelUrl" : "/opt/ml/models/{model_name}/model", }, { "modelName" : "{model_name}", "modelUrl" : "/opt/ml/models/{model_name}/model", }, .... ] }

此 API 还支持分页。

GET /models HTTP/1.1 Accept: application/json Response = { "models": [ { "modelName" : "{model_name}", "modelUrl" : "/opt/ml/models/{model_name}/model", }, { "modelName" : "{model_name}", "modelUrl" : "/opt/ml/models/{model_name}/model", }, .... ] }

SageMaker 最初可以调用 List Models API 而不提供值next_page_token。如果 nextPageToken 字段作为响应的一部分返回,它将在后续的列出模型调用中作为 next_page_token 的值提供。如果未返回 nextPageToken,则意味着没有其他模型可供返回。

获取模型 API

这是 model_name 实体上的简单读取 API。

GET /models/{model_name} HTTP/1.1 Accept: application/json { "modelName" : "{model_name}", "modelUrl" : "/opt/ml/models/{model_name}/model", }
注意

如果未加载 model_name,此 API 应返回 404。

卸载模型 API

指示 SageMaker 平台指示客户容器从内存中卸载模型。这将在开始新模型加载过程时开始移出由平台确定的候选模型。当此 API 返回响应时,容器应回收预配置到 model_name 的资源。

DELETE /models/{model_name}
注意

如果未加载 model_name,此 API 应返回 404。

调用模型 API

从提供的特定 model_name 生成预测请求。 SageMaker 运行时InvokeEndpoint请求支持X-Amzn-SageMaker-Target-Model作为新的标头,该标头采用为调用指定的模型的相对路径。 SageMaker 系统通过将作为 CreateModel API 调用的一部分提供的前缀与模型的相对路径相结合来构造模型的绝对路径。

POST /models/{model_name}/invoke HTTP/1.1 Content-Type: ContentType Accept: Accept X-Amzn-SageMaker-Custom-Attributes: CustomAttributes X-Amzn-SageMaker-Target-Model: [relativePath]/{artifactName}.tar.gz
注意

如果未加载 model_name,此 API 应返回 404。

此外,在 GPU 实例上,如果由于内存或其他资源不足而InvokeEndpoint失败,此 API 应向返回 507 HTTP 状态码 SageMaker,然后启动卸载未使用的模型进行回收。