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

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

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

Amazon SageMaker Debugger は、Amazon に持ち込むすべての深層学習モデルで使用できます SageMaker。 AWS CLI、 SageMaker EstimatorAPI、デバッガー APIs を使用すると、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 SDK から提供される手動smdebugフック設定 (89 行目) を追加することで、フック機能を手動で実装します。

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

  • スクリプトモードで PyTorch コンテナに Amazon SageMaker Debugger を使用する

    このノートブックでは、 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 Containers イメージを使用する場合は、「使用可能な AWS Deep Learning Containers イメージ」を参照してください。

カスタムトレーニングコンテナを構築して 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()