カスタムトレーニングコンテナでデバッガーを使用する - Amazon SageMaker

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

カスタムトレーニングコンテナでデバッガーを使用する

Amazon SageMaker Debugger は、Amazon に持ち込む深層学習モデルで使用できます SageMaker。 AWS CLI、、および デバッガーAPIsを使用すると SageMaker EstimatorAPI、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 フレームワークを使用したスクリプトモードのデバッガー

    Deep Learning Container とスクリプトモードでデバッガーを使用する違いを確認するには、このノートブックを開き、Deep Learning Container TensorFlow v2.1 ノートブックの例にそれと以前のデバッガーを並べて配置します。

    スクリプトモードでは、フック設定部分は、推定器を設定するスクリプトから削除されます。代わりに、デバッガーフック機能は、スクリプト TensorFlow モード のトレーニングスクリプト Keras ResNet トレーニングスクリプト にマージされます。トレーニングスクリプトは、 TensorFlow ResNet50 アルゴリズムと通信するために必要な TensorFlow Keras 環境にsmdebugライブラリをインポートします。また、train関数内にcallbacks=[hook]引数を追加 (49 行目) し、 SageMaker Python を介して提供される手動smdebugフック設定 (89 行目) を追加することで、フック機能を手動で実装しますSDK。

    このスクリプトモードの例では、TF 2.1 の例のスクリプト変更なしと直接比較するために TF 2.1 フレームワークでトレーニングジョブを実行します。スクリプトモードでデバッガーを設定する利点は、 AWS Deep Learning Containers でカバーされていないフレームワークバージョンを柔軟に選択できることです。

  • スクリプトモードで PyTorch コンテナで Amazon SageMaker デバッガーを使用する

    このノートブックでは、 PyTorch v1.3.1 フレームワークのスクリプトモードでデバッガーを有効にします。 PyTorchv1.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 Deep Learning Container イメージを使用する場合は、「利用可能な AWS Deep Learning Containers イメージ」を参照してください。

カスタムトレーニングイメージを構築して Amazon にプッシュする ECR

テストノートブック debugger_custom_container_test_notebook.ipynb を作成し、ノートブックセルで次のコードを実行します。これにより、 debugger_byoc_test_docker ディレクトリにアクセスし、指定された を使用して Docker を構築しalgorithm_name、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()