バッチ変換での独自の推論コードの使用 - Amazon SageMaker

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

バッチ変換での独自の推論コードの使用

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

推論イメージ SageMaker の実行方法

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

  • バッチ変換の場合、 はユーザーに代わってモデルを SageMaker 呼び出します。 はコンテナを次のように SageMaker 実行します。

    docker run image serve

    バッチ変換への入力は、小さなファイルに分割して並列に処理できる形式である必要があります。これらの形式には、CSV、JSONJSON LinesTFRecordRecordIO が含まれます。

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

     

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

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

    例:

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

     

  • SageMaker は、コンテナCreateTransformJobCreateModelおよび で指定された環境変数を設定します。さらに、以下の環境変数が設定されます。

    • コンテナがバッチ変換で実行される場合、SAGEMAKER_BATCHtrue に設定されます。

    • SAGEMAKER_MAX_PAYLOAD_IN_MB は、HTTP 経由でコンテナに送信される最大サイズのペイロードに設定されます。

    • SAGEMAKER_BATCH_STRATEGY は、呼び出しを行うごとにコンテナが単一レコードを送信する場合は SINGLE_RECORD に設定され、コンテナがペイロードに収まるだけのレコードを取得する場合は MULTI_RECORD に設定されます。

    • SAGEMAKER_MAX_CONCURRENT_TRANSFORMS は、同時に開くことができる /invocations リクエストの最大数に設定されます。

    注記

    最後の 3 つの環境変数は、ユーザーが実行する API コールから取得されます。ユーザーがそれらの値を設定していない場合は、値が渡されません。その場合は、デフォルト値または (/execution-parameters へのレスポンスで) アルゴリズムによって要求された値のどちらかが使用されます。

  • モデル推論に GPU デバイスを使用 (CreateTransformJob リクエストで GPU ベースの ML コンピューティングインスタンスを指定) する予定の場合は、コンテナが nvidia-docker 互換であることを確認してください。NVIDIA ドライバーをイメージにバンドルしないでください。nvidia-docker の詳細については、NVIDIA/nvidia-docker を参照してください。

     

  • train 引数と serve 引数で混乱が生じるため、 SageMaker コンテナでは、init イニシャライザをエントリポイントとして使用することはできません。

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

CreateModel リクエストでは、Amazon S3 でモデルアーティファクトを保存する場所を指定する ModelDataUrl パラメータがコンテナの定義に含まれます。 SageMaker を使用して推論を実行すると、この情報を使用してモデルアーティファクトのコピー先を決定します。また、推論コードで使用するために、アーティファクトを Docker コンテナの /opt/ml/model ディレクトリにコピーします。

ModelDataUrl パラメータは tar.gz ファイルを指す必要があります。そうしないと、 SageMaker はファイルをダウンロードできません。でモデルをトレーニングする場合 SageMaker、アーティファクトは 1 つの圧縮 tar ファイルとして Amazon S3 に保存されます。別のフレームワークでモデルをトレーニングする場合は、モデルアーティファクトを圧縮 tar ファイルとして Amazon S3 に保存する必要があります。 はこの tar ファイルを SageMaker 解凍し、バッチ変換ジョブが開始される前にコンテナの /opt/ml/model ディレクトリに保存します。

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

コンテナにはポート 8080 の呼び出しと ping リクエストに応答するウェブサーバーを実装する必要があります。バッチ変換の場合、動的ランタイム設定を に提供するように execution-parameters リクエストを実装するアルゴリズムを設定するオプションがあります SageMaker。 SageMaker は次のエンドポイントを使用します。

  • ping— 呼び出しリクエストを送信する前に、HTTP 200ステータスコードと ping リクエストが成功した空の本文について container. SageMaker waits のヘルスを定期的に確認するために使用します。呼び出しリクエストが送信される際に推論を生成するには、ping リクエストを使用して、モデルをメモリにロードする場合があります。

  • (オプション) execution-parameters - ランタイム時に、アルゴリズムでジョブに最適な調整パラメータが渡されるようにします。コンテナで使用できるメモリと CPU に基づき、アルゴリズムによって、ジョブに適切な MaxConcurrentTransformsBatchStrategy、および MaxPayloadInMB の値が選択されます。

呼び出しリクエストを呼び出す前に、 SageMaker は execution-parameters リクエストの呼び出しを試みます。バッチ変換ジョブを作成するときに、MaxConcurrentTransformsBatchStrategy、および parameters の値を指定できますMaxPayloadInMB。これらのパラメータの値は、次の優先順位を使用して SageMaker 決定します。

  1. CreateTransformJob リクエストを作成するときに指定するパラメータ値。

  2. が execution-parameters エンドポイントを SageMaker 呼び出すときにモデルコンテナが返す値>

  3. デフォルトのパラメータ値 (以下のテーブルを参照)。

    パラメータ デフォルト値
    MaxConcurrentTransforms

    1

    BatchStrategy

    MULTI_RECORD

    MaxPayloadInMB

    6

GET execution-parameters リクエストのレスポンスは、MaxConcurrentTransformsBatchStrategy、および MaxPayloadInMB パラメータのキーを持つ JSON オブジェクトです。有効なレスポンスの例を以下に示します。

{ “MaxConcurrentTransforms”: 8, “BatchStrategy": "MULTI_RECORD", "MaxPayloadInMB": 6 }

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

推論を取得するために、Amazon は推論コンテナに POST リクエスト SageMaker を送信します。POST リクエストボディには Amazon S3 からのデータが含まれています。Amazon はリクエストをコンテナに SageMaker 渡し、コンテナからの推論結果を返します。これにより、レスポンスからのデータが Amazon S3 に保存されます。

推論リクエストを受信するには、コンテナにポート 8080 でリッスンするウェブサーバーが必要であり、/invocations エンドポイントへの POST リクエストを受け入れる必要があります。推論リクエストのタイムアウトと最大リトライ回数は ModelClientConfig によって設定できます。

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

コンテナの最も単純な要件は、HTTP 200 のステータスコードと空の本文で応答することです。これは、コンテナが/invocationsエンドポイントで推論リクエストを受け入れる準備ができている SageMaker ことを示します。

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