Amazon SageMaker AI がトレーニング情報を提供する方法 - Amazon SageMaker AI

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

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 コンテナで利用できるようにします。

以下は、XGBoostCreateTrainingJob 操作で num_roundeta ハイパーパラメータを指定するための 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 つのデータチャネル (trainevaluationvalidation) をリクエストで指定するとします。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 を入力データソースとして指定した場合、S3DistributionTypeFullyReplicated に設定されます。

トレーニングデータ

CreateTrainingJob リクエストの AlgorithmSpecification にある TrainingInputMode パラメータでトレーニングのデータセットを使用可能にする方法を指定します。次の入力モードを使用できます。

  • File モード

    TrainingInputMode 値として File mode を使用する場合、SageMaker AI はコンテナに以下のパラメータを設定します。

    • TrainingInputMode パラメータは inputdataconfig.json に「File」として書き込まれます。

    • /opt/ml/input/data/channel_name にデータチャネルディレクトリが書き込まれます。

    File mode を使用する場合、SageMaker AI はチャネルごとにディレクトリを作成します。例えば、trainingvalidationtesting という名前の 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

    チャネルごとに別のパイプから読む必要があります。例えば、trainingvalidationtesting という名前の 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) まで読み取ります。または最初のエポックで終了した場合は、パイプファイルを早期に閉じます。

    2. 最初のパイプファイルを閉じた後に、/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" }