カスタムトレーニングで Debugger を使用する - Amazon SageMaker AI

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

カスタムトレーニングで Debugger を使用する

Amazon SageMaker Debugger は、Amazon SageMaker AI に導入するすべての深層学習モデルで使用できます。 AWS CLI、SageMaker AI Estimator API、デバッガー APIs を使用すると、任意の 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()