アマゾン SageMaker トレーニングイメージを実行する方法については、 - アマゾン SageMaker

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

アマゾン SageMaker トレーニングイメージを実行する方法については、

カスタムエントリポイントスクリプトを使用すると、インフラストラクチャを自動化して運用環境でトレーニングできます。エントリポイントスクリプトを Docker コンテナに渡すと、イメージを再構築せずにスタンドアロンスクリプトとして実行することもできます。 SageMakerDocker コンテナエントリポイントスクリプトを使用してトレーニングイメージを処理します。

このセクションでは、トレーニングツールキットを使用しないでカスタムエントリポイントを使用する方法が格納されています。カスタムエントリポイントを使用したいが、Docker コンテナを手動で構成する方法に慣れていない場合は、を使用することをおすすめします。SageMaker トレーニングツールキットライブラリ代わりに。トレーニングツールの使用方法の詳細については、「」を参照してください。独自のトレーニングコンテナをカスタマイズ

デフォルトでは、 SageMaker というスクリプトを探します。trainコンテナの中。また、を使用して独自のカスタムエントリポイントを手動で指定することもできます。ContainerArgumentsそしてContainerEntrypointパラメータの使用方法の詳細については、AlgorithmSpecificationAPI。

イメージを実行するように Docker コンテナを手動で構成するには、次の 2 つのオプションがあります。

  • を使用してください。CreateTrainingJobAPI と、内部にエントリポイント命令が含まれる Docker コンテナ。

  • を使用してください。CreateTrainingJobAPI を使用し、Docker コンテナの外部からトレーニングスクリプトを渡します。

Docker コンテナの外部からトレーニングスクリプトを渡す場合は、スクリプトを更新するときに Docker コンテナを再構築する必要はありません。同じコンテナで複数の異なるスクリプトを実行することもできます。

エントリポイントスクリプトにはイメージ用のトレーニングコードが含まれている必要があります。オプションを使用する場合source_dir内部のパラメーター推定者、エントリポイントスクリプトを含むフォルダへの相対Amazon S3 パスを参照する必要があります。を使用して複数のファイルを参照できます。source_dirパラメータの使用方法の詳細については、使用しない場合source_dir、「」を参照してください。entry_pointパラメータの使用方法の詳細については、Estimator を含むカスタムエントリポイントスクリプトの例については、を参照してください。自分のモデルを使用する方法については、を参照してください。 SageMaker スクリプトモード

Docker コンテナにバンドルされたエントリポイントスクリプトを使用してトレーニングジョブを実行します。

SageMaker Docker コンテナ内にバンドルされているエントリポイントスクリプトを実行できます。

  • デフォルトでは、Amazon SageMaker 以下のコンテナを実行します。

    docker run image train
  • SageMaker すべてのデフォルトをオーバーライドします。CMDコンテナ内のステートメント:trainイメージ名の後の引数。Docker コンテナでは、以下を使用してください。exec「」を参照してください。ENTRYPOINT命令。

    ENTRYPOINT ["executable", "param1", "param2", ...]

    次の例は、というPythonエントリポイント命令を指定する方法を示しています。k-means-algorithm.py

    ENTRYPOINT ["python", "k-means-algorithm.py"]

    exec 命令の ENTRYPOINT フォームは、/bin/sh の子としてではなく、直接実行ファイルを開始します。これにより、次のような信号を受信できます。SIGTERMそしてSIGKILLから SageMaker API。の使用方法の詳細については、「」を参照してください。 SageMaker API。

    • ザ・CreateTrainingJobAPI には次のような指示を行う停止条件があります。 SageMaker 特定の時間が経過するとモデルトレーニングを停止します。

    • 「」を参照してください。StopTrainingJobAPI。このAPIは、「」を参照してください。docker stop指定したContainer を正常に停止する 2 分の timeout コマンドを 2 分実行する。

      docker stop -t 120

      コマンドは、SIGTERM シグナルを送信することで実行中のコンテナの停止を試みます。2 分間のタイムアウト後、API は SIGKILL を送信しコンテナを強制的に停止します。コンテナが SIGTERM を正常に処理し、その受信時から 120 秒以内に終了する場合、SIGKILL は送信されません。

    後で中間モデルのアーティファクトにアクセスしたい場合 SageMaker トレーニングを停止する際、アーティファクトが格納されるコードが格納されているSIGTERMハンドラー。

  • モデルのトレーニングに GPU デバイスを使用する予定がある場合は、コンテナが nvidia-docker と互換であることを確認します。コンテナに含める必要があるのは CUDA ツールキットのみです。NVIDIA ドライバーをイメージにバンドルしないでください。nvidia-docker の詳細については、NVIDIA/nvidia-docker を参照してください。

  • 「」を参照してください。tiniのエントリポイントスクリプトとしてイニシャライザを使用してください。 SageMaker コンテナと混同されてしまうのでtrainそしてserve引数。

  • /opt/mlすべてのサブディレクトリはによって予約されています SageMaker トレーニング。アルゴリズムの Docker イメージを構築する際、アルゴリズムが格納する際、アルゴリズムが格納する際、アルゴリズムが格納する際、アルゴリズムが格納するディレクトリが格納されていないことを確認してください。そうすると、トレーニング中にデータが表示されなくなる可能性があるためです。

シェルまたは Python スクリプトを Docker イメージ内にバンドルしたり、Amazon S3 バケットにスクリプトを提供したりするには、AWS Command Line Interface(CLI)を参照してください。

シェルスクリプトを Docker コンテナにバンドルします。

Docker イメージ内にカスタムシェルスクリプトをバンドルする場合は、以下の手順に従ってください。

  1. シェルスクリプトを作業ディレクトリから Docker コンテナ内にコピーします。次のコードスニペットは、カスタムエントリポイントスクリプトをコピーします。custom_entrypoint.sh現在の作業ディレクトリから、にある Docker コンテナへmydir。次の例では、ベースの Docker イメージに Python がインストールされていることを前提としています。

    FROM <base-docker-image>:<tag> # Copy custom entrypoint from current dir to /mydir on container COPY ./custom_entrypoint.sh /mydir/
  2. Docker Container Registry () にプッシュする (アマゾン ECR)のメクスを使用する方法については、を参照してください。Docker イメージをプッシュするアマゾン ECR ユーザーガイド

  3. 以下を実行してトレーニングジョブを起動します。AWS CLIコマンド。

    aws --region <your-region> sagemaker create-training-job \ --training-job-name <your-training-job-name> \ --role-arn <your-execution-role-arn> \ --algorithm-specification '{ \ "TrainingInputMode": "File", \ "TrainingImage": "<your-ecr-image>", \ "ContainerEntrypoint": ["/bin/sh"], \ "ContainerArguments": ["/mydir/custom_entrypoint.sh"]}' \ --output-data-config '{"S3OutputPath": "s3://custom-entrypoint-output-bucket/"}' \ --resource-config '{"VolumeSizeInGB":10,"InstanceCount":1,"InstanceType":"ml.m5.2xlarge"}' \ --stopping-condition '{"MaxRuntimeInSeconds": 180}'

Python スクリプトを Docker コンテナにバンドルする

Docker イメージ内にカスタム Python スクリプトをバンドルするには、以下の手順に従います。

  1. Python スクリプトを作業ディレクトリから Docker コンテナ内にコピーします。次のコードスニペットは、カスタムエントリポイントスクリプトをコピーします。custom_entrypoint.py現在の作業ディレクトリから、にある Docker コンテナへmydir

    FROM <base-docker-image>:<tag> # Copy custom entrypoint from current dir to /mydir on container COPY ./custom_entrypoint.py /mydir/
  2. 以下を実行してトレーニングジョブを起動します。AWS CLIコマンド。

    --algorithm-specification '{ \ "TrainingInputMode": "File", \ "TrainingImage": "<your-ecr-image>", \ "ContainerEntrypoint": ["python"], \ "ContainerArguments": ["/mydir/custom_entrypoint.py"]}' \

Docker コンテナの外部でエントリポイントスクリプトを使用してトレーニングジョブを実行します。

独自の Docker コンテナをトレーニングに使用し、Docker コンテナの外部からエントリポイントスクリプトを渡すことができます。エントリポイントスクリプトをコンテナの外部で構築することには、いくつかの利点があります。エントリポイントスクリプトを更新する際、Docker Container を再ビルドする際、Docker Container を再ビルドする際、Docker Container を再ビルドする際、Docker 同じコンテナで複数の異なるスクリプトを実行することもできます。

「」を参照してください。ContainerEntrypointそしてContainerArgumentsパラメータの使用方法の詳細については、AlgorithmSpecificationAPI。これらのエントリポイントと引数は Docker のエントリポイントと引数と同じように動作します。これらのパラメーターの値は、対応するパラメーターよりも優先されます。ENTRYPOINTまたはCMDDarget コンテナの使用方法の詳細については、「」を参照してください。

カスタムエントリポイントスクリプトを Docker トレーニングコンテナに渡すと、入力内容によってコンテナの動作が決まります。

  • たとえば、指定するだけだとします。ContainerEntrypoint、を使用するリクエスト構文 CreateTrainingJob API は以下の通りです。

    { "AlgorithmSpecification": { "ContainerEntrypoint": ["string"], ... } }

    次に、 SageMaker トレーニングバックエンドは、カスタムエントリポイントを次のように実行します。

    docker run --entrypoint <ContainerEntrypoint> image
    注記

    もしContainerEntrypoint「」を参照してください。 SageMaker トレーニングバックエンドは、指定されたエントリポイントでイメージを実行し、デフォルトをオーバーライドします。ENTRYPOINT画像の中にあります。

  • のみを指定した場合ContainerArguments、 SageMaker Docker コンテナにエントリポイントスクリプトが含まれていることを前提としています。を使用するリクエスト構文CreateTrainingJobAPI は以下のとおりです。

    { "AlgorithmSpecification": { "ContainerArguments": ["arg1", "arg2"], ... } }

    は SageMaker トレーニングバックエンドは、カスタムエントリポイントを次のように実行します。

    docker run image <ContainerArguments>
  • 両方を提供した場合ContainerEntrypointそしてContainerArguments次に、以下のリクエスト構文を使用します。CreateTrainingJobAPI は以下の通りです。

    { "AlgorithmSpecification": { "ContainerEntrypoint": ["string"], "ContainerArguments": ["arg1", "arg2"], ... } }

    は SageMaker トレーニングバックエンドは、カスタムエントリポイントを次のように実行します。

    docker run --entrypoint <ContainerEntrypoint> image <ContainerArguments>

サポートされているものを使用する方法については、を参照してください。InputDataConfigのソースCreateTrainingJobトレーニングイメージを実行するためのエントリポイントスクリプトを提供する API。

のマトリクスを使用する方法については Amazon S3。

S3 バケットを使用してカスタムエントリポイントスクリプトを提供するには、S3DataSourceパラメータの使用方法の詳細については、DataSourceスクリプトのアナリティクスを使用する方法については、を参照してください。「」を参照してください。S3DataSourceパラメータには以下が必要です。

次の例では、custom_entrypoint.sh というスクリプトを S3 バケットへのパスに配置しています。s3://<bucket-name>/<bucket prefix>/custom_entrypoint.sh

#!/bin/bash echo "Running custom_entrypoint.sh" echo "Hello you have provided the following arguments: " "$@"

次に、トレーニングジョブを実行するための入力データチャネルの構成を設定する必要があります。そのためには、以下のいずれかの方法を使用します。AWS CLI直接またはJSONファイルを使用する方法については、を参照してください。

を使用して入力データチャネルを設定します。AWS CLIJSON ファイルを使用する方法については、

JSON ファイルを使用して入力データチャネルを設定するには、AWS CLI次のコード構造の詳細については、以下のすべてのフィールドが、で定義されているリクエスト構文を使用していることを確認してください。CreateTrainingJobAPI。

// run-my-training-job.json { "AlgorithmSpecification": { "ContainerEntrypoint": ["/bin/sh"], "ContainerArguments": ["/opt/ml/input/data/<your_channel_name>/custom_entrypoint.sh"], ... }, "InputDataConfig": [ { "ChannelName": "<your_channel_name>", "DataSource": { "S3DataSource": { "S3DataDistributionType": "FullyReplicated", "S3DataType": "S3Prefix", "S3Uri": "s3://<bucket-name>/<bucket_prefix>" } }, "InputMode": "File", }, ...] }

次に、「」を参照してください。AWS CLIJSON ファイルからトレーニングジョブを起動するコマンドは、以下のとおりです。

aws sagemaker create-training-job --cli-input-json file://run-my-training-job.json

を使用して入力データチャネルを設定します。AWS CLI直接

JSON ファイルなしで入力データチャネルを設定するには、以下を使用します。AWS CLIコード構造。

aws --region <your-region> sagemaker create-training-job \ --training-job-name <your-training-job-name> \ --role-arn <your-execution-role-arn> \ --algorithm-specification '{ \ "TrainingInputMode": "File", \ "TrainingImage": "<your-ecr-image>", \ "ContainerEntrypoint": ["/bin/sh"], \ "ContainerArguments": ["/opt/ml/input/data/<your_channel_name>/custom_entrypoint.sh"]}' \ --input-data-config '[{ \ "ChannelName":"<your_channel_name>", \ "DataSource":{ \ "S3DataSource":{ \ "S3DataType":"S3Prefix", \ "S3Uri":"s3://<bucket-name>/<bucket_prefix>", \ "S3DataDistributionType":"FullyReplicated"}}}]' \ --output-data-config '{"S3OutputPath": "s3://custom-entrypoint-output-bucket/"}' \ --resource-config '{"VolumeSizeInGB":10,"InstanceCount":1,"InstanceType":"ml.m5.2xlarge"}' \ --stopping-condition '{"MaxRuntimeInSeconds": 180}'