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

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

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

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

    チャネルごとに別のパイプから読む必要があります。例えば、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 の例については、「独自のパイプモードアルゴリズムを 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" }