

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

# 多模型端点的自定义容器合同
<a name="mms-container-apis"></a>

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

**注意**  
目前，只有 SageMaker AI 的 [NVIDIA Triton Inference Server 容器支持支持 GPU 的实例的多模型端点。](https://docs.aws.amazon.com/sagemaker/latest/dg/triton.html)该容器已实施了下文定义的合同。客户可以直接将此容器与其多模型 GPU 端点一起使用，无需任何额外工作。

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

**Topics**
+ [

## 加载模型 API
](#multi-model-api-load-model)
+ [

## 列出模型 API
](#multi-model-api-list-model)
+ [

## 获取模型 API
](#multi-model-api-get-model)
+ [

## 卸载模型 API
](#multi-model-api-unload-model)
+ [

## 调用模型 API
](#multi-model-api-invoke-model)

## 加载模型 API
<a name="multi-model-api-load-model"></a>

指示容器将主体的 `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 都应向 AI 返回 507 HTTP 状态码，然后 SageMaker 人工智能会启动卸载未使用的模型进行回收。

## 列出模型 API
<a name="multi-model-api-list-model"></a>

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

```
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 AI 最初可以调用列表模型 API，而无需为提供值`next_page_token`。如果 `nextPageToken` 字段作为响应的一部分返回，它将在后续的列出模型调用中作为 `next_page_token` 的值提供。如果未返回 `nextPageToken`，则意味着没有其他模型可供返回。

## 获取模型 API
<a name="multi-model-api-get-model"></a>

这是 `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
<a name="multi-model-api-unload-model"></a>

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

```
DELETE /models/{model_name}
```

**注意**  
如果未加载 `model_name`，此 API 应返回 404。

## 调用模型 API
<a name="multi-model-api-invoke-model"></a>

从提供的特定 `model_name` 生成预测请求。 SageMaker AI Runtime `InvokeEndpoint` 请求支持`X-Amzn-SageMaker-Target-Model`作为新的标头，该标头采用为调用指定的模型的相对路径。 SageMaker AI 系统通过将 `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 应向 AI 返回 507 HTTP 状态码，然后 SageMaker 人工智能会启动卸载未使用的模型进行回收。