マルチモデルエンドポイントを呼び出す - Amazon SageMaker

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

マルチモデルエンドポイントを呼び出す

マルチモデルエンドポイントを呼び出すには、単一のモデルエンドポイントを呼び出すのと同じように、ランタイムinvoke_endpointから を 1 SageMaker 回変更して使用します。エンドポイントのどのモデルをターゲットにするかを指定する新しい TargetModel パラメータを渡します。 SageMaker ランタイムInvokeEndpointリクエストは、呼び出し用に指定されたモデルの相対パスを取る新しいヘッダーX-Amzn-SageMaker-Target-Modelとして をサポートします。 SageMaker システムは、CreateModelAPI呼び出しの一部として提供されるプレフィックスとモデルの相対パスを組み合わせることで、モデルの絶対パスを構築します。

以下の手順は、 CPUと GPU-backed マルチモデルエンドポイントの両方で同じです。

AWS SDK for Python (Boto 3)

次の予測リクエストの例では、サンプルノートブックで AWS SDK for Python (Boto 3) を使用しています。

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 () を使用して 2 行でCSVリクエストを行う方法を示していますAWS 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

推論が成功した場合は、推論リクエストに関する情報が含まれた output_file.txt が作成されます。を使用して予測を行う方法のその他の例については AWS CLI、 SageMaker Python ドキュメントの「 を使用して予測を行う AWS CLI」を参照してください。 SDK

マルチモデルエンドポイントは、必要に応じてターゲットモデルを動的にロードします。MME サンプルノートブックを実行すると、単一のエンドポイントでホストされている複数のターゲットモデルに対してランダムな呼び出しを繰り返すため、これを確認できます。特定のモデルに対する最初のリクエストには時間がかかります。これは、モデルを Amazon Simple Storage Service (Amazon S3) からダウンロードしてメモリにロードする必要があるためです これは「コールドスタート」と呼ばれ、マルチモデルエンドポイントでは顧客のコストパフォーマンスが向上するように最適化されることが期待されます。モデルのロード後は追加のオーバーヘッドがないため、後続の呼び出しはより速く終了します。

注記

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

エラー時に ModelNotReadyExceptionリクエストを再試行する

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

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