翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
カスタムトレーニングコンテナと共にデバッガーを使用する
Amazon SageMaker デバッガーは、Amazon に持ち込むすべての深層学習モデルで使用できます SageMaker。 AWS CLI、 SageMaker Estimator
API、デバッガー APIs を使用すると、任意の Docker ベースイメージを使用してコンテナを構築およびカスタマイズしてモデルをトレーニングできます。カスタマイズされたコンテナと共にデバッガーを使うには、トレーニングスクリプトに最小限の変更を加えてデバッガーフックコールバックを実装し、トレーニングジョブからテンソルを取得する必要があります。
デバッガーと一体のカスタマイズされたコンテナを構築するには、次のリソースが必要です。
任意の Docker ベースイメージ
デバッガーフックが登録されたトレーニングスクリプト - デバッガーフックをトレーニングスクリプトに登録する方法の詳細については、「デバッガーフックをトレーニングスクリプトに登録する」を参照してください。
カスタムトレーニングコンテナでデバッガーを使用する end-to-end 例については、次のサンプルノートブックを参照してください。
ヒント
このカスタムコンテナとデバッガーのガイドは、カスタムトレーニングコンテナを構築し、Amazon ECR にプッシュする方法を具体的に説明する「独自のトレーニングコンテナの適応」ガイドの拡張版です。
カスタムトレーニングコンテナ構築の準備をする
Docker コンテナを構築するには、ファイルの基本構造は次のようになります。
├── debugger_custom_container_test_notebook.ipynb # a notebook to run python snippet codes └── debugger_custom_container_test_folder # this is a docker folder ├── your-training-script.py # your training script with Debugger hook └── Dockerfile # a Dockerfile to build your own container
デバッガーフックをトレーニングスクリプトに登録する
モデルトレーニングをデバッグするには、トレーニングスクリプトにデバッガーフックを追加する必要があります。
注記
このステップは、モデルトレーニングをデバッグするためのモデルパラメータ (出力テンソル) を収集するために必要です。モニタリングとプロファイリングのみを行う場合は、このフック登録ステップを省略でき、推定器を構築するときに debugger_hook_config
パラメータを除外できます。
次のコード例は、Keras ResNet50 モデルを使用したトレーニングスクリプトの構造と、デバッグ用の Keras コールバックとしてデバッガーフックを渡す方法を示しています。完全なトレーニングスクリプトを見つけるには、TensorFlow SageMaker 「デバッガーフック を使用したトレーニングスクリプト
# An example of training script (your-training-script.py) import tensorflow.compat.v2 as tf from tensorflow.keras.applications.resnet50 import ResNet50 import smdebug.tensorflow as smd def train(batch_size, epoch, model, hook): ... model.fit(X_train, Y_train, batch_size=batch_size, epochs=epoch, validation_data=(X_valid, Y_valid), shuffle=True, # smdebug modification: Pass the Debugger hook in the main() as a Keras callback callbacks=[
hook
]) def main(): parser=argparse.ArgumentParser(description="Train resnet50 cifar10") # hyperparameter settings parser.add_argument(...) args = parser.parse_args() model=ResNet50(weights=None, input_shape=(32,32,3), classes=10) # Add the following line to register the Debugger hook for Keras. hook=smd.KerasHook.create_from_json_file()
# Start the training. train(args.batch_size, args.epoch, model, hook) if __name__ == "__main__": main()
サポートされているフレームワークおよびアルゴリズムのデバッガーフック登録の詳細については、SMDebug クライアントライブラリの次のリンクを参照してください。
次のサンプルノートブックのトレーニングスクリプトには、デバッガーフックをトレーニングスクリプトに追加し、詳細な出力テンソルを収集する方法についてのより多くの例が含まれています。
TensorFlow 2.1 フレームワークを使用したスクリプトモードのデバッガー
深層学習コンテナとスクリプトモードでデバッガーを使用する方法の違いを確認するには、このノートブックを開き、深層学習コンテナ TensorFlow v2.1 ノートブックの例にそのノートブックと以前のデバッガーを
並べて配置します。 スクリプトモードでは、フック設定部分は、推定器を設定するスクリプトから削除されます。代わりに、デバッガーフック機能は、トレーニングスクリプト 、スクリプト TensorFlow モード の Keras ResNet トレーニングスクリプト
にマージされます。トレーニングスクリプトは、 TensorFlow ResNet50 アルゴリズムと通信するために必要な TensorFlow Keras 環境に smdebug
ライブラリをインポートします。また、関数内に引callbacks=[hook]
数を追加しtrain
(49 行目)、 SageMaker Python SDK から提供される手動smdebug
フック設定 (89 行目) を追加することで、フック機能を手動で実装します。このスクリプトモードの例では、TF 2.1 の例のスクリプト変更なしと直接比較するために TF 2.1 フレームワークでトレーニングジョブを実行します。スクリプトモードでデバッガーを設定する利点は、 AWS Deep Learning Containers でカバーされていないフレームワークバージョンを柔軟に選択できることです。
スクリプトモードで PyTorch コンテナで Amazon SageMaker デバッガーを使用する
このノートブックでは、 PyTorch v1.3.1 フレームワークのスクリプトモードでデバッガーを有効にします。 PyTorch v1.3.1 は SageMaker コンテナでサポートされており、この例はトレーニングスクリプトを変更する方法の詳細を示しています。
SageMaker PyTorch 推定器はデフォルトで既にスクリプトモードになっています。ノートブックでは、
script_mode
をアクティブ化する行が推定器の設定に含まれていません。このノートブックでは、元の PyTorch トレーニングスクリプトを変更
したバージョンに変更してデバッガーを有効にする詳細な手順を示します。さらに、この例では、デバッガーの組み込みルールを使って、勾配消失などのトレーニングの問題を検出する方法と、保存されたテンソルの呼び出しと分析を行うデバッガーのトライアル機能を示しています。
Dockerfile を作成して設定する
この例では、 SageMaker JupyterLab を開き、新しいフォルダを作成して、トレーニングスクリプト と debugger_custom_container_test_folder
を保存しますDockerfile
。次のコード例は、必須の Docker ビルドコマンドを含む Dockerfile
です。次のコードを Dockerfile
テキストファイルに貼り付け、保存します。トレーニングスクリプトを同じフォルダにアップロードします。
# Specify a docker base image FROM tensorflow/tensorflow:2.2.0rc2-gpu-py3 RUN /usr/bin/python3 -m pip install --upgrade pip RUN pip install --upgrade protobuf # Install required packages to enable the SageMaker Python SDK and the smdebug library RUN pip install sagemaker-training RUN pip install smdebug CMD ["bin/bash"]
構築済みの AWS 深層学習コンテナイメージを使用する場合は、「利用可能な AWS 深層学習コンテナイメージ
カスタムトレーニングコンテナを構築して Amazon ECR にプッシュする
テストノートブック debugger_custom_container_test_notebook.ipynb
を作成し、ノートブックセルで次のコードを実行します。これは、debugger_byoc_test_docker
ディレクトリにアクセスし、指定された algorithm_name
を使って Docker をビルドし、Docker コンテナを Amazon ECR にプッシュします。
import boto3 account_id = boto3.client('sts').get_caller_identity().get('Account') ecr_repository = 'sagemaker-debugger-mnist-byoc-tf2' tag = ':latest' region = boto3.session.Session().region_name uri_suffix = 'amazonaws.com' if region in ['cn-north-1', 'cn-northwest-1']: uri_suffix = 'amazonaws.com.cn' byoc_image_uri = '{}.dkr.ecr.{}.{}/{}'.format(account_id, region, uri_suffix, ecr_repository + tag) !docker build -t $ecr_repository docker !$(aws ecr get-login --region $region --registry-ids $account_id --no-include-email) !aws ecr create-repository --repository-name $ecr_repository !docker tag {ecr_repository + tag} $byoc_image_uri !docker push $byoc_image_uri
ヒント
AWS Deep Learning Container ベースイメージのいずれかを使用する場合は、次のコードを実行して Amazon ECR にログインし、 Deep Learning Container イメージリポジトリにアクセスします。
! aws ecr get-login-password --region {region} | docker login --username AWS --password-stdin 763104351884.dkr.ecr.us-east-1.amazonaws.com
カスタムトレーニングコンテナを使ってトレーニングジョブを実行してデバッグする
Docker コンテナを構築して Amazon ECR にプッシュしたら、トレーニングスクリプトとデバッガー固有のパラメータを使用して SageMaker 推定器を設定します。estimator.fit()
を実行すると、デバッガーは出力テンソルを収集してモニタリングし、トレーニングの問題を検出します。保存したテンソルを使用すると、smdebug
の主要機能とツールを使ってトレーニングジョブをさらに分析できます。Amazon CloudWatch Events と を使用してデバッガールールのモニタリングプロセスのワークフローを設定すると AWS Lambda、デバッガールールがトレーニングの問題を検出するたびに、トレーニングジョブの停止プロセスを自動化できます。
import sagemaker from sagemaker.estimator import Estimator from sagemaker.debugger import Rule, DebuggerHookConfig, CollectionConfig, rule_configs
profiler_config
=ProfilerConfig(...)
debugger_hook_config
=DebuggerHookConfig(...)
rules
=[Rule.sagemaker(rule_configs.built_in_rule())
,ProfilerRule.sagemaker(rule_configs.BuiltInRule())
] estimator=Estimator( image_uri=byoc_image_uri, entry_point="./debugger_custom_container_test_folder/your-training-script.py" role=sagemaker.get_execution_role(), base_job_name='debugger-custom-container-test', instance_count=1, instance_type='ml.p3.2xlarge', # Debugger-specific parameters profiler_config=profiler_config
, debugger_hook_config=debugger_hook_config
, rules=rules
) # start training estimator.fit()