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