ホスティングサービスでの独自の推論コードの使用 - Amazon SageMaker

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

ホスティングサービスでの独自の推論コードの使用

このセクションでは、Amazon SageMaker がホスティングサービス用の独自の推論コードを実行する Docker コンテナとやり取りする方法について説明します。この情報を使用して、推論コードを書き込み、Docker イメージを作成します。

SageMaker が推論イメージを実行する方法

コンテナを実行可能ファイルとして実行するように設定するには、Dockerfile で ENTRYPOINT 命令を使用します。次の点に注意してください。

  • モデル推論の場合、SageMaker はコンテナを次のように実行します。

    docker run image serve

    SageMaker は既定値を上書きしますCMDステートメントを指定して、コンテナ内のserveイメージ名の後に引数を指定します。serve 引数は、Dockerfile の CMD コマンドで指定した引数よりも優先されます。

     

  • exec 命令の ENTRYPOINT フォームを使用することをお勧めします。

    ENTRYPOINT ["executable", "param1", "param2"]

    例:

    ENTRYPOINT ["python", "k_means_inference.py"]

    exec 命令の ENTRYPOINT フォームは、/bin/sh の子としてではなく、直接実行ファイルを開始します。これにより、次のようなシグナルを受け取ることができます。SIGTERMおよびSIGKILLSageMaker API オペレーションから。これが要件です。

     

    たとえば、使用する場合 CreateEndpointAPI を使用してエンドポイントを作成するには、SageMaker はリクエストで指定するエンドポイント設定で必要な ML コンピューティングインスタンスの数をプロビジョニングします。SageMaker はこれらのインスタンスで Docker コンテナを実行します。

     

    エンドポイントをサポートするインスタンスの数を減らす場合 ( UpdateEndpointWeightsAndCapacitiesAPI)、SageMaker は、終了するインスタンスの Docker コンテナを停止するコマンドを実行します。コマンドは、SIGTERM シグナルを送信し、30 秒後に SIGKILL シグナルを送信します。

     

    エンドポイントを更新した場合 ( UpdateEndpointAPI) では、SageMaker は別の一連の ML コンピューティングインスタンスを起動して、推論コードを含む Docker コンテナを実行します。次に、前の Docker コンテナを停止するコマンドを実行します。Docker コンテナを停止するには、コマンドはSIGTERMシグナルを送信し、SIGKILL信号 30 秒後.

     

  • SageMaker では、 CreateModelリクエストを使用して、コンテナの環境変数と DNS ホスト名を次のように設定します。

     

    • ContainerDefinition.Environment 文字列間マップを使用して環境変数を設定します。

    • ContainerDefinition.ContainerHostname を使用して DNS ホスト名を設定します。

       

  • モデル推論に GPU デバイスを使用 (CreateEndpointConfigリクエストで GPU ベースの GPU ベースの GPU ベースのnvidia-docker互換性。NVIDIA ドライバーをイメージにバンドルしないでください。nvidia-docker の詳細については、NVIDIA/nvidia-docker を参照してください。

     

  • 使用することはできませんtiniイニシャライザを SageMaker コンテナでは、trainおよびserve引数。

SageMaker がモデルアーティファクトをロードする方法

[] ページで CreateModelリクエストの場合、コンテナー定義にはModelDataUrlパラメーター。これは、モデルアーティファクトを保存する S3 の場所を示します。SageMaker はこの情報を使用してモデルアーティファクトをどこからコピーするかを決定します。これは、推論コードで使用するために、アーティファクトを /opt/ml/model ディレクトリにコピーします。

ModelDataUrl は tar.gz ファイルを指す必要があります。この情報がないと、SageMaker はファイルをダウンロードできません。

SageMaker でモデルをトレーニングした場合、モデルアーティファクトは Amazon S3 の単一の圧縮 tar ファイルとして保存されます。SageMaker 以外でモデルをトレーニングした場合は、この 1 つの圧縮 tar ファイルを作成して S3 の場所に保存する必要があります。SageMaker は、コンテナが起動する前にこの tar ファイルを /opt/ml/model ディレクトリに解凍します。

コンテナがリクエストを提供する方法

コンテナにはポート 8080 の /invocations/ping に応答するウェブサーバーを実装する必要があります。

コンテナが推論リクエストに応答する方法

推論を取得するには、クライアントアプリケーションは POST リクエストを SageMaker エンドポイントに送信します。詳細については、「 InvokeEndpoint API」を参照してください。SageMaker はリクエストをコンテナに渡し、推論結果をコンテナからクライアントに返します。次の点に注意してください。

  • SageMaker は、すべてのPOSTでサポートされているものを除き、InvokeEndpoint。SageMaker は追加のヘッダーを追加する場合があります。推論コンテナはこれらの追加ヘッダーを安全に無視できる必要があります。

  • 推論リクエストを受信するには、コンテナにポート 8080 でリッスンするウェブサーバーが必要であり、POST エンドポイントへの /invocations リクエストを受け入れる必要があります。

  • 顧客のモデルコンテナは、250 ミリ秒以内にソケット接続リクエストを受け入れる必要があります。

  • 顧客のモデルコンテナは、60 秒以内にリクエストに応答する必要があります。モデル自体は、応答するまで 60 秒の最大処理時間をかけることができます。/invocations。モデルの処理時間が 50 ~ 60 秒かかる場合は、SDK ソケットタイムアウトを 70 秒に設定する必要があります。

コンテナがヘルスチェック (Ping) リクエストに応答する方法

-CreateEndpointおよびUpdateEndpointAPI 呼び出しは、SageMaker で新しい推論コンテナを開始します。コンテナの起動直後に、SageMaker は定期的に GET リクエストを/pingエンドポイントにする必要があります。

コンテナの最も単純な要件は、HTTP 200 のステータスコードと空の本文で応答することです。これにより、SageMaker に、コンテナが/invocationsエンドポイントにする必要があります。

コンテナが起動後 4 分間に 200 で一貫して応答し、ヘルスチェックを通過しない場合、CreateEndPointが失敗し、エンドポイントが失敗した状態のままになり、UpdateEndpointは完了しません。

コンテナが静的な 200 を返す最小限のバーがありますが、コンテナ開発者はこの機能を使用してより深いチェックを実行できます。/ping 試行のリクエストのタイムアウトは 2 秒です。