翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon SageMaker がトレーニング情報を提供する方法
このセクションでは、トレーニングデータ、ハイパーパラメータ、その他の設定情報などのトレーニング情報を Docker コンテナで利用 SageMaker できるようにする方法について説明します。
モデルトレーニングを開始するCreateTrainingJob
リクエスト SageMaker を に送信するときは、トレーニングアルゴリズムを含む Docker イメージの Amazon Elastic Container Registry (Amazon ECR) パスを指定します。また、トレーニングデータが保存される Amazon Simple Storage Service (Amazon S3) の場所とアルゴリズム固有のパラメータも指定します。 は SageMaker 、この情報を Docker コンテナで利用できるようにして、トレーニングアルゴリズムがそれを使用できるようにします。このセクションでは、この情報を Docker コンテナで利用できるようにする方法を説明します。トレーニングジョブの作成方法については、「CreateTrainingJob
」を参照してください。 SageMaker コンテナが情報を整理する方法の詳細については、「」を参照してください SageMaker トレーニングツールキットと推論ツールキットの使用 。
ハイパーパラメータ
SageMaker は、 CreateTrainingJob
リクエストのハイパーパラメータを /opt/ml/input/config/hyperparameters.json
ファイルの Docker コンテナで使用できるようにします。
以下は、XGBoost の CreateTrainingJob
操作で num_round
と eta
ハイパーパラメータを指定するための hyperparameters.json
のハイパーパラメータ設定の例です。
{ "num_round": "128", "eta": "0.001" }
SageMaker 組み込み XGBoost アルゴリズムに使用できるハイパーパラメータの完全なリストについては、「XGBoost ハイパーパラメータ」を参照してください。
調整できるハイパーパラメータは、トレーニングするアルゴリズムによって異なります。 SageMaker 組み込みアルゴリズムで使用できるハイパーパラメータのリストについては、「Amazon 組み込みアルゴリズムまたは事前トレーニング済みモデルを使用する」のアルゴリズムリンクの下の「ハイパーパラメータ」を参照してください。 SageMaker
環境可変
SageMaker は、コンテナに次の環境変数を設定します。
-
TRAINING_JOB_NAME -
CreateTrainingJob
リクエストのTrainingJobName
パラメータで指定します。 -
TRAINING_JOB_ARN -
CreateTrainingJob
レスポンスのTrainingJobArn
として返されるトレーニングジョブの Amazon リソースネーム (ARN)。 -
CreateTrainingJob
リクエストの Environment パラメータで指定されるすべての環境変数。
入力データ設定
SageMaker は、CreateTrainingJob
リクエストの InputDataConfig
パラメータのデータチャネル情報を Docker コンテナの /opt/ml/input/config/inputdataconfig.json
ファイルで利用できるようにします。
たとえば、3 つのデータチャネル (train
、evaluation
、validation
) をリクエストで指定するとします。 SageMaker は以下の 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 は、前の例に示すように、各データチャネル (チャネル名やコンテンツタイプなど) に関する関連情報のみをコンテナに提供します。EFS または EFS F を入力データソースSxLustre として指定FullyReplicated
した場合、 S3DistributionType
は として設定されます。
トレーニングデータ
CreateTrainingJob
リクエストの AlgorithmSpecification
にある TrainingInputMode
パラメータでトレーニングのデータセットを使用可能にする方法を指定します。次の入力モードを使用できます。
-
File
モードFile
モードをTrainingInputMode
値として使用する場合、 はコンテナに以下のパラメータ SageMaker を設定します。-
TrainingInputMode
パラメータはinputdataconfig.json
に「File」として書き込まれます。 -
/opt/ml/input/data/
にデータチャネルディレクトリが書き込まれます。channel_name
File
モードを使用する場合、 はチャネルごとにディレクトリ SageMaker を作成します。例えば、、training
、 という名前の 3 つのチャネルがある場合testing
、validation
は Docker コンテナに次の 3 つのディレクトリ SageMaker を作成します。-
/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
モードを として使用する場合TrainingInputNodeParameter
、 はコンテナに以下のパラメータ SageMaker を設定します。-
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://my-bucket/train-01/data.csv
がある場合、s3://my-bucket/train
またはs3://my-bucket/train-01
のどちらもS3Uri
のプレフィックスとしては許可されません。フォルダに対応するチャネルを定義するには、末尾にスラッシュを使用することをお勧めします。例えば、
train-01
フォルダにはs3://my-bucket/train-01/
チャネルです。末尾のスラッシュがないと、別のフォルダs3://my-bucket/train-011/
またはファイルs3://my-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
というチャネルがある場合は、パイプを次の順序で読み取ります。-
/opt/ml/input/data/training_0
読み取りモードで を開き、 end-of-file (EOF) に読み込むか、最初のエポックが終了したら、パイプファイルを早期に閉じます。 -
最初のパイプファイルを閉じた後に、
/opt/ml/input/data/training_1
を探し、2 番目のエポックを実行します。同様に続けます。
指定されたエポックのファイルがまだ存在しない場合は、パイプが作成されるまでコードを再試行する必要があります。チャネルタイプ間にシーケンスの制限はありません。例えば、
training
チャネルの複数のエポックを読み取ることができ、準備ができたらvalidation
チャネルの読み取りを開始するだけです。または、アルゴリズムで必要な場合はそれらを同時に読み取ることができます。独自のコンテナを持ち込むときにパイプモードを使用する方法を示す Jupyter Notebook の例については、「独自のパイプモードアルゴリズムを Amazon に SageMaker
持ち込む」を参照してください。 -
SageMaker モデルトレーニングは、ファイルモード、高速ファイルモード、パイプモードのデータ入力場所として高性能な S3 Express One Zone ディレクトリバケットをサポートします。S3 Express One Zone を使用するには、Amazon S3 汎用バケットの代わりに S3 Express One Zone ディレクトリバケットの場所を入力します。 Amazon S3 IAM ロールの ARN に、必要なアクセスコントロールとアクセス許可ポリシーを指定します。詳細については、「AmazonSageMakerFullAccesspolicy」を参照してください。詳細については、「S3 Express One Zone」を参照してください。
分散型トレーニング設定
複数のコンテナで分散トレーニングを実行している場合、 は /opt/ml/input/config/resourceconfig.json
ファイルで使用可能なすべてのコンテナに関する情報 SageMaker を作成します。
コンテナ間通信を有効にするために、この JSON ファイルには、すべての Containers. SageMaker makes このファイルを 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" }