

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# マルチモデルエンドポイント用のカスタムコンテナの規約
<a name="mms-container-apis"></a>

複数のモデルを処理するには、Amazon SageMaker AI がコンテナと通信して必要に応じてモデルをロード、一覧表示、取得、アンロードできるようにする API のセットを、コンテナがサポートする必要があります。`model_name` は、キー入力パラメータとして新しい API のセットで使用されます。カスタマーコンテナでは、マッピングキーとして `model_name` を使用して、ロードされたモデルを追跡する必要があります。また、`model_name` は不透明な識別子であり、必ずしも `InvokeEndpoint` API に渡される `TargetModel` パラメータの値ではありません。`InvokeEndpoint` リクエストの元の `TargetModel` 値は、ログ記録の目的で使用できる `X-Amzn-SageMaker-Target-Model` ヘッダーとして API のコンテナに渡されます。

**注記**  
GPU ベースのインスタンス用のマルチモデルエンドポイントは、現在 SageMaker AI の [NVIDIA Triton Inference Server コンテナ](https://docs.aws.amazon.com/sagemaker/latest/dg/triton.html)でのみサポートされています。このコンテナには、以下に定義されている規約が既に実装されています。顧客は、追加作業なしで、このコンテナをマルチモデルの GPU エンドポイントで直接使用できます。

CPU ベースのマルチモデルエンドポイント用に、次の API をコンテナに設定できます。

**Topics**
+ [Load Model API](#multi-model-api-load-model)
+ [List Model API](#multi-model-api-list-model)
+ [Get Model API](#multi-model-api-get-model)
+ [Unload Model API](#multi-model-api-unload-model)
+ [Invoke Model API](#multi-model-api-invoke-model)

## Load 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 は SageMaker AI に 507 HTTP ステータスコードを返します。これにより、未使用のモデルのアンロードが開始されて再利用できるようになります。

## List Model 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 は、最初に `next_page_token` の値を指定せずに List Model API を呼び出すことができます。`nextPageToken` フィールドがレスポンスの一部として返された場合、後続の List Models コールで `next_page_token` の値として渡されます。`nextPageToken` が返されなかった場合、返されるモデルがこれ以上ないということです。

## Get Model 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 を返します。

## Unload Model API
<a name="multi-model-api-unload-model"></a>

SageMaker AI プラットフォームにカスタマーコンテナのメモリからのモデルのアンロードを指示します。これにより、新しいモデルのロードプロセスが開始されると、プラットフォームによって候補とされたモデルの削除が開始されます。`model_name` にプロビジョニングされたリソースは、この API がレスポンスを返すときにコンテナによって解放される必要があります。

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

**注記**  
`model_name` がロードされていない場合、この API は 404 を返します。

## Invoke Model API
<a name="multi-model-api-invoke-model"></a>

指定された特定の `model_name` への予測リクエストを作成します。SageMaker AI ランタイムの `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 は SageMaker AI に 507 HTTP ステータスコードを返します。これにより、未使用のモデルのアンロードが開始されて再利用できるようになります。