バッチ変換でのカスタム推論コード - Amazon SageMaker AI

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

バッチ変換でのカスタム推論コード

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

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

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

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

    docker run image serve

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

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

     

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

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

    例:

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

     

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

    • コンテナがバッチ変換で実行される場合、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 AI コンテナでは、init イニシャライザをエントリポイントとして使用することはできません。

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

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

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

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

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

  • ping - コンテナの健全性を定期的にチェックするために使用します。SageMaker AI は、ping リクエスト成功の HTTP 200 ステータスコードと空の本文を待ってから呼び出しリクエストを送信します。呼び出しリクエストが送信される際に推論を生成するには、ping リクエストを使用して、モデルをメモリにロードする場合があります。

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

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

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

  2. SageMaker AI で execution-parameters エンドポイントが呼び出されるとモデルコンテナから返される値。

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

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

    1

    BatchStrategy

    MULTI_RECORD

    MaxPayloadInMB

    6

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

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

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

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

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

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

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

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