翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
ホスティングサービスでのカスタム推論コードの使用
このセクションでは、Amazon SageMaker AI がホスティングサービス用の独自の推論コードを実行する Docker コンテナとやり取りする方法について説明します。この情報を使用して、推論コードを書き込み、Docker イメージを作成します。
トピック
SageMaker AI が推論イメージを実行する方法
コンテナを実行可能ファイルとして実行するように設定するには、Dockerfile で ENTRYPOINT
命令を使用します。次の点に注意してください:
-
モデル推論の場合、SageMaker AI はコンテナを次のように実行します。
docker run
image
serveSageMaker AI は、イメージ名の後に
serve
引数を指定することで、コンテナ内のデフォルトのCMD
ステートメントを上書きします。serve
引数は、Dockerfile のCMD
コマンドで指定した引数よりも優先されます。 -
SageMaker AI は、すべてのコンテナがルートユーザーで実行されることを想定しています。ルートユーザーのみを使用するようにコンテナを作成します。SageMaker AI がコンテナを実行すると、ルートレベルのアクセス権を持たないユーザーがアクセス許可の問題を引き起こす可能性があります。
-
exec
命令のENTRYPOINT
フォームを使用することをお勧めします。ENTRYPOINT ["executable", "param1", "param2"]
例:
ENTRYPOINT ["python", "k_means_inference.py"]
exec
命令のENTRYPOINT
フォームは、/bin/sh
の子としてではなく、直接実行ファイルを開始します。これにより、SageMaker API オペレーションからSIGTERM
やSIGKILL
のようなシグナルを受信できます。これは要件です。例えば、
CreateEndpoint
API を使用してエンドポイントを作成すると、SageMaker AI はリクエストで指定したエンドポイント設定に必要な ML コンピューティングインスタンスの数をプロビジョニングします。SageMaker AI は、それらのインスタンスで Docker コンテナを実行します。(
UpdateEndpointWeightsAndCapacities
API を呼び出して) エンドポイントをバックアップするインスタンスの数を減らすと、SageMaker AI は終了するインスタンスで Docker コンテナを停止するコマンドを実行します。コマンドは、SIGTERM
シグナルを送信し、30 秒後にSIGKILL
シグナルを送信します。エンドポイントを更新すると (
UpdateEndpoint
API を呼び出すことで)、SageMaker AI は別の一連の ML コンピューティングインスタンスを起動し、推論コードを含む Docker コンテナを実行します。次に、前の Docker コンテナを停止するコマンドを実行します。Docker コンテナを停止するために、コマンドは、SIGTERM
シグナルを送信し、30 秒後にSIGKILL
シグナルを送信します。 -
SageMaker AI は、
CreateModel
リクエストで指定したコンテナ定義を使用して、次のようにコンテナの環境変数と DNS ホスト名を設定します。-
ContainerDefinition.Environment
文字列間マップを使用して環境変数を設定します。 -
ContainerDefinition.ContainerHostname
を使用して DNS ホスト名を設定します。
-
-
モデル推論に GPU デバイスを使用 (
CreateEndpointConfig
リクエストで GPU ベースの ML コンピューティングインスタンスを指定) する予定の場合は、コンテナがnvidia-docker
互換であることを確認してください。NVIDIA ドライバーをイメージにバンドルしないでください。nvidia-docker
の詳細については、NVIDIA/nvidia-dockerを参照してください。 -
引数と
train
serve
引数によって混乱するので、SageMaker AI コンテナのエントリポイントとしてtini
イニシャライザを使用することはできません。
SageMaker AI がモデルアーティファクトをロードする方法
CreateModel
API リクエストでは、ModelDataUrl
または S3DataSource
パラメータを使用して、モデルアーティファクトが保存されている S3 の場所を特定することができます。SageMaker AI は、モデルアーティファクトを S3 の場所から /opt/ml/model
ディレクトリにコピーして、推論コードで使用します。コンテナは /opt/ml/model
に読み取り専用でアクセスできます。このディレクトリには書き込まないでください。
ModelDataUrl
は tar.gz ファイルを指す必要があります。それ以外の場合、SageMaker AI はファイルをダウンロードしません。
SageMaker AI でモデルをトレーニングした場合、モデルアーティファクトは 1 つの圧縮 tar ファイルとして Amazon S3 に保存されます。SageMaker AI の外部でモデルをトレーニングした場合は、この単一の圧縮 tar ファイルを作成し、S3 の場所に保存する必要があります。SageMaker AI は、コンテナが起動する前に、この tar ファイルを /opt/ml/model ディレクトリに解凍します。
大規模なモデルをデプロイする場合は、非圧縮モデルのデプロイ の配置に従うことをお勧めします。
コンテナが推論リクエストに応答する方法
推論を取得するために、クライアントアプリケーションは SageMaker AI エンドポイントに POST リクエストを送信します。SageMaker AI はリクエストをコンテナに渡し、コンテナからクライアントに推論結果を返します。
コンテナが受け取る推論リクエストの詳細については、Amazon SageMaker AI API リファレンス」の以下のアクションを参照してください。
推論コンテナの要件
推論リクエストに応答するには、コンテナが次の要件を満たしている必要があります。
-
SageMaker AI は、 でサポートされているヘッダーを除くすべての
POST
ヘッダーを削除しますInvokeEndpoint
。SageMaker AI はヘッダーを追加する場合があります。推論コンテナはこれらの追加ヘッダーを安全に無視できる必要があります。 -
推論リクエストを受信するには、コンテナにポート 8080 でリッスンするウェブサーバーが必要であり、
/invocations
および/ping
エンドポイントへのPOST
リクエストを受け入れる必要があります。 -
顧客のモデルコンテナは、250 ミリ秒以内にソケット接続リクエストを受け入れる必要があります。
-
顧客のモデルコンテナは、60 秒以内にリクエストに応答する必要があります。モデル自体は、
/invocations
に応答するまで 60 秒の最大処理時間をかけることができます。モデルの処理時間が 50 ~ 60 秒かかる場合は、SDK ソケットタイムアウトを 70 秒に設定する必要があります。
例 呼び出し関数
以下の例は、コンテナ内のコードで推論リクエストを処理する方法を示しています。これらの例は、InvokeEndpoint アクションを使用してクライアントアプリケーションが送信するリクエストを処理します。
例 ストリーミングリクエストの呼び出し関数
以下の例は、推論コンテナ内のコードで推論リクエストを処理する方法を示しています。これらの例は、InvokeEndpointWithResponseStream アクションを使用してクライアントアプリケーションが送信するリクエストを処理します。
コンテナがストリーミング推論リクエストを処理すると、モデルが推論を生成する際に、モデルの推論は一連のパーツとして段階的に返されます。レスポンスが利用可能になると、クライアントアプリケーションはすぐに受信し始めます。クライアントアプリケーションは、モデルがレスポンス全体を生成するのを待つ必要はありません。ストリーミングを実装し、チャットボット、仮想アシスタント、ミュージックジェネレーターなどの高速でインタラクティブな体験をサポートできます。
コンテナがヘルスチェック (Ping) リクエストに応答する方法
SageMaker AI は、次の状況で新しい推論コンテナを起動します。
-
CreateEndpoint
、UpdateEndpoint
、およびUpdateEndpointWeightsAndCapacities
API 呼び出しへの応答 -
セキュリティパッチ
-
異常のあるインスタンスの置き換え
コンテナの起動直後に、SageMaker AI は/ping
エンドポイントへの定期的な GET リクエストの送信を開始します。
コンテナの最も単純な要件は、HTTP 200 のステータスコードと空の本文で応答することです。これは、コンテナが/invocations
エンドポイントで推論リクエストを受け入れる準備ができていることを SageMaker AI に示しています。
コンテナがスタートアップ後 8 分間に、常に 200 秒で応答しヘルスチェックを通過しない場合、新しいインスタンスの起動は失敗します。これにより CreateEndpoint
は失敗し、エンドポイントは障害状態のままになります。UpdateEndpoint
によって要求された更新は完了せず、セキュリティパッチは適用されず、異常のあるインスタンスは置き換えられません。
コンテナが静的な 200 を返す最小限のバーがありますが、コンテナ開発者はこの機能を使用してより深いチェックを実行できます。/ping
試行のリクエストのタイムアウトは 2 秒です。