

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

# Debugger チュートリアル
<a name="debugger-tutorial"></a>

次のトピックでは、デバッガーを使用した SageMaker トレーニングジョブのモニタリング、プロファイリング、デバッグの基本から高度なユースケースまでのチュートリアルを提供します。デバッガーの機能を精査し、デバッガーを使うことよって機械学習モデルを効率的にデバッグおよび改善する方法を学習します。

**Topics**
+ [Debugger チュートリアルビデオ](debugger-videos.md)
+ [Debugger サンプルノートブック](debugger-notebooks.md)
+ [Debugger の高度なデモと視覚化](debugger-visualization.md)

# Debugger チュートリアルビデオ
<a name="debugger-videos"></a>

次のビデオでは、SageMaker Studio と SageMaker AI のノートブックインスタンスを使って Amazon SageMaker Debugger の機能を紹介していきます。

**Topics**
+ [Studio で Amazon SageMaker Debugger を使ってモデルをデバッグする](#debugger-video-get-started)
+ [Amazon SageMaker Debugger と SageMaker AI Model Monitor の詳細](#debugger-video-dive-deep)

## Studio で Amazon SageMaker Debugger を使ってモデルをデバッグする
<a name="debugger-video-get-started"></a>

*Julien Simon、 AWS テクニカルエバンジェリスト \$1 長さ: 14 分 17 秒*

このチュートリアルビデオでは、Amazon SageMaker デバッガーを使ってトレーニングモデルからデバッグ情報をキャプチャして検査する方法を説明します。このビデオで使用されているトレーニングモデルの例は、TensorFlow をバックエンドにした Keras ベースの単純な畳み込みニューラルネットワーク (CNN) です。TensorFlow フレームワークの SageMaker AI とデバッガーを使用すると、トレーニングスクリプトを使用して直接推定器を構築し、トレーニングジョブをデバッグできます。

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/MqPdTj0Znwg/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/MqPdTj0Znwg)


ビデオ内のサンプルノートブックは、作成者が提供する[この Studio のデモのリポジトリ](https://gitlab.com/juliensimon/amazon-studio-demos/-/tree/master)から入手することができます。`debugger.ipynb` ノートブックファイルと `mnist_keras_tf.py` トレーニングスクリプトを SageMaker Studio または SageMaker ノートブックインスタンスに複製する必要があります。2 つのファイルのクローンを作成したら、`debugger.ipynb` ノートブック内の `mnist_keras_tf.py` ファイルへのパス `keras_script_path` を指定します。例えば、2 つのファイルを同じディレクトリに複製した場合は、`keras_script_path = "mnist_keras_tf.py"` として設定します。

## Amazon SageMaker Debugger と SageMaker AI Model Monitor の詳細
<a name="debugger-video-dive-deep"></a>

*Julien Simon、 AWS テクニカルエバンジェリスト \$1 長さ: 44 分 34 秒*

このビデオセッションでは、モデルの生産性と品質の向上に役立つデバッガーと SageMaker Model Monitor の高度な機能を掘り下げます。このビデオでは、まず、デバッガーを使ってトレーニングの問題を検出して修正し、テンソルを視覚化し、モデルを改善する方法を示します。次に、22 分 41 秒から、SageMaker AI Model Monitor を使って本番稼働中のモデルをモニタリングして、欠落している特徴やデータのドリフトなどの予測の問題を特定する方法を示します。最後に、機械学習の予算を最大限に活用するためのコストの最適化のヒントを示します。

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/0zqoeZxakOI/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/0zqoeZxakOI)


ビデオ内のサンプルノートブックは、作成者が提供する[この AWS Dev Days 2020 のリポジトリから](https://gitlab.com/juliensimon/awsdevdays2020/-/tree/master/mls1)入手できます。

# Debugger サンプルノートブック
<a name="debugger-notebooks"></a>

[SageMaker デバッガーサンプルノートブック](https://github.com/aws/amazon-sagemaker-examples/tree/master/sagemaker-debugger/)は、[aws/amazon-sagemaker-examples](https://github.com/aws/amazon-sagemaker-examples) リポジトリにあります。デバッガーサンプルノートブックは、トレーニングジョブのデバッグとプロファイリングの基本的なユースケースから高度なユースケースまでを具体的に説明します。

サンプルノートブックでは、ほとんどのサンプルが Amazon EC2、Amazon S3、Amazon SageMaker Python SDK などの SageMaker AI エコシステムでのトレーニングジョブ用に設計されているため、SageMaker Studio または SageMaker ノートブックインスタンスで実行することをお勧めします。

サンプルリポジトリを SageMaker Studio に複製するには、[Amazon SageMaker Studio ツアー](https://docs.aws.amazon.com/sagemaker/latest/dg/gs-studio-end-to-end.html)の手順に従います。

**重要**  
新しいデバッガー機能を使うには、SageMaker Python SDK と `SMDebug` クライアントライブラリをアップグレードする必要があります。iPython カーネル、Jupyter ノートブック、または JupyterLab 環境で、次のコードを実行して最新バージョンのライブラリをインストールし、カーネルを再起動します。  

```
import sys
import IPython
!{sys.executable} -m pip install -U sagemaker smdebug
IPython.Application.instance().kernel.do_shutdown(True)
```

## トレーニングジョブのプロファイリング用の Debugger サンプルノートブック
<a name="debugger-notebooks-profiling"></a>

次のリストは、さまざまな機械学習モデル、データセット、フレームワークのトレーニングジョブをモニタリングおよびプロファイリングするためのデバッガーの適応性を紹介するデバッガーサンプルノートブックを示しています。


| ノートブックのタイトル | フレームワーク | モデル | データセット | 説明 | 
| --- | --- | --- | --- | --- | 
|  [Amazon SageMaker デバッガープロファイリングデータ分析](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-debugger/debugger_interactive_analysis_profiling/interactive_analysis_profiling_data.html)  |  TensorFlow  |  Keras ResNet50  | Cifar-10 |  このノートブックは、SageMaker デバッガーによってキャプチャされたプロファイルデータのインタラクティブな分析の概要を提供します。`SMDebug` インタラクティブ分析ツールの全機能をよく見てください。  | 
|  [Amazon SageMaker デバッガーを使用した機械学習トレーニングのプロフィリング](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-debugger/tensorflow_nlp_sentiment_analysis/sentiment-analysis-tf-distributed-training-bringyourownscript.html)  |  TensorFlow  |  1 次元の畳み込みニューラルネットワーク  |  IMDB データセット  |  肯定的または否定的なセンチメントを持っているものとしてラベル付けされた映画レビューからなる IMDB データのセンチメント分析のための TensorFlow 1-D CNN をプロファイリングします。Studio デバッガーのインサイトとデバッガープロファイリングレポートをよく見てください。  | 
|  [さまざまな分散トレーニング設定による TensorFlow ResNet モデルトレーニングのプロファイリング](https://github.com/aws/amazon-sagemaker-examples/tree/master/sagemaker-debugger/tensorflow_profiling)  |  TensorFlow  | ResNet50 | Cifar-10 |  さまざまな分散トレーニング設定の TensorFlow トレーニングジョブを実行し、システムリソースの使用率をモニタリングし、デバッガーを使ってモデルのパフォーマンスをプロファイリングします。  | 
|  [さまざまな分散トレーニング設定の PyTorch ResNet モデルトレーニングのプロファイリング](https://github.com/aws/amazon-sagemaker-examples/tree/master/sagemaker-debugger/pytorch_profiling)   | PyTorch |  ResNet50  | Cifar-10 |  さまざまな分散トレーニング設定の PyTorch トレーニングジョブを実行し、システムリソースの使用率をモニタリングし、デバッガーを使ってモデルのパフォーマンスをプロファイリングします。  | 

## モデルパラメータの分析用の Debugger サンプルノートブック
<a name="debugger-notebooks-debugging"></a>

次のリストは、さまざまな機械学習モデル、データセット、フレームワークのトレーニングジョブをデバッグするためのデバッガーの適応性を紹介するデバッガーサンプルノートブックを示しています。


| ノートブックのタイトル | フレームワーク | モデル | データセット | 説明 | 
| --- | --- | --- | --- | --- | 
|  [Amazon SageMaker デバッガー - 組み込みルールの使用](https://github.com/aws/amazon-sagemaker-examples/tree/master/sagemaker-debugger/tensorflow_builtin_rule)  |  TensorFlow  |  畳み込みニューラルネットワーク  | MNIST |  TensorFlow モデルのデバッグに、Amazon SageMaker デバッガーの組み込みルールを使用します。  | 
|  [Amazon SageMaker デバッガー - TensorFlow 2.1](https://github.com/aws/amazon-sagemaker-examples/tree/master/sagemaker-debugger/tensorflow2)  |  TensorFlow  |  ResNet50  | Cifar-10 |  TensorFlow 2.1 フレームワークでモデルをデバッグするために、Amazon SageMaker デバッガーフック設定と組み込みルールを使用します。  | 
|  [MXNet トレーニングのデバッグテンソルの視覚化](https://github.com/aws/amazon-sagemaker-examples/tree/master/sagemaker-debugger/mnist_tensor_plot)  |  MXNet  |  Gluon 畳み込みニューラルネットワーク  | Fashion MNIST |  トレーニングジョブを実行し、このジョブからのすべてのテンソルを保存するように SageMaker デバッガーを設定し、それらのテンソルをノートブックで視覚化します。  | 
|  [Amazon SageMaker デバッガーによるスポットトレーニングの有効化](https://github.com/aws/amazon-sagemaker-examples/tree/master/sagemaker-debugger/mxnet_spot_training)   | MXNet |  Gluon 畳み込みニューラルネットワーク  | Fashion MNIST |  デバッガーがスポットインスタンスのトレーニングジョブからテンソルデータを収集する方法と、マネージドスポットトレーニングでデバッガーの組み込みルールを使う方法について説明します。  | 
| [Amazon SageMaker デバッガーで個人の収益を予測する XGBoost モデルの説明](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-debugger/xgboost_census_explanations/xgboost-census-debugger-rules.html) | XGBoost |  XGBoost 回帰  |  [成人国勢調査データセット](https://archive.ics.uci.edu/ml/datasets/adult)  | デバッガーのフックと組み込みルールを使って、損失値、特徴、SHAP 値など、XGBoost 回帰モデルからテンソルデータを収集および視覚化する方法について説明します。 | 

モデルパラメータとユースケースの高度な視覚化については、次のトピックの「[Debugger の高度なデモと視覚化](debugger-visualization.md)」を参照してください。

# Debugger の高度なデモと視覚化
<a name="debugger-visualization"></a>

次のデモでは、デバッガーを使用した高度なユースケースと視覚化スクリプトを具体的に説明します。

**Topics**
+ [Amazon SageMaker Experiments と Debugger を使用したモデルのトレーニングとプルーニング](#debugger-visualization-video-model-pruning)
+ [[SageMaker デバッガーを使用した畳み込み自動エンコーダーモデルのトレーニングのモニタリング](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-debugger/model_specific_realtime_analysis/autoencoder_mnist/autoencoder_mnist.html)](#debugger-visualization-autoencoder_mnist)
+ [[SageMaker デバッガーを使用して BERT モデルトレーニングの注意をモニタリングする](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-debugger/model_specific_realtime_analysis/bert_attention_head_view/bert_attention_head_view.html)](#debugger-visualization-bert_attention_head_view)
+ [[SageMaker デバッガーを使用して畳み込みニューラルネットワーク (CNNs) のクラスアクティベーションマップを視覚化する](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-debugger/model_specific_realtime_analysis/cnn_class_activation_maps/cnn_class_activation_maps.html)](#debugger-visualization-cnn_class_activation_maps)

## Amazon SageMaker Experiments と Debugger を使用したモデルのトレーニングとプルーニング
<a name="debugger-visualization-video-model-pruning"></a>

*Dr. Nathalie Rauschmayr、 AWS 応用科学者 \$1 長さ: 49 分 26 秒*

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/Tnv6HsT1r4I/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/Tnv6HsT1r4I)


Amazon SageMaker 実験とデバッガーがトレーニングジョブの管理を簡素化する方法を理解してください。Amazon SageMaker デバッガーは、トレーニングジョブを透過的に視覚化し、Amazon S3 バケットにトレーニングメトリクスを保存します。SageMaker 実験は、SageMaker Studio を通じてトレーニング情報を*トライアル*として呼び出すことを可能にし、トレーニングジョブの視覚化をサポートします。これにより、重要度のランクに基づいて重要度の低いパラメータを減らしながら、モデルの品質を高く維持できます。

このビデオでは、高いモデル精度基準を維持しながら、事前トレーニング済みの RESNet50 および AlexNet モデルをより軽く手頃にする*モデルプルーニング*手法について紹介します。

SageMaker AI 推定器は、PyTorch フレームワークを使用した AWS Deep Learning Containers 内の PyTorch の model zoo から提供されたアルゴリズムをトレーニングし、デバッガーはトレーニングプロセスからトレーニングメトリクスを抽出します。

この動画では、プルーニングされたモデルの精度を監視し、精度がしきい値に達したときに Amazon CloudWatch イベントと AWS Lambda 関数をトリガーし、冗長な反復を避けるためにプルーニングプロセスを自動的に停止するようにデバッガーカスタムルールを設定する方法も示しています。

学習目標は次のとおりです。
+  SageMaker AI を使って ML モデルトレーニングを高速化しモデルの品質を改善する方法を学ぶ。
+  入力パラメータ、設定、結果を自動的にキャプチャして、 SageMaker 実験を使ってトレーニングの反復を管理する方法について理解する。
+  畳み込みニューラルネットワークの重み、勾配、アクティベーション出力などのメトリクスからリアルタイムテンソルデータを自動的にキャプチャすることで、デバッガーがトレーニングプロセスを透過的にする方法を発見する。
+ CloudWatch を使って、デバッガーが問題を検出したときに Lambda をトリガーする。
+  SageMaker 実験とデバッガーを使った SageMaker トレーニングプロセスをマスターする。

このビデオで使用されているノートブックとトレーニングスクリプトは、「[SageMaker デバッガー PyTorch 反復モデルプルーニング](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/sagemaker-debugger/pytorch_iterative_model_pruning)」にあります。

次の図は、反復モデルのプルーニングプロセスが、アクティベーション出力とグラデーションによって評価される重要度ランクに基づいて、下位 100 個のフィルターを切り取って AlexNet のサイズを縮小する方法を示しています。

プルーニングプロセスにより、最初は 5,000 万個のパラメータが 1,800 万個に削減されました。また、推定モデルサイズが 201MB から 73MB に縮小されました。

![\[モデルのプルーニング結果出力の可視化を含む図\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-model-pruning-results-alexnet.gif)


モデルの精度も追跡する必要があります。次の図では、モデルのプルーニングプロセスをプロットして、SageMaker Studio のパラメータ数に基づいてモデルの精度の変化を視覚化する方法を示しています。

![\[SageMaker Studio でデバッガーを使用したテンソル可視化の図\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-model-pruning-studio.png)


SageMaker Studio で、**[Experiments]** (実験) タブを選択し、デバッガーがプルーニングプロセスから保存したテンソルのリストを選択してから、**[Trial Component List]** (トライアルコンポーネントリスト) パネルを作成します。10 個の反復をすべて選択し、**[Add chart]** (グラフを追加) を選択して**トライアルコンポーネントグラフ**を作成します。デプロイするモデルを決定したら、トライアルコンポーネントを選択し、アクションを実行するメニューを選択するか、**[Deploy model]** (モデルをデプロイ) を選択します。

**注記**  
次のノートブックの例を使って SageMaker Studio でモデルをデプロイするには、`train.py` スクリプトの `train` 関数の末尾に行を追加します。  

```
# In the train.py script, look for the train function in line 58.
def train(epochs, batch_size, learning_rate):
    ...
        print('acc:{:.4f}'.format(correct/total))
        hook.save_scalar("accuracy", correct/total, sm_metric=True)

    # Add the following code to line 128 of the train.py script to save the pruned models
    # under the current SageMaker Studio model directory
    torch.save(model.state_dict(), os.environ['SM_MODEL_DIR'] + '/model.pt')
```

## [SageMaker デバッガーを使用した畳み込み自動エンコーダーモデルのトレーニングのモニタリング](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-debugger/model_specific_realtime_analysis/autoencoder_mnist/autoencoder_mnist.html)
<a name="debugger-visualization-autoencoder_mnist"></a>

このノートブックでは、SageMaker デバッガーが手書き数字の MNIST イメージデータセット上で、教師なし (または自己教師あり) 学習プロセスからのテンソルを視覚化する方法を示しています。

このノートブックのトレーニングモデルは、MXNet フレームワークを使用した畳み込み式オートエンコーダです。畳み込みオートエンコーダは、エンコーダ部分とデコーダ部分からなるボトルネック型の畳み込みニューラルネットワークを持っています。

この例のエンコーダには、入力イメージの圧縮表現 (潜在変数) を生成するために、2 つの畳み込みレイヤーがあります。この場合、エンコーダは、サイズ (28、28) の元の入力イメージからサイズ (1、20) の潜在変数を生成し、トレーニングのデータサイズを 40 分の 1 まで大幅に縮小します。

デコーダは 2 つの*畳み込み解除*レイヤーを持ち、潜在変数が出力イメージを再構築することによって重要な情報を保持することを保証します。

畳み込みエンコーダは、より小さな入力データサイズでクラスタリングアルゴリズムを強化し、k-means、k-NN、t 分布型確率的近傍埋め込み法 (t-SNE) などのクラスタリングアルゴリズムのパフォーマンスを強化します。

このノートブックの例では、次のアニメーションに示すように、デバッガーを使って潜在変数を視覚化する方法を示しています。また、t-SNE アルゴリズムが潜在変数を 10 個のクラスターに分類し、それらを 2 次元空間に投影する方法も示しています。図の右側にある散布図の配色は、BERT モデルと t-SNE アルゴリズムが潜在変数をクラスターにどの程度適切に整理しているかを示す真の値を反映しています。

![\[畳み込みオートエンコーダの概念図\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-cnn-autoencoder-plot.gif)


## [SageMaker デバッガーを使用して BERT モデルトレーニングの注意をモニタリングする](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-debugger/model_specific_realtime_analysis/bert_attention_head_view/bert_attention_head_view.html)
<a name="debugger-visualization-bert_attention_head_view"></a>

Transformer による双方向エンコード表現 (BERT) は、言語表現モデルです。モデルの名前が表すように、BERTモデルは、自然言語処理 (NLP) のための*転送学習*と *Transformer モデル*に基づいて構築されます。

BERT モデルは、文中の欠けている単語を予測したり、前の文に自然に続く次の文を予測するなどの教師なしタスクでに事前トレーニングされています。トレーニングデータには、Wikipedia や電子書籍などのソースから、33 億語 (トークン) の英文が含まれています。簡単な例として、BERT モデルは対象トークンから適切な動詞トークンまたは代名詞トークンに高い*アテンション*を付与することができます。

事前トレーニングされた BERT モデルは、追加の出力レイヤーを使って微調整することができ、質問への自動応答、テキスト分類など、NLP タスクにおける最先端のモデルトレーニングを達成します。

デバッガーは、微調整プロセスからテンソルを収集します。NLP のコンテキストでは、ニューロンの重みは*アテンション*と呼ばれます。

このノートブックでは、Stanford Question and Answering データセットで [GluonNLP の model zoo から事前トレーニングされた BERT モデル](https://gluon-nlp.mxnet.io/model_zoo/bert/index.html)を使う方法と、トレーニングジョブをモニタリングするように SageMaker デバッガーをセットアップする方法を示しています。

クエリとキーベクトルに*アテンションスコア*と個々のニューロンをプロットすると、誤ったモデル予測の原因を特定するのに役立ちます。SageMaker AI デバッガーを使うと、テンソルを取得し、トレーニングの進行に応じてリアルタイムで*アテンションヘッドビュー*をプロットし、モデルが学習している内容を理解できます。

次のアニメーションは、ノートブックの例で提供されているトレーニングジョブにおける 10 個の反復に対する最初の 20 個の入力トークンのアテンションスコアを示しています。

![\[アテンションスコアのアニメーション\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-attention_scores.gif)


## [SageMaker デバッガーを使用して畳み込みニューラルネットワーク (CNNs) のクラスアクティベーションマップを視覚化する](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-debugger/model_specific_realtime_analysis/cnn_class_activation_maps/cnn_class_activation_maps.html)
<a name="debugger-visualization-cnn_class_activation_maps"></a>

このノートブックでは、SageMaker デバッガーを使って、畳み込みニューラルネットワーク (CNN) でのイメージの検出と分類のためのクラスアクティベーションマップをプロットする方法について説明します。深層学習では、*畳み込みニューラルネットワーク (CNN または ConvNet)*は、視覚的イメージの分析に最も一般的に適用される深層ニューラルネットワークのクラスです。クラスアクティベーションマップを採用した用途の 1 つに自動運転車があり、交通標識、道路、障害物などのイメージの瞬時の検出と分類が必須とされます。

このノートブックでは、PyTorch RESnet モデルを [German Traffic Sign Dataset データセット](http://benchmark.ini.rub.de/)でトレーニングします。このデータセットには、交通関連オブジェクトが 40 クラス以上、イメージが 50,000 件以上の含まれています。

![\[CNN クラスアクティベーションマップのアニメーション\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-cnn-class-activation-maps.gif)


トレーニングプロセス中、SageMaker デバッガーはテンソルを収集し、クラスアクティベーションマップをリアルタイムでプロットします。アニメーションイメージに示すように、クラスアクティベーションマップ (*顕著性マップ*とも呼ばれます) は、アクティベーションの高い領域を赤色で強調表示します。

デバッガーによってキャプチャされたテンソルを使うと、モデルトレーニング中にアクティベーションマップがどのように進化するかを視覚化できます。モデルは、トレーニングジョブの開始時に左下隅のエッジを検出することから始まります。トレーニングが進むにつれ、焦点が中央にシフトして制限速度標識を検出し、97% の信頼度でクラス 3 (制限速度 60km/h 標識のクラス) として入力イメージを予測することに成功します。