Debugger でサポートされているフレームワークでコンテナを使用する - Amazon SageMaker

Debugger でサポートされているフレームワークでコンテナを使用する

Amazon SageMaker Debugger を有効にするには、Amazon SageMaker Deep Learning Containers でサポートされている構築済みのコンテナを使用します。Debugger の組み込み機能は、Deep Learning Containers に実装されており、変更を加えずにトレーニングスクリプトを簡単に使用できます。

Deep Learning Containers でカバーされているフレームワーク以外のフレームワークで Debugger を使用する場合は、Amazon SageMaker コンテナにスクリプトモードという別のオプションがあります。トレーニングスクリプトに数行のコードを追加することで、Debugger を有効にします。

TensorFlow、Apache MXNet、PyTorch、XgBoost など、機械学習フレームワークおよびアルゴリズムで Amazon SageMaker Debugger を使用できます。

AWS Deep Learning Containers で Debugger を使用する

トレーニングスクリプトを変更せずに Amazon SageMaker Debugger を有効にするには、次の表に示すフレームワークでいずれかの AWS Deep Learning Containers を使用します。

これらの各コンテナでは、Debugger フックが自動的に追加されます。フックとは、トレーニングプロセス全体を通じてリクエストされたテンソルの値を保存するために Debugger で使用されるコールバックです。

スクリプトの変更は不要の Debugger によりサポートされているフレームワーク

Framework バージョン

TensorFlow

1.15、2.1

MXNet

1.6

PyTorch

1.4、1.5

XGBoost

0.90-2、1.0-1

Deep Learning Containers の利用可能なリージョンとイメージ URL の完全なリストについては、「Deep Learning Containers Images」を参照してください。

Debugger でサポートされているフレームワークとバージョンの詳細については、「Frameworks supported by Debugger with zero script changes」を参照してください。

表に記載されていないバージョンのフレームワークで Debugger を使用する場合は、AWS マネージドコンテナを使用してスクリプトモードでトレーニングジョブを実行するか、独自のコンテナを構築する必要があります。

スクリプトモードでの Debugger の使用の詳細については、「Amazon SageMaker コンテナでスクリプトモードの Debugger を使用する」を参照してください。

TensorFlow の Debugger

たとえば、次のコード例では、TensorFlow 2.1.0 の深層学習コンテナを呼び出します。

import sagemaker from sagemaker.tensorflow import TensorFlow from sagemaker.debugger import Rule, DebuggerHookConfig, TensorBoardOutputConfig, CollectionConfig, rule_configs # set path to your Amazon s3 bucket BUCKET_NAME = sagemaker_session.default_bucket() LOCATION_IN_BUCKET = 'smdebug-demo-tf2-keras-tensors' s3_bucket_for_tensors = 's3://{BUCKET_NAME}/{LOCATION_IN_BUCKET}' .format(BUCKET_NAME=BUCKET_NAME, LOCATION_IN_BUCKET=LOCATION_IN_BUCKET) # configure an estimator in an Amazon SageMaker pre-built container in TF 2.1.0 estimator = TensorFlow( role=sagemaker.get_execution_role(), base_job_name='smdebug-demo-tf2-keras', train_instance_count=1, train_instance_type='ml.p2.xlarge', entry_point='smdebug-demo-tf2-keras-train.py', framework_version='2.1.0', py_version='py3', train_max_run=3600, ## Debugger parameters rules=[ Rule.sagemaker( ... ) ], debugger_hook_config=DebuggerHookConfig( s3_output_path=s3_bucket_for_tensors, # Required collection_configs=[ ... ] )) # After calling fit, SageMaker starts # the training job in the TF 2.1.0 framework. estimator.fit(wait=True)

サンプルコードでは、太字のテキスト行は、元のトレーニングスクリプトを使用して TF 2.1.0 フレームワークの構築済みのコンテナをアクティブ化します。この例では、トレーニングスクリプトが 'smdebug-demo-tf2-keras-train.py' にあることを前提としています。

TensorFlow コンテナでの Debugger の使用の他の例については、次のノートブックのサンプルを参照してください。

MXnet の Debugger

import sagemaker from sagemaker.debugger import DebuggerHookConfig, CollectionConfig from sagemaker.mxnet import MXNet # set path to your Amazon s3 bucket BUCKET_NAME = sagemaker_session.default_bucket() LOCATION_IN_BUCKET = 'smdebug-demo-mxnet-tensors' s3_bucket_for_tensors = 's3://{BUCKET_NAME}/{LOCATION_IN_BUCKET}' .format(BUCKET_NAME=BUCKET_NAME, LOCATION_IN_BUCKET=LOCATION_IN_BUCKET) # configure an estimator in an Amazon SageMaker pre-built container in MXNet 1.6.0 estimator = MXNet( role=sagemaker.get_execution_role(), base_job_name='smdebug-demo-mxnet', train_instance_count=1, train_instance_type='ml.m4.xlarge', entry_point='smdebug-demo-mxnet_train.py', framework_version='1.6.0', train_max_run=3600, sagemaker_session=sagemaker.Session(), py_version='py3', ## Debugger parameters rules=[ Rule.sagemaker( ... ) ], debugger_hook_config=DebuggerHookConfig( s3_output_path=s3_bucket_for_tensors, # Required collection_configs=[ ... ] )) # After calling fit, SageMaker starts # the training job in the MXNet 1.6.0 framework. estimator.fit(wait=True)

MXNet コンテナでの Debugger の使用の他の例については、次のノートブックのサンプルを参照してください。

PyTorch の Debugger

import sagemaker from sagemaker.pytorch import PyTorch from sagemaker.debugger import Rule, DebuggerHookConfig, TensorBoardOutputConfig, CollectionConfig, rule_configs # set path to your Amazon s3 bucket BUCKET_NAME = sagemaker_session.default_bucket() LOCATION_IN_BUCKET = 'smdebug-demo-pytorch-tensors' s3_bucket_for_tensors = 's3://{BUCKET_NAME}/{LOCATION_IN_BUCKET}' .format(BUCKET_NAME=BUCKET_NAME, LOCATION_IN_BUCKET=LOCATION_IN_BUCKET) # configure an estimator in an Amazon SageMaker pre-built container in PT 1.5 estimator = PyTorch( role=sagemaker.get_execution_role(), base_job_name='smdebug-demo-pytorch', train_instance_count=1, train_instance_type='ml.p2.xlarge', entry_point='smdebug-demo-pytorch-train.py', framework_version='1.5', py_version='py3', train_max_run=3600, ## Debugger parameters rules=[ Rule.sagemaker( ... ) ], debugger_hook_config=DebuggerHookConfig( s3_output_path=s3_bucket_for_tensors, # Required collection_configs=[ ... ] )) # After calling fit, SageMaker starts # the training job in the PT 1.5 framework. estimator.fit(wait=True)

MXNet コンテナでの Debugger の使用の他の例については、次のノートブックのサンプルを参照してください。

XGBoost の Debugger

XGBoost アルゴリズムは、組み込みアルゴリズムとして、または MXNet、PyTorch、TensorFlow などのフレームワークとして使用できます。Amazon SageMaker XGBoost がコンテナバージョン 0.90-2 以降で組み込みアルゴリズムとして使用されている場合、Debugger はデフォルトで利用できます (コード変更なし)。

import boto3 import sagemaker from sagemaker.amazon.amazon_estimator import get_image_uri from sagemaker.debugger import rule_configs, Rule, DebuggerHookConfig, CollectionConfig from sagemaker.estimator import Estimator # set path to your Amazon s3 bucket BUCKET_NAME = sagemaker_session.default_bucket() LOCATION_IN_BUCKET = 'smdebug-demo-xgboost-tensors' s3_bucket_for_tensors = 's3://{BUCKET_NAME}/{LOCATION_IN_BUCKET}' .format(BUCKET_NAME=BUCKET_NAME, LOCATION_IN_BUCKET=LOCATION_IN_BUCKET) # change the region to be one where your notebook instance is running region = boto3.Session().region_name # get the image URI for a XGBoost container container = get_image_uri(boto3.Session().region_name, 'xgboost', repo_version='0.90-2') # configure an estimator in an Amazon SageMaker pre-built container in XGBoost 0.90-2 estimator = sagemaker.estimator.Estimator( role=sagemaker.get_execution_role(), base_job_name="demo-smdebug-xgboost", train_instance_count=1, train_instance_type='ml.m5.xlarge', image_name=container, train_max_run=1800, ## Debugger parameters rules=[ Rule.sagemaker( ... ) ], debugger_hook_config=DebuggerHookConfig( s3_output_path=s3_bucket_for_tensors, # Required collection_configs=[ ... ] )) # After calling fit, SageMaker starts # the training job in the XGBoost 0.90-2 framework. estimator.fit({'train':'s3://my-bucket/training', 'validation':'s3://my-bucket/validation}))

XGBoost コンテナでの Debugger の使用の他の例については、次のノートブックのサンプルを参照してください。

Debugger 設定のバリエーションの詳細については、Debugger 設定ガイドを参照してください。

Debugger のフックとルール機能の詳細については、「 Debugger Hook API を使用してテンソルデータを保存する」と「モデル解析にビルトインルールを使用する方法」を参照してください。

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

スクリプトモードを使用し、、Debugger が構築済みの AWS Deep Learning Containers でサポートされているフレームワークからトレーニングスクリプトを実行できるようにするには、トレーニングスクリプトを変更する必要があります。

スクリプトモードでは、Amazon SageMaker コンテナ内でトレーニングスクリプトを実行できます。

Debugger と smdebug は、さらに広範なフレームワークをサポートしています。スクリプトモードを有効にするには推定器に 1 行を追加し、Debugger を有効にするにはトレーニング Python スクリプトに数行を追加します。

スクリプトモードの Debugger によりサポートされているフレームワーク

Framework バージョン

TensorFlow

1.13、1.14、1.15、2.1、2.2

Keras (TensorFlow バックエンドで使用)

2.3

MXNet

1.4、1.5、1.6

PyTorch

1.2、1.3、1.4、1.5

XGBoost

0.90-2、1.0-1

フレームワークの詳細については、「Supported frameworks by Debugger in script mode」を参照してください。

次のコード例は、Debugger でスクリプトモードを有効にする方法を示しています。

estimator = TensorFlow( ... framework_version='1.13', script_mode=True, ## Debugger rule and hook parameters rules = rules, debugger_hook_config=hook_config ... )

スクリプトモードを有効にしたら、トレーニングスクリプト内で最小限の変更を行う必要があります。

# Inside your train.py script: 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 hook as a Keras callback callbacks=[hook]) def main(): parser = argparse.ArgumentParser(description="Train resnet50 cifar10") # hyperparameter settings parser.add_argument( ... ) model = ResNet50(weights=None, input_shape=(32,32,3), classes=10) # Add smdebug modification to activate Debugger hook. # Create hook from the configuration provided through sagemaker python sdk. # This configuration is provided in the form of a JSON file. hook = smd.KerasHook.create_from_json_file() # Start the training. train(args.batch_size, args.epoch, model, hook) if __name__ == "__main__": main()

次のノートブックの例は、トレーニングスクリプトに変更を適用する方法を示しています。

TensorFlow 2.1 フレームワークを使用したスクリプトモードの Debugger

Debugger を Deep Learning Containers で使用した場合とスクリプトモードで使用した場合の違いを確認するには、このノートブックを開き、Deep Learning Containers TensorFlow v2.1 での前の Debugger のノートブック例と並べて配置してください。

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

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

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

このノートブックは、PyTorch v1.3.1 フレームワークでスクリプトモードの Debugger を有効にします。PyTorch v1.3.1 は Amazon SageMaker コンテナによりサポートされており、この例では、トレーニングスクリプトを変更する方法の詳細を示しています。

Amazon SageMaker PyTorch 推定器は、デフォルトで既にスクリプトモードになっています。ノートブックでは、script_mode をアクティブ化する行が推定器の設定に含まれていません。

このノートブックでは、元の PyTorch トレーニングスクリプトDebugger を有効にした修正バージョンに変更する詳細なステップを示しています。さらに、この例では、Debugger の組み込みルールを使用して、勾配の消失などのトレーニングの問題を検出する方法と、保存されたテンソルの呼び出しと分析を行う Debugger のトライアル機能を示します。