直接呼び出しが設定されたマルチコンテナエンドポイントを使う - Amazon SageMaker

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

直接呼び出しが設定されたマルチコンテナエンドポイントを使う

SageMaker マルチコンテナエンドポイントを使用すると、複数のコンテナをデプロイして SageMaker 、エンドポイントに異なるモデルをデプロイできます。1 つのエンドポイントで、最大 15 個の異なる推論コンテナをホストできます。直接呼び出しを使うと、マルチコンテナエンドポイントでホストされている特定の推論コンテナにリクエストを送信できます。

直接呼び出しが設定されたマルチコンテナエンドポイントを呼び出す

直接呼び出しが設定されたマルチコンテナエンドポイントを呼び出すには、他のエンドポイントを呼び出す場合と同様に invoke_endpoint を呼び出し、呼び出すコンテナを TargetContainerHostname パラメータを使って指定します。

次の例では、マルチコンテナエンドポイントの secondContainer を直接呼び出して、予測を取得します。

import boto3 runtime_sm_client = boto3.Session().client('sagemaker-runtime') response = runtime_sm_client.invoke_endpoint( EndpointName ='my-endpoint', ContentType = 'text/csv', TargetContainerHostname='secondContainer', Body = body)

マルチコンテナエンドポイントへの各直接呼び出しリクエストでは、TargetContainerHostname を持つコンテナのみが呼び出しリクエストを処理します。次のいずれかを実行すると、検証エラーが発生します。

  • エンドポイントに存在しない TargetContainerHostname を指定する

  • 直接呼び出し用に設定されたエンドポイントへのリクエストに TargetContainerHostname の値を指定しない

  • 直接呼び出し用に設定されていないエンドポイントへのリクエストに TargetContainerHostname の値を指定する

直接呼び出しが設定されたマルチコンテナエンドポイントのセキュリティ

直接呼び出しが設定されたマルチコンテナエンドポイントでは、メモリとストレージボリュームを共有する複数のコンテナが単一のインスタンス内でホストされます。安全なコンテナを使用し、ターゲットコンテナへのリクエストの正しいマッピングを維持し、ターゲットコンテナへの正しいアクセス権をユーザーに提供するのはお客様の責任です。 SageMaker は、IAM ロールを使用して、リソースへのアクセスをそのロールに許可または拒否するかどうか、およびどのような条件下で指定する IAM アイデンティティベースのポリシーを提供します。IAM ロールの詳細については、AWS Identity and Access Management ユーザーガイドの「IAM ロール」をご参照ください。アイデンティティベースのポリシーの詳細については、「アイデンティティベースおよびリソースベースのポリシー」を参照してください。

デフォルトでは、直接呼び出しが設定されたマルチコンテナエンドポイントに対する InvokeEndpoint 許可を持つ IAM プリンシパルは、invoke_endpoint を呼び出したときに指定したエンドポイント名を使って、そのエンドポイント内の任意のコンテナを呼び出せます。invoke_endpoint アクセス許可をマルチコンテナエンドポイント内の限定されたコンテナセットに制限する必要がある場合は、sagemaker:TargetContainerHostname IAM 条件キーを使います。次のポリシーは、エンドポイント内の特定のコンテナに対する呼び出しを制限する方法を示しています。

次のポリシーでは、指定された正規表現のいずれかに TargetContainerHostname フィールドの値が一致する場合にのみ invoke_endpoint リクエストを許可します。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "sagemaker:InvokeEndpoint" ], "Effect": "Allow", "Resource": "arn:aws:sagemaker:region:account-id:endpoint/endpoint_name", "Condition": { "StringLike": { "sagemaker:TargetContainerHostname": ["customIps*", "common*"] } } } ] }

次のポリシーでは、Deny ステートメントで指定された正規表現のいずれかに TargetContainerHostname フィールドの値が一致する場合は invoke_endpoint リクエストを拒否します。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "sagemaker:InvokeEndpoint" ], "Effect": "Allow", "Resource": "arn:aws:sagemaker:region:account-id:endpoint/endpoint_name", "Condition": { "StringLike": { "sagemaker:TargetContainerHostname": ["*"] } } }, { "Action": [ "sagemaker:InvokeEndpoint" ], "Effect": "Deny", "Resource": "arn:aws:sagemaker:region:account-id:endpoint/endpoint_name", "Condition": { "StringLike": { "sagemaker:TargetContainerHostname": ["special*"] } } } ] }

SageMaker 条件キーの詳細については、「 AWS Identity and Access Management ユーザーガイド」の「 の条件キー SageMaker」を参照してください。

直接呼び出しが設定されたマルチコンテナエンドポイントのメトリクス

にリストされているエンドポイントメトリクスに加えてAmazon SageMaker で Amazon をモニタリングする CloudWatch、 はコンテナごとのメトリクス SageMaker も提供します。

直接呼び出しが設定されたマルチコンテナエンドポイントのコンテナ単位のメトリクスは、 にあり、 CloudWatch と の 2 AWS/SageMaker つの名前空間に分類されますaws/sagemaker/EndpointsAWS/SageMaker 名前空間には、呼び出し関連のメトリクスが含まれており、aws/sagemaker/Endpoints 名前空間には、メモリおよび CPU 使用率のメトリクスが含まれています。

次の表は、直接呼び出しが設定されたマルチコンテナエンドポイントの、コンテナ単位のメトリクスを示しています。すべてのメトリクスは [EndpointName, VariantName, ContainerName] ディメンションを使います。特定のバリアントと特定のコンテナに対応するディメンションは、特定のエンドポイントのメトリクスをフィルタリングします。これらのメトリクスは、推論パイプラインのメトリクス名と同じメトリクス名を共有しますが、共有レベルはコンテナ単位 [EndpointName, VariantName, ContainerName] です。

メトリクス名 説明 ディメンション NameSpace
Invocations エンドポイント内のコンテナに送信された InvokeEndpoint リクエストの数。そのコンテナに送信されたリクエストの合計数を得るには、Sum 統計を使います。単位: なし、有効な統計: SumSample Count EndpointName, VariantName, ContainerName AWS/SageMaker
Invocation4XX Errors 特定のコンテナについて、モデルが 4xx HTTP レスポンスコードを返した InvokeEndpoint リクエスト数。4xx レスポンスごとに、 SageMaker は を送信します1。単位: なし、有効な統計: AverageSum EndpointName, VariantName, ContainerName AWS/SageMaker
Invocation5XX Errors 特定のコンテナについて、モデルが 5xx HTTP レスポンスコードを返した InvokeEndpoint リクエスト数。5xx レスポンスごとに、 SageMaker は を送信します1。単位: なし、有効な統計: AverageSum EndpointName, VariantName, ContainerName AWS/SageMaker
ContainerLatency から見たときに、ターゲットコンテナが応答するのにかかった時間 SageMaker。 ContainerLatencyには、リクエストの送信、モデルのコンテナからの応答の取得、コンテナでの推論の完了にかかった時間が含まれます。単位: マイクロ秒、有効な統計: AverageSumMinMaxSample Count EndpointName, VariantName, ContainerName AWS/SageMaker
OverheadLatency がクライアントリクエストに応答するのにかかった時間に加算したオーバーヘッド SageMaker 時間。 OverheadLatencyは、リクエスト SageMaker を受信してからクライアントに応答を返すまで、 を引いた時間から測定されますModelLatency。オーバーヘッドのレイテンシーは、リクエストとレスポンスのペイロードサイズ、リクエストの頻度、リクエストの認証、認可などの要因によって異なります。単位: マイクロ秒、有効な統計: AverageSumMinMax、Sample Count EndpointName, VariantName, ContainerName AWS/SageMaker
CPUUtilization インスタンスで実行されているコンテナが使っている CPU ユニットの割合。値の範囲は 0%~100% で、CPU の数で乗算されます。例えば、CPU が 4 つの場合、CPUUtilization は 0%~400% になります。直接呼び出しが設定されたエンドポイントの場合、CPUUtilization メトリクスの数は、そのエンドポイント内のコンテナの数と等しくなります。単位: パーセント EndpointName, VariantName, ContainerName aws/sagemaker/Endpoints
MemoryUtilizaton インスタンスで実行されているコンテナが使っているメモリの割合。この値は 0%~100% です。CPUUtilization と同様に、直接呼び出しが設定されたエンドポイントでは、 MemoryUtilization メトリクスの数はそのエンドポイント内のコンテナの数と等しくなります。単位: パーセント EndpointName, VariantName, ContainerName aws/sagemaker/Endpoints

上表のすべてのメトリクスは、直接呼び出しが設定されたマルチコンテナエンドポイントに固有のものです。これらの特別なコンテナ単位のメトリクスの他に、表内のすべてのメトリクスには、ディメンション [EndpointName, VariantName] のバリアントレベルのメトリクスもあります (ContainerLatency を除く)。

マルチコンテナエンドポイントをオートスケーリングする

InvocationsPerInstance メトリクスを使って、マルチコンテナエンドポイントのオートスケーリングを設定する場合、各コンテナでは、推論リクエストに対して同様の CPU 使用率とレイテンシーを示すモデルを使うことをお勧めします。これが推奨されるのは、マルチコンテナエンドポイントへのトラフィックが CPU 使用率が低いモデルから CPU 使用率が高いモデルに変化しても、全体的な呼び出しボリュームが同じままである場合、エンドポイントはスケールアウトされないためです。また、CPU 使用率が高いモデルに対するすべてのリクエストを処理するインスタンスが足りなくなる可能性があります。エンドポイントをオートスケーリングする方法については、「Amazon SageMaker モデルを自動的にスケーリングする」を参照してください。

マルチコンテナエンドポイントをトラブルシューティングする

以下のセクションは、マルチコンテナエンドポイントで発生したエラーのトラブルシューティングに役立ちます。

Ping ヘルスチェックエラー

複数のコンテナがある場合、エンドポイント作成時にはエンドポイントメモリと CPU の負荷が高くなります。具体的には、MemoryUtilizationCPUUtilization のメトリクスがコンテナを 1 つ持つエンドポイントよりも高くなります。使用負荷はコンテナの数に比例するためです。このため、十分なメモリと CPU を持つインスタンスタイプを選択して、インスタンスにすべてのモデルをロードするのに十分なメモリが存在するようにすることをお勧めします (推論パイプラインのデプロイにもこの同じガイダンスが適用されます)。そうしない場合、XXX did not pass the ping health check などのエラーが発生してエンドポイントの作成が失敗する可能性があります。

欠落 accept-bind-to-port= 真の Docker ラベル

マルチコンテナエンドポイントのコンテナは、(8080 ポートではなく) SAGEMAKER_BIND_TO_PORT 環境変数で指定されたポートでリッスンします。コンテナがマルチコンテナエンドポイントで実行されると、 はコンテナにこの環境変数 SageMaker を自動的に提供します。この環境変数が存在しない場合、コンテナではデフォルトでポート 8080 が使用されます。コンテナがこの要件に準拠していることを示すには、次のコマンドを使用して Dockerfile にラベルを追加します。

LABEL com.amazonaws.sagemaker.capabilities.accept-bind-to-port=true

追加しない場合は、Your Ecr Image XXX does not contain required com.amazonaws.sagemaker.capabilities.accept-bind-to-port=true Docker label(s). などのエラーメッセージが表示されます。

コンテナが 2 番目のポートをリッスンする必要がある場合は、SAGEMAKER_SAFE_PORT_RANGE 環境変数で指定された範囲内のポートを選択してください。値を TAK -YYYY 形式で包括的範囲として指定します。ここで、TAK と YYYY は複数桁の整数です。 は、複数コンテナエンドポイントでコンテナを実行するときに、この値を自動的に SageMaker 提供します。