翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
カスタムトレーニングで Debugger を使用する
Amazon SageMaker Debugger は、Amazon SageMaker AI に導入するすべての深層学習モデルで使用できます。 AWS CLI、SageMaker AI Estimator
API、デバッガー APIs を使用すると、任意の Docker ベースイメージを使用してコンテナを構築およびカスタマイズしてモデルをトレーニングできます。カスタマイズされたコンテナと共にデバッガーを使うには、トレーニングスクリプトに最小限の変更を加えてデバッガーフックコールバックを実装し、トレーニングジョブからテンソルを取得する必要があります。以下のセクションでは、カスタムのトレーニングコンテナでデバッガーを使用する方法を説明します。
デバッガーと一体のカスタマイズされたコンテナを構築するには、次のリソースが必要です。
任意の Docker ベースイメージ
デバッガーフックが登録されたトレーニングスクリプト - デバッガーフックをトレーニングスクリプトに登録する方法の詳細については、「デバッガーフックをトレーニングスクリプトに登録する」を参照してください。
カスタムトレーニングコンテナと共にデバッガーを使用するエンドツーエンドの例については、次のサンプルノートブックを参照してください。
ヒント
このカスタムコンテナとデバッガーのガイドは、カスタムトレーニングコンテナを構築し、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 コールバックとしてデバッガーフックを渡す方法を示しています。完全なトレーニングスクリプトについては、「SageMaker デバッガーフックを使用した TensorFlow トレーニングスクリプト
# 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 フレームワークを使用したスクリプトモードのデバッガー
Deep Learning Containers での Debugger の使用とスクリプトモードでの Debugger の使用の違いを確認するには、このノートブックを開き、Deep Learning Containers TensorFlow v2.1 での前の Debugger のノートブック例
を並べて配置してください。 スクリプトモードでは、フック設定部分は、推定器を設定するスクリプトから削除されます。代わりに、 デバッガーフック機能は、トレーニングスクリプトであるスクリプトモードの TensorFlow Keras ResNet トレーニングスクリプト
にマージされます。トレーニングスクリプトにより、TensorFlow ResNet50 アルゴリズムと通信するために必要な TensorFlow Keras 環境に smdebug
ライブラリがインポートされます。また、train
関数内にcallbacks=[hook]
引数を追加し (49 行目)、SageMaker Python SDK で提供されている手動フック設定 (89 行目) を追加することで、smdebug
フック機能も手動で実装します。このスクリプトモードの例では、TF 2.1 の例のスクリプト変更なしと直接比較するために TF 2.1 フレームワークでトレーニングジョブを実行します。スクリプトモードでデバッガーを設定する利点は、 AWS Deep Learning Containers でカバーされていないフレームワークバージョンを柔軟に選択できることです。
PyTorch コンテナでスクリプトモードの Amazon SageMaker デバッガーを使用する
このノートブックは、PyTorch v1.3.1 フレームワークでスクリプトモードのデバッガーを有効にします。PyTorch v1.3.1 は SageMaker AI コンテナでサポートされており、この例はトレーニングスクリプトを変更する方法の詳細を示しています。
SageMaker AI PyTorch 推定器はすでにデフォルトでスクリプトモードになっています。ノートブックでは、
script_mode
をアクティブ化する行が推定器の設定に含まれていません。このノートブックでは、元の PyTorch トレーニングスクリプト
をデバッガーを有効にした修正バージョンに変更する詳細なステップを示しています。さらに、この例では、デバッガーの組み込みルールを使って、勾配消失などのトレーニングの問題を検出する方法と、保存されたテンソルの呼び出しと分析を行うデバッガーのトライアル機能を示しています。
Dockerfile を作成して設定する
SageMaker AI 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 AI 推定器を設定します。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()