翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
アマゾン SageMaker トレーニングイメージを実行する方法については、
カスタムエントリポイントスクリプトを使用すると、インフラストラクチャを自動化して運用環境でトレーニングできます。エントリポイントスクリプトを Docker コンテナに渡すと、イメージを再構築せずにスタンドアロンスクリプトとして実行することもできます。 SageMakerDocker コンテナエントリポイントスクリプトを使用してトレーニングイメージを処理します。
このセクションでは、トレーニングツールキットを使用しないでカスタムエントリポイントを使用する方法が格納されています。カスタムエントリポイントを使用したいが、Docker コンテナを手動で構成する方法に慣れていない場合は、を使用することをおすすめします。SageMaker トレーニングツールキットライブラリ
デフォルトでは、 SageMaker というスクリプトを探します。train
コンテナの中。また、を使用して独自のカスタムエントリポイントを手動で指定することもできます。ContainerArguments
そしてContainerEntrypoint
パラメータの使用方法の詳細については、AlgorithmSpecificationAPI。
イメージを実行するように Docker コンテナを手動で構成するには、次の 2 つのオプションがあります。
-
を使用してください。CreateTrainingJobAPI と、内部にエントリポイント命令が含まれる Docker コンテナ。
-
を使用してください。
CreateTrainingJob
API を使用し、Docker コンテナの外部からトレーニングスクリプトを渡します。
Docker コンテナの外部からトレーニングスクリプトを渡す場合は、スクリプトを更新するときに Docker コンテナを再構築する必要はありません。同じコンテナで複数の異なるスクリプトを実行することもできます。
エントリポイントスクリプトにはイメージ用のトレーニングコードが含まれている必要があります。オプションを使用する場合source_dir
内部のパラメーター推定者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。-
ザ・
CreateTrainingJob
API には次のような指示を行う停止条件があります。 SageMaker 特定の時間が経過するとモデルトレーニングを停止します。 -
「」を参照してください。
StopTrainingJob
API。この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 イメージ内にカスタムシェルスクリプトをバンドルする場合は、以下の手順に従ってください。
-
シェルスクリプトを作業ディレクトリから 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/
-
Docker Container Registry () にプッシュする (アマゾン ECR)のメクスを使用する方法については、を参照してください。Docker イメージをプッシュするでアマゾン ECR ユーザーガイド。
-
以下を実行してトレーニングジョブを起動します。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 スクリプトをバンドルするには、以下の手順に従います。
-
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/
-
以下を実行してトレーニングジョブを起動します。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
またはCMD
Darget コンテナの使用方法の詳細については、「」を参照してください。
カスタムエントリポイントスクリプトを Docker トレーニングコンテナに渡すと、入力内容によってコンテナの動作が決まります。
-
たとえば、指定するだけだとします。
ContainerEntrypoint
、を使用するリクエスト構文 CreateTrainingJob API は以下の通りです。{ "AlgorithmSpecification": { "ContainerEntrypoint": ["
string
"], ... } }次に、 SageMaker トレーニングバックエンドは、カスタムエントリポイントを次のように実行します。
docker run --entrypoint
<ContainerEntrypoint>
image注記
もし
ContainerEntrypoint
「」を参照してください。 SageMaker トレーニングバックエンドは、指定されたエントリポイントでイメージを実行し、デフォルトをオーバーライドします。ENTRYPOINT
画像の中にあります。 -
のみを指定した場合
ContainerArguments
、 SageMaker Docker コンテナにエントリポイントスクリプトが含まれていることを前提としています。を使用するリクエスト構文CreateTrainingJob
API は以下のとおりです。{ "AlgorithmSpecification": { "ContainerArguments": ["
arg1
", "arg2
"], ... } }は SageMaker トレーニングバックエンドは、カスタムエントリポイントを次のように実行します。
docker run image
<ContainerArguments>
-
両方を提供した場合
ContainerEntrypoint
そしてContainerArguments
次に、以下のリクエスト構文を使用します。CreateTrainingJob
API は以下の通りです。{ "AlgorithmSpecification": { "ContainerEntrypoint": ["
string
"], "ContainerArguments": ["arg1
", "arg2
"], ... } }は SageMaker トレーニングバックエンドは、カスタムエントリポイントを次のように実行します。
docker run --entrypoint
<ContainerEntrypoint>
image<ContainerArguments>
サポートされているものを使用する方法については、を参照してください。InputDataConfig
のソースCreateTrainingJob
トレーニングイメージを実行するためのエントリポイントスクリプトを提供する API。
のマトリクスを使用する方法については Amazon S3。
S3 バケットを使用してカスタムエントリポイントスクリプトを提供するには、S3DataSource
パラメータの使用方法の詳細については、DataSourceスクリプトのアナリティクスを使用する方法については、を参照してください。「」を参照してください。S3DataSource
パラメータには以下が必要です。
-
はInputMode次のタイプでなければなりません。
File
。 -
はS3DataDistributionType」を参照してください。
FullyReplicated
。
次の例では、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
}'