Debugger Hook API を使用してテンソルデータを保存する - Amazon SageMaker

Debugger Hook API を使用してテンソルデータを保存する

テンソルは、ライフサイクルの特定の時点でのトレーニングジョブの状態を定義します。テンソルを管理するには、Amazon SageMaker Debugger DebuggerHookConfig クラスを使用してテンソルをコレクションにグループ化します。

以下のトピックでは、TensorFlow フレームワークの AWS Deep Learning Containers でトレーニングスクリプトを実行するために、フック設定の hook_config オブジェクトを設定して推定器オブジェクトに含める方法の例を示します。sagemaker_extimator の引数の entry_point には、トレーニングスクリプトのディレクトリを指定します。'directory/to/your_training_script.py' を使用するトレーニングスクリプトに置き換えるだけで、その他に変更する必要はありません (スクリプトの変更なし)。

Debugger の組み込みコレクションを使用したテンソルの保存

Amazon SageMaker Debugger を使用してテンソルのコレクションを定義できます。次の例は、TensorFlow フレームワークの Deep Learning Containers の推定器に対して、Debugger のデフォルトのフック設定を使用する方法を示しています。

import sagemaker from sagemaker.debugger import DebuggerHookConfig, CollectionConfig sagemaker_session = sagemaker.Session() BUCKET_NAME = sagemaker_session.default_bucket() LOCATION_IN_BUCKET = 'smdebug-built-in-collections-hook' hook_config = DebuggerHookConfig( s3_output_path='s3://{BUCKET_NAME}/{LOCATION_IN_BUCKET}'. format(BUCKET_NAME=BUCKET_NAME, LOCATION_IN_BUCKET=LOCATION_IN_BUCKET), hook_parameters={ "save_interval": "100" }, collection_configs=[ CollectionConfig("weights"), CollectionConfig("gradients"), CollectionConfig("losses"), CollectionConfig( name="biases", parameters={ "save_interval": "10", "end_step": "500" } ), ] ) from sagemaker.tensorflow import TensorFlow sagemaker_estimator = sm.tensorflow.TensorFlow( entry_point='directory/to/your_training_script.py', role=sm.get_execution_role(), base_job_name='smdebug-demo-job', train_instance_count=1, train_instance_type="ml.m4.xlarge", framework_version="2.0", py_version="py3", # smdebug-specific arguments below debugger_hook_config=hook_config ) sagemaker_estimator.fit()

Debugger の組み込みコレクションのリストを確認するには、Debugger のフック API のコレクションを参照してください。

Debugger のカスタムコレクションを使用したテンソルの保存数の削減

Amazon S3 バケットに保存するデータ量を削減したい場合などは、すべてのテンソルを保存するのではなく、テンソルの保存数を減らすこともできます。

次の例は、Debugger のフック設定を変更して、保存する対象のテンソルを指定する方法を示しています。

注記

削減を保存すると、その削減のみを解析に使用できます。生のテンソルも保存する場合は、save_raw_tensor フラグを渡します。

import sagemaker from sagemaker.debugger import DebuggerHookConfig, CollectionConfig sagemaker_session = sagemaker.Session() BUCKET_NAME = sagemaker_session.default_bucket() LOCATION_IN_BUCKET = 'smdebug-reduced-hook' hook_config = DebuggerHookConfig( s3_output_path='s3://{BUCKET_NAME}/{LOCATION_IN_BUCKET}'. format(BUCKET_NAME=BUCKET_NAME, LOCATION_IN_BUCKET=LOCATION_IN_BUCKET), collection_configs=[ CollectionConfig( name="activations", parameters={ "include_regex": "relu|tanh", "reductions": "mean,variance,max,abs_mean,abs_variance,abs_max" }) ] ) from sagemaker.tensorflow import TensorFlow sagemaker_estimator = TensorFlow( entry_point='directory/to/your_training_script.py', role=sm.get_execution_role(), base_job_name='smdebug-demo-job', train_instance_count=1, train_instance_type="ml.m4.xlarge", framework_version="2.0", py_version="py3", # smdebug-specific arguments below debugger_hook_config=hook_config ) sagemaker_estimator.fit()

Amazon SageMaker Debugger TensorBoard 概要、分布、ヒストグラムを使用してテンソルを可視化する

Amazon SageMaker Debugger では、保存されたテンソルの TensorBoard スカラー概要、分布、ヒストグラムを自動的に生成できます。これを有効にするには、次の例に示すように、estimator を作成するときに TensorBoardOutputConfig オブジェクトを渡します。また、個々のコレクションのヒストグラムを有効または無効にすることもできます。デフォルトでは、コレクションの save_histogram フラグは True に設定されています。Debugger では、hook.save_scalar によって保存されたすべての ScalarCollections とスカラーについて、TensorBoard にスカラー概要が追加されます。スカラーコレクションと save_scalar メソッドの詳細については、「Common API」を参照してください。

次の例では、重みとグラデーションを完全テンソルとして保存し、グラデーションを TensorBoard での視覚化が可能なヒストグラムと分布として保存します。Amazon SageMaker Debugger では、TensorBoardOutputConfig オブジェクトで渡された Amazon S3 の場所にこれらが保存されます。

import sagemaker from sagemaker.debugger import DebuggerHookConfig, CollectionConfig, TensorBoardOutputConfig sagemaker_session = sagemaker.Session() BUCKET_NAME = sagemaker_session.default_bucket() LOCATION_IN_BUCKET = 'smdebug-hook-tensorboard' hook_config = DebuggerHookConfig( s3_output_path='s3://{BUCKET_NAME}/{LOCATION_IN_BUCKET}'. format(BUCKET_NAME=BUCKET_NAME, LOCATION_IN_BUCKET=LOCATION_IN_BUCKET), collection_configs=[ CollectionConfig( name="weights", parameters={"save_histogram": "False"}), CollectionConfig(name="gradients"), ] ) tb_config = TensorBoardOutputConfig('s3://{BUCKET_NAME}/{LOCATION_IN_BUCKET}'. format(BUCKET_NAME=BUCKET_NAME, LOCATION_IN_BUCKET=LOCATION_IN_BUCKET)) from sagemaker.tensorflow import TensorFlow sagemaker_estimator = TensorFlow( entry_point='directory/to/your_training_script.py', role=sm.get_execution_role(), base_job_name='smdebug-demo-job', train_instance_count=1, train_instance_type="ml.m4.xlarge", framework_version="2.0", py_version="py3", # smdebug-specific arguments below debugger_hook_config=hook_config, tensorboard_output_config=tb_config ) sagemaker_estimator.fit(wait=True)

テンソル可視化の例のノートブック

次の 2 つのノートブックの例では、テンソルを視覚化するための Amazon SageMaker Debugger の高度な使用方法を示します。Debugger は、ニューラルネットワークモデルのトレーニングに完全な可視性を提供します。

MXNet を使用した SageMaker Studio ノートブックでのインタラクティブなテンソル分析

このノートブックの例では、Amazon SageMaker Debugger を使用して保存されたテンソルを視覚化する方法を示します。テンソルを可視化することで、深層学習アルゴリズムをトレーニングしながら、テンソル値がどのように変化するかを簡単に確認できます。このノートブックには設定が不十分なニューラルネットワークのトレーニングジョブが含まれており、Amazon SageMaker Debugger を使用してテンソル (勾配、活性化関数の出力、重みを含む) を集計および分析します。たとえば、次の図は、勾配消失の問題が発生している畳み込みレイヤーの勾配の分布を示しています。


                    勾配消失問題が発生している畳み込み層の勾配の分布をプロットした図

また、このノートブックは、ハイパーパラメータを最初から適切に設定することにより、同じテンソルの分布図を作成してトレーニングプロセスが改善されることを示しています。

MXNet モデルトレーニングからのテンソルの可視化とデバッグ

このノートブックの例では、Amazon SageMaker Debugger を使用して MXNet Gluon モデルのトレーニングジョブからテンソルを保存して視覚化する方法を示します。Debugger はすべてのテンソルを Amazon S3 バケットに保存するように設定されており、視覚化のために ReLu 活性化関数の出力を取得します。次の図は、ReLu 活性化関数の出力の 3 次元視覚化を示しています。カラースキームは、0 に近い値を示す青色と 1 に近い値を示す黄色に設定されています。


                    ReLU 活性化関数の出力の視覚化

このノートブックでは、tensor_plot.py からインポートされた TensorPlot クラスは、2 次元画像を入力とする畳み込みニューラルネットワークをプロットするように設計されています。このノートブックの tensor_plot.py スクリプトは、Debugger を使用してテンソルを取得して、畳み込みニューラルネットワークを視覚化します。このノートブックを Amazon SageMaker Studio で実行して、テンソルの視覚化を再現し、独自の畳み込みニューラルネットワークモデルを実装することができます。