

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

# マルチモデルエンドポイントを呼び出す
<a name="invoke-multi-model-endpoint"></a>

マルチモデルエンドポイントを呼び出すには、1 つのモデルエンドポイントを呼び出すのと同じように、SageMaker AI ランタイムから [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker-runtime.html#SageMakerRuntime.Client.invoke_endpoint](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker-runtime.html#SageMakerRuntime.Client.invoke_endpoint) を使います (変更が 1 点あります)。エンドポイントのどのモデルをターゲットにするかを指定する新しい `TargetModel` パラメータを渡します。SageMaker AI ランタイムの `InvokeEndpoint` リクエストは、呼び出し対象として指定されたモデルの相対パスを受け取る新しいヘッダーとして、`X-Amzn-SageMaker-Target-Model` をサポートします。SageMaker AI システムは、`CreateModel` API コールの一部として渡されるプレフィックスをモデルの相対パスと組み合わせることで、モデルの絶対パスを生成します。

以下の手順は、CPU と GPU ベースのマルチモデルエンドポイントのどちらでも同じです。

------
#### [ AWS SDK for Python (Boto 3) ]

以下の予測リクエストの例では、サンプルノートブックに [AWS SDK for Python (Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker-runtime.html) を使っています。

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

------
#### [ AWS CLI ]

 以下の例は、 AWS Command Line Interface (AWS CLI) を使って CSV リクエストを作成する方法を示しています。

```
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
```

推論が成功した場合は、推論リクエストに関する情報が含まれた `output_file.txt` が作成されます。で予測を行う方法のその他の例については AWS CLI、SageMaker [Python SDK ドキュメントの「 で予測を行う AWS CLI](https://sagemaker.readthedocs.io/en/stable/frameworks/tensorflow/deploying_tensorflow_serving.html#making-predictions-with-the-aws-cli)」を参照してください。

------

マルチモデルエンドポイントは、必要に応じてターゲットモデルを動的にロードします。この状態になるのは、[MME サンプルノートブック](https://sagemaker-examples.readthedocs.io/en/latest/advanced_functionality/multi_model_xgboost_home_value/xgboost_multi_model_endpoint_home_value.html)の実行時に、1 つのエンドポイントの背後でホストされている複数のターゲットモデルに対するランダムな呼び出しを順次処理しているときです。特定のモデルに対する最初のリクエストには時間がかかります。これは、モデルを Amazon Simple Storage Service (Amazon S3) からダウンロードしてメモリにロードする必要があるためです これは「コールドスタート」と呼ばれ、マルチモデルエンドポイントでは顧客のコストパフォーマンスが向上するように最適化されることが期待されます。**モデルのロード後は追加のオーバーヘッドがないため、後続の呼び出しはより速く終了します。

**注記**  
GPU ベースのインスタンスの場合、GPU コンテナからの 507 HTTP レスポンスコードは、メモリやその他のリソースが不足していることを示しています。これにより、使用頻度の高いモデルを読み込むために、未使用のモデルがコンテナからアンロードされます。

## ModelNotReadyException エラーに対してリクエストを再試行する
<a name="invoke-multi-model-config-retry"></a>

モデルに対して初めて `invoke_endpoint` を呼び出す場合、モデルは Amazon Simple Storage Service からダウンロードされ、推論コンテナにロードされます。そのため、最初の呼び出しがレスポンスを返すまでには時間がかかります。モデルがすでにロードされているため、その後の同じモデルへの呼び出しはより早く完了します。

SageMaker AI は、`invoke_endpoint` の呼び出しに対するレスポンスを 60 秒以内に返します。一部のモデルはサイズが大きく、60 秒以内にダウンロードできない場合があります。60 秒のタイムアウト制限より前にモデルのロードを完了できない場合、`invoke_endpoint` のリクエストはエラーコード `ModelNotReadyException` を返し、モデルは最大 360 秒間、推論コンテナへのダウンロードとロードを続けます。`invoke_endpoint` リクエストからエラーコード `ModelNotReadyException` を取得した場合は、リクエストを再試行してください。デフォルトでは、 AWS SDKs Python (Boto 3) ([レガシー再試行モード](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/retries.html#legacy-retry-mode)を使用) および`ModelNotReadyException`エラーが発生する Java 再試行`invoke_endpoint`リクエスト。再試行の方法は、リクエストの再試行を最大 360 秒間継続するように設定できます。コンテナへのモデルのダウンロードとロードに 60 秒以上かかることが予想される場合は、SDK ソケットタイムアウトを 70 秒に設定します。 AWS SDK for Python (Boto3)の再試行方法を設定する方法の詳細については、「[Configuring a retry mode](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/retries.html#configuring-a-retry-mode)」を参照してください。次のコードは、`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)
```