

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

# バッチ変換でのカスタム推論コード
<a name="your-algorithms-batch-code"></a>

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

**Topics**
+ [SageMaker AI が推論イメージを実行する方法](#your-algorithms-batch-code-run-image)
+ [SageMaker AI がモデルアーティファクトをロードする方法](#your-algorithms-batch-code-load-artifacts)
+ [コンテナがリクエストを提供する方法](#your-algorithms-batch-code-how-containe-serves-requests)
+ [コンテナが推論リクエストに応答する方法](#your-algorithms-batch-code-how-containers-should-respond-to-inferences)
+ [コンテナがヘルスチェック (Ping) リクエストに応答する方法](#your-algorithms-batch-algo-ping-requests)

## SageMaker AI が推論イメージを実行する方法
<a name="your-algorithms-batch-code-run-image"></a>

コンテナを実行可能ファイルとして実行するように設定するには、Dockerfile で `ENTRYPOINT` 命令を使用します。次の点に注意してください。
+ バッチ変換の場合、SageMaker AI はユーザーに代わってモデルを呼び出します。SageMaker AI はコンテナを次のように実行します。

  ```
  docker run image serve
  ```

  バッチ変換への入力は、小さなファイルに分割して並列に処理できる形式である必要があります。これらの形式には、CSV、[JSON](https://www.json.org/json-en.html)、[JSON Lines](https://jsonlines.org/)、[TFRecord](https://www.tensorflow.org/tutorials/load_data/tfrecord)、[RecordIO](https://mesos.apache.org/documentation/latest/recordio/) が含まれます。

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

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

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

  例えば、次のようになります。

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

   
+ SageMaker AI は、コンテナに対して、[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html) および [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html) で指定された環境変数を設定します。さらに、以下の環境変数が設定されます。
  + コンテナがバッチ変換で実行される場合、`SAGEMAKER_BATCH` は `true` に設定されます。
  + `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](https://github.com/NVIDIA/nvidia-docker) を参照してください。

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

  

## SageMaker AI がモデルアーティファクトをロードする方法
<a name="your-algorithms-batch-code-load-artifacts"></a>

[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html) リクエストでは、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` ディレクトリにそれを保存します。

## コンテナがリクエストを提供する方法
<a name="your-algorithms-batch-code-how-containe-serves-requests"></a>

コンテナにはポート 8080 の呼び出しと ping リクエストに応答するウェブサーバーを実装する必要があります。バッチ変換の場合は、アルゴリズムを設定して、動的ランタイムを SageMaker AI に設定するように execution-parameters リクエストを実装するオプションがあります。SageMaker AI は次のエンドポイントを使用します。
+ `ping` - コンテナの健全性を定期的にチェックするために使用します。SageMaker AI は、ping リクエスト成功の HTTP `200` ステータスコードと空の本文を待ってから呼び出しリクエストを送信します。呼び出しリクエストが送信される際に推論を生成するには、ping リクエストを使用して、モデルをメモリにロードする場合があります。
+ (オプション) `execution-parameters` - ランタイム時に、アルゴリズムでジョブに最適な調整パラメータが渡されるようにします。コンテナで使用できるメモリと CPU に基づき、アルゴリズムによって、ジョブに適切な `MaxConcurrentTransforms`、`BatchStrategy`、および `MaxPayloadInMB` の値が選択されます。

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

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

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

1. デフォルトのパラメータ値 (以下のテーブルを参照)。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/your-algorithms-batch-code.html)

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

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

## コンテナが推論リクエストに応答する方法
<a name="your-algorithms-batch-code-how-containers-should-respond-to-inferences"></a>

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

推論リクエストを受信するには、コンテナにポート 8080 でリッスンするウェブサーバーが必要であり、`/invocations` エンドポイントへの POST リクエストを受け入れる必要があります。推論リクエストのタイムアウトと最大リトライ回数は `[ModelClientConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ModelClientConfig.html)` によって設定できます。

## コンテナがヘルスチェック (Ping) リクエストに応答する方法
<a name="your-algorithms-batch-algo-ping-requests"></a>

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

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