翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon SageMaker AI がトレーニング情報を提供する方法
このセクションでは、SageMaker AI がトレーニングデータ、ハイパーパラメータ、その他の設定情報などのトレーニング情報を Docker コンテナで利用できるようにする方法について説明します。
モデルトレーニングを開始する CreateTrainingJob リクエストを SageMaker AI に送信する際、トレーニングアルゴリズムが格納されている Docker イメージの Amazon Elastic Container Registry (Amazon ECR) パスを指定します。トレーニングデータが保存される Amazon Simple Storage Service (Amazon S3) の場所とアルゴリズム固有のパラメータも指定します。SageMaker AI はこの情報を Docker コンテナが利用できるようにするため、トレーニングアルゴリズムで使用できます。このセクションでは、この情報を Docker コンテナで利用できるようにする方法を説明します。トレーニングジョブの作成方法については、「CreateTrainingJob」を参照してください。SageMaker AI コンテナで情報を整理する方法の詳細については、「SageMaker トレーニングおよび推論ツールキット」を参照してください。
ハイパーパラメータ
SageMaker AI は、CreateTrainingJob リクエスト内のハイパーパラメータを /opt/ml/input/config/hyperparameters.json ファイル内の Docker コンテナで利用できるようにします。
以下は、XGBoost の CreateTrainingJob 操作で num_round と eta ハイパーパラメータを指定するための hyperparameters.json のハイパーパラメータ設定の例です。
{ "num_round": "128", "eta": "0.001" }
SageMaker AI のビルトイン XGBoost アルゴリズムに使用できるハイパーパラメータの完全なリストについては、「XGBoost Hyperparameters」を参照してください。
調整できるハイパーパラメータは、トレーニングするアルゴリズムによって異なります。SageMaker AI 組み込みアルゴリズムで使用できるハイパーパラメータのリストについては、「Use Amazon SageMaker AI Built-in Algorithms or Pre-trained Models」のアルゴリズムリンクの下にある「Hyperparameters」にリストされているものを参照してください。
環境可変
SageMaker AI では次の環境変数がコンテナ内で設定されます。
-
TRAINING_JOB_NAME -
CreateTrainingJobリクエストのTrainingJobNameパラメータで指定します。 -
TRAINING_JOB_ARN -
CreateTrainingJobレスポンスのTrainingJobArnとして返されるトレーニングジョブの Amazon リソースネーム (ARN)。 -
CreateTrainingJobリクエストの Environment パラメータで指定されるすべての環境変数。
入力データ設定
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 に設定されます。
トレーニングデータ
CreateTrainingJob リクエストの AlgorithmSpecification にある TrainingInputMode パラメータでトレーニングのデータセットを使用可能にする方法を指定します。次の入力モードを使用できます。
-
FileモードTrainingInputMode値としてFilemode を使用する場合、SageMaker AI はコンテナに以下のパラメータを設定します。-
TrainingInputModeパラメータはinputdataconfig.jsonに「File」として書き込まれます。 -
/opt/ml/input/data/にデータチャネルディレクトリが書き込まれます。channel_name
Filemode を使用する場合、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モードFastFilemode をTrainingInputNodeParameterとして使用する場合、SageMaker AI はコンテナに以下のパラメータを設定します。-
Filemode と同様に、FastFilemode ではTrainingInputModeパラメータはinputdataconfig.jsonに「File」として書き込まれます。 -
/opt/ml/input/data/にデータチャネルディレクトリが書き込まれます。channel_name
FastFileモードでは、次のデータソースがサポートされています。-
Amazon S3
FastFileモードを使用すると、チャネルディレクトリは読み取り専用権限でマウントされます。歴史的に、
Filemode はFastFilemode よりも優先されていました。下位互換性を確保するため、TrainingInputModeパラメータがinputdataconfig.json.でFileに設定されている限り、Filemode をサポートするアルゴリズムはFastFilemode とシームレスに連携できます。注記
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というチャネルがある場合は、パイプを次の順序で読み取ります。-
/opt/ml/input/data/training_0を読み取りモードで開き、end-of-file (EOF) まで読み取ります。または最初のエポックで終了した場合は、パイプファイルを早期に閉じます。 -
最初のパイプファイルを閉じた後に、
/opt/ml/input/data/training_1を探し、2 番目のエポックを実行します。同様に続けます。
指定されたエポックのファイルがまだ存在しない場合は、パイプが作成されるまでコードを再試行する必要があります。チャネルタイプ間にシーケンスの制限はありません。例えば、
trainingチャネルの複数のエポックを読み取ることができ、準備ができたらvalidationチャネルの読み取りを開始するだけです。または、アルゴリズムで必要な場合はそれらを同時に読み取ることができます。独自のコンテナを持ち込む際にパイプモードを使用する方法を示す Jupyter Notebook の例については、「Bring your own pipe-mode algorithm to Amazon SageMaker AI
」を参照してください。 -
SageMaker AI モデルトレーニングは、ファイルモード、高速ファイルモード、パイプモードのデータ入力場所として、高性能の S3 Express One Zone ディレクトリバケットをサポートしています。S3 Express One Zone を使用するには、Amazon S3 汎用バケットの代わりに、S3 Express One Zone ディレクトリバケットの場所を入力します。IAM ロールの ARN に、必要なアクセスコントロールとアクセス許可ポリシーを指定します。詳細については、「AmazonSageMakerFullAccesspolicy」を参照してください。SageMaker AI 出力データは、Amazon S3 マネージドキー (SSE-S3) を使用するサーバー側の暗号化でのみディレクトリバケットで暗号化できます。 AWS KMS キーによるサーバー側の暗号化 (SSE-KMS) は現在、SageMaker AI 出力データをディレクトリバケットに保存するためにサポートされていません。詳細については、「S3 Express One Zone」を参照してください。
分散型トレーニング設定
複数コンテナで分散型トレーニングを実行する場合、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" }