

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

# Amazon SageMaker AI がトレーニング情報を提供する方法
<a name="your-algorithms-training-algo-running-container"></a>

このセクションでは、SageMaker AI がトレーニングデータ、ハイパーパラメータ、その他の設定情報などのトレーニング情報を Docker コンテナで利用できるようにする方法について説明します。

モデルトレーニングを開始する [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) リクエストを SageMaker AI に送信する際、トレーニングアルゴリズムが格納されている Docker イメージの Amazon Elastic Container Registry (Amazon ECR) パスを指定します。トレーニングデータが保存される Amazon Simple Storage Service (Amazon S3) の場所とアルゴリズム固有のパラメータも指定します。SageMaker AI はこの情報を Docker コンテナが利用できるようにするため、トレーニングアルゴリズムで使用できます。このセクションでは、この情報を Docker コンテナで利用できるようにする方法を説明します。トレーニングジョブの作成方法については、「`CreateTrainingJob`」を参照してください。SageMaker AI コンテナで情報を整理する方法の詳細については、「[SageMaker トレーニングおよび推論ツールキット](amazon-sagemaker-toolkits.md)」を参照してください。

**Topics**
+ [ハイパーパラメータ](#your-algorithms-training-algo-running-container-hyperparameters)
+ [環境可変](#your-algorithms-training-algo-running-container-environment-variables)
+ [入力データ設定](#your-algorithms-training-algo-running-container-inputdataconfig)
+ [トレーニングデータ](#your-algorithms-training-algo-running-container-trainingdata)
+ [分散型トレーニング設定](#your-algorithms-training-algo-running-container-dist-training)

## ハイパーパラメータ
<a name="your-algorithms-training-algo-running-container-hyperparameters"></a>

 SageMaker AI は、`CreateTrainingJob` リクエスト内のハイパーパラメータを `/opt/ml/input/config/hyperparameters.json` ファイル内の Docker コンテナで利用できるようにします。

以下は、[XGBoost](https://docs.aws.amazon.com/sagemaker/latest/dg/xgboost.html) の `CreateTrainingJob` 操作で `num_round` と `eta` ハイパーパラメータを指定するための `hyperparameters.json` のハイパーパラメータ設定の例です。

```
{
    "num_round": "128",
    "eta": "0.001"
}
```

SageMaker AI のビルトイン XGBoost アルゴリズムに使用できるハイパーパラメータの完全なリストについては、「[XGBoost Hyperparameters](https://docs.aws.amazon.com/sagemaker/latest/dg/xgboost_hyperparameters.html)」を参照してください。

調整できるハイパーパラメータは、トレーニングするアルゴリズムによって異なります。SageMaker AI 組み込みアルゴリズムで使用できるハイパーパラメータのリストについては、「[Use Amazon SageMaker AI Built-in Algorithms or Pre-trained Models](https://docs.aws.amazon.com/sagemaker/latest/dg/algos.html)」のアルゴリズムリンクの下にある「**Hyperparameters**」にリストされているものを参照してください。

## 環境可変
<a name="your-algorithms-training-algo-running-container-environment-variables"></a>

SageMaker AI では次の環境変数がコンテナ内で設定されます。
+ TRAINING\_JOB\_NAME - `CreateTrainingJob` リクエストの `TrainingJobName` パラメータで指定します。
+ TRAINING\_JOB\_ARN - `CreateTrainingJob` レスポンスの `TrainingJobArn` として返されるトレーニングジョブの Amazon リソースネーム (ARN)。
+ `CreateTrainingJob` リクエストの [Environment](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html#sagemaker-CreateTrainingJob-request-Environment) パラメータで指定されるすべての環境変数。

## 入力データ設定
<a name="your-algorithms-training-algo-running-container-inputdataconfig"></a>

SageMaker AI は、`CreateTrainingJob` リクエストの `InputDataConfig` パラメータでデータチャネル情報を指定します。この情報を Docker コンテナの `/opt/ml/input/config/inputdataconfig.json` ファイルで利用できるようにします。

例えば、3 つのデータチャネル (`train`、`evaluation`、`validation`) をリクエストで指定するとします。SageMaker AI は以下の JSON を提供します。

```
{
  "train" : {"ContentType":  "trainingContentType",
             "TrainingInputMode": "File",
             "S3DistributionType": "FullyReplicated",
             "RecordWrapperType": "None"},
  "evaluation" : {"ContentType":  "evalContentType",
                  "TrainingInputMode": "File",
                  "S3DistributionType": "FullyReplicated",
                  "RecordWrapperType": "None"},
  "validation" : {"TrainingInputMode": "File",
                  "S3DistributionType": "FullyReplicated",
                  "RecordWrapperType": "None"}
}
```

**注記**  
SageMaker AI は、前の例で示されているように各データチャネルに関連する情報 (チャネル名やコンテンツタイプなど) のみをコンテナに提供します。EFS または FSxLustre を入力データソースとして指定した場合、`S3DistributionType` は `FullyReplicated` に設定されます。

## トレーニングデータ
<a name="your-algorithms-training-algo-running-container-trainingdata"></a>

[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) リクエストの `AlgorithmSpecification` にある `TrainingInputMode` パラメータでトレーニングのデータセットを使用可能にする方法を指定します。次の入力モードを使用できます。
+ **`File` モード**

  `TrainingInputMode` 値として `File` mode を使用する場合、SageMaker AI はコンテナに以下のパラメータを設定します。
  + `TrainingInputMode` パラメータは `inputdataconfig.json` に「File」として書き込まれます。
  + `/opt/ml/input/data/{{channel_name}}` にデータチャネルディレクトリが書き込まれます。

  `File` mode を使用する場合、SageMaker AI はチャネルごとにディレクトリを作成します。例えば、`training`、`validation`、`testing` という名前の 3 つのチャネルがある場合、SageMaker AI は Docker コンテナに次の 3 つのディレクトリを作成します。
  + `/opt/ml/input/data/training`
  + `/opt/ml/input/data/validation`
  + `/opt/ml/input/data/testing`

  `File` モードでは、次のデータソースがサポートされています。
  + Amazon Simple Storage Service (Amazon S3)
  + Amazon Elastic File System (Amazon EFS)
  + Amazon FSx for Lustre
**注記**  
Amazon EFS や Amazon FSx などのファイルシステムのデータソースを使用するチャネルでは、`File` モードを使用する必要があります。この場合、チャネルで提供されるディレクトリパスは `/opt/ml/input/data/{{channel_name}}` にマウントされます。
+ **`FastFile` モード**

  `FastFile` mode を `TrainingInputNodeParameter` として使用する場合、SageMaker AI はコンテナに以下のパラメータを設定します。
  + `File` mode と同様に、`FastFile` mode では `TrainingInputMode` パラメータは `inputdataconfig.json` に「File」として書き込まれます。
  + `/opt/ml/input/data/{{channel_name}}` にデータチャネルディレクトリが書き込まれます。

  `FastFile` モードでは、次のデータソースがサポートされています。
  + Amazon S3

  `FastFile` モードを使用すると、チャネルディレクトリは読み取り専用権限でマウントされます。

  歴史的に、`File` mode は `FastFile` mode よりも優先されていました。下位互換性を確保するため、`TrainingInputMode` パラメータが `inputdataconfig.json.` で `File` に設定されている限り、`File` mode をサポートするアルゴリズムは `FastFile` mode とシームレスに連携できます。
**注記**  
`FastFile` モードを使用するチャネルは、「S3Prefix」の `S3DataType` を使用する必要があります。  
`FastFile` モードは、スラッシュ (`/`) を Amazon S3 オブジェクトをフォルダにグループ化するための区切り文字として使用するフォルダビューを示します。`S3Uri` のプレフィックスは、部分的なフォルダ名に対応させることはできません。例えば、Amazon S3 データセットに `s3://amzn-s3-demo-bucket/train-01/data.csv` がある場合、`s3://amzn-s3-demo-bucket/train` または `s3://amzn-s3-demo-bucket/train-01` のどちらも `S3Uri` のプレフィックスとしては許可されません。  
フォルダに対応するチャネルを定義するには、末尾にスラッシュを使用することをお勧めします。例えば、`train-01` フォルダには `s3://amzn-s3-demo-bucket/train-01/` チャネルです。末尾のスラッシュがないと、別のフォルダ `s3://amzn-s3-demo-bucket/train-011/` またはファイル `s3://amzn-s3-demo-bucket/train-01.txt/` が存在する場合、チャネルがあいまいになります。
+ **`Pipe` モード**
  + `inputdataconfig.json` に書き込まれる `TrainingInputMode` パラメータ: "Pipe"
  + Docker コンテナ内のデータチャネルディレクトリ: `/opt/ml/input/data/{{channel_name_epoch_number}}`
  + サポートされているデータソース: Amazon S3

  チャネルごとに別のパイプから読む必要があります。例えば、`training`、`validation`、`testing` という名前の 3 つのチャネルがある場合は、次のパイプから読み取る必要があります。
  + `/opt/ml/input/data/training_0, /opt/ml/input/data/training_1, ...`
  + `/opt/ml/input/data/validation_0, /opt/ml/input/data/validation_1, ...`
  + `/opt/ml/input/data/testing_0, /opt/ml/input/data/testing_1, ...`

  パイプを順番に読み取ります。たとえば、`training` というチャネルがある場合は、パイプを次の順序で読み取ります。

  1. `/opt/ml/input/data/training_0` を読み取りモードで開き、end-of-file (EOF) まで読み取ります。または最初のエポックで終了した場合は、パイプファイルを早期に閉じます。

  1. 最初のパイプファイルを閉じた後に、`/opt/ml/input/data/training_1` を探し、2 番目のエポックを実行します。同様に続けます。

  指定されたエポックのファイルがまだ存在しない場合は、パイプが作成されるまでコードを再試行する必要があります。チャネルタイプ間にシーケンスの制限はありません。例えば、`training` チャネルの複数のエポックを読み取ることができ、準備ができたら `validation` チャネルの読み取りを開始するだけです。または、アルゴリズムで必要な場合はそれらを同時に読み取ることができます。

  独自のコンテナを持ち込む際にパイプモードを使用する方法を示す Jupyter Notebook の例については、「[Bring your own pipe-mode algorithm to Amazon SageMaker AI](https://github.com/aws/amazon-sagemaker-examples/blob/main/advanced_functionality/pipe_bring_your_own/pipe_bring_your_own.ipynb)」を参照してください。

  

SageMaker AI モデルトレーニングは、ファイルモード、高速ファイルモード、パイプモードのデータ入力場所として、高性能の S3 Express One Zone ディレクトリバケットをサポートしています。S3 Express One Zone を使用するには、Amazon S3 汎用バケットの代わりに、S3 Express One Zone ディレクトリバケットの場所を入力します。IAM ロールの ARN に、必要なアクセスコントロールとアクセス許可ポリシーを指定します。詳細については、「[AmazonSageMakerFullAccesspolicy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonSageMakerFullAccess.html)」を参照してください。SageMaker AI 出力データは、Amazon S3 マネージドキー (SSE-S3) を使用するサーバー側の暗号化でのみディレクトリバケットで暗号化できます。 AWS KMS キーによるサーバー側の暗号化 (SSE-KMS) は現在、SageMaker AI 出力データをディレクトリバケットに保存するためにサポートされていません。詳細については、「[S3 Express One Zone](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-one-zone.html)」を参照してください。

## 分散型トレーニング設定
<a name="your-algorithms-training-algo-running-container-dist-training"></a>

複数コンテナで分散型トレーニングを実行する場合、SageMaker AI はすべてのコンテナに関する情報を `/opt/ml/input/config/resourceconfig.json` ファイル内で利用できるようにします。

コンテナ間通信を有効にするために、この JSON ファイルにはすべてのコンテナに関する情報が含まれます。SageMaker AI は、このファイルを `File` モードと `Pipe` モードの両方のアルゴリズムで利用できるようにします。ファイルは以下の情報を提供します。
+ `current_host` - コンテナネットワーク上の現在のコンテナの名前。例えば、`algo-1`。ホスト値はいつでも変更できます。この変数に特定の値を指定したコードは記述しないでください。
+ `hosts` - 辞書順にソートされた、コンテナネットワーク上のすべてのコンテナの名前のリスト。たとえば、3 ノードクラスターの場合は `["algo-1", "algo-2", "algo-3"]` です。コンテナでは、これらの名前を使用して、コンテナネットワーク上の他のコンテナをアドレス指定できます。ホスト値はいつでも変更できます。これらの変数に特定の値を指定したコードは記述しないでください。
+ `network_interface_name` - コンテナに対して公開されているネットワークインターフェイスの名前。たとえば、Message Passing Interface (MPI) を実行しているコンテナは、この情報を使用してネットワークインターフェイス名を設定できます。
+ この情報は正確ではない可能性があるため、`/etc/hostname` または `/etc/hosts` では使用しないでください。
+ ホスト名情報は、アルゴリズムコンテナですぐには利用できない場合があります。ノードがクラスター内で使用可能になった時点で、ホスト名解決操作に再試行ポリシーを追加することをお勧めします。

3 ノードクラスターのノード 1 のファイル例を次に示します。

```
{
    "current_host": "algo-1",
    "hosts": ["algo-1","algo-2","algo-3"],
    "network_interface_name":"eth1"
}
```