

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

# Amazon SageMaker デバッガー
<a name="train-debugger"></a>

Amazon SageMaker Debugger を使用して、機械学習トレーニングジョブからのモデル出力テンソルをリアルタイムでデバッグし、収束しない問題を検出します。

## Amazon SageMaker Debugger の機能
<a name="debugger-features"></a>

機械学習 (ML) トレーニングジョブには、オーバーフィット、活性化関数の飽和、勾配の消失などの問題が発生し、モデルのパフォーマンスを低下させる場合があります。

SageMaker Debugger には、トレーニングジョブをデバッグし、そのような問題を解決してモデルのパフォーマンスを向上させるツールが用意されています。Debugger は、トレーニングの異常が見つかったときにアラートを送信し、問題に対してアクションを取り、収集したメトリクスとテンソルを視覚化することで問題の根本原因を特定するツールも提供します。

SageMaker Debugger は、Apache MXNet、PyTorch、TensorFlow、XGBoost フレームワークをサポートしています。SageMaker Debugger がサポートする利用可能なフレームワークとバージョンの詳細については、「[サポート対象のフレームワークとアルゴリズム](debugger-supported-frameworks.md)」を参照してください。

![\[Amazon SageMaker デバッガーの仕組みの概要。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-main.png)


デバッガーのワークフローの概要は次のとおりです。

1. 必要に応じて `sagemaker-debugger` Python SDK でトレーニングスクリプトを変更します。

1. SageMaker Debugger を使って SageMaker トレーニングジョブを設定します。
   + SageMaker AI Estimator API (Python SDK 用) を使って設定します。
   + SageMaker AI [`CreateTrainingJob`リクエスト (Boto3 または CLI 用)](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-createtrainingjob-api.html) を使って設定します。
   + SageMaker Debugger を使って[カスタムトレーニングコンテナ](debugger-bring-your-own-container.md)を設定します。

1. トレーニングジョブを開始し、トレーニングの問題をリアルタイムにモニタリングします。
   + [デバッガーの組み込みルールのリスト](debugger-built-in-rules.md).

1. アラートを受け取り、トレーニングの問題に対して迅速なアクションを取ります。
   + [ルール用の Debugger の組み込みアクションを使用する](debugger-built-in-actions.md) を使ってトレーニングの問題が見つかった場合は、テキストとメールを受け取り、トレーニングジョブを停止する。
   + [Amazon CloudWatch Events と AWS Lambda](debugger-cloudwatch-lambda.md) を使って独自のアクションを設定します。

1. トレーニングの問題の詳細な分析を調べます。
   + モデル出力テンソルのデバッグについては、「[TensorBoard で Debugger 出力テンソルを視覚化する](debugger-enable-tensorboard-summaries.md)」を参照してください。

1. Debugger が示す提案を考慮しながら問題を修正し、モデルを最適化して目標精度を達成するまでステップ 1～5 を繰り返します。

SageMaker デバッガー開発者ガイドでは、次のトピックを具体的に説明します。

**Topics**
+ [Amazon SageMaker Debugger の機能](#debugger-features)
+ [サポート対象のフレームワークとアルゴリズム](debugger-supported-frameworks.md)
+ [Amazon SageMaker Debugger アーキテクチャ](debugger-how-it-works.md)
+ [Debugger チュートリアル](debugger-tutorial.md)
+ [Amazon SageMaker Debugger を使用してトレーニングジョブをデバッグする](debugger-debug-training-jobs.md)
+ [デバッガーの組み込みルールのリスト](debugger-built-in-rules.md)
+ [Debugger クライアントライブラリを使用してカスタムルールを作成する](debugger-custom-rules.md)
+ [カスタムトレーニングで Debugger を使用する](debugger-bring-your-own-container.md)
+ [SageMaker API を使って Debugger を設定する](debugger-createtrainingjob-api.md)
+ [Amazon SageMaker Debugger リファレンス](debugger-reference.md)

# サポート対象のフレームワークとアルゴリズム
<a name="debugger-supported-frameworks"></a>

次の表に、デバッガーのサポート対象の SageMaker AI 機械学習フレームワークとアルゴリズムを示します。


| 
| 
| **SageMaker AI-supported frameworks and algorithms** |  **Debugging output tensors**  | 
| --- |--- |
|  [TensorFlow](https://sagemaker.readthedocs.io/en/stable/using_tf.html)   |  [AWS TensorFlow 深層学習コンテナ](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#general-framework-containers) 1.15.4 以降  | 
|  [PyTorch](https://sagemaker.readthedocs.io/en/stable/using_pytorch.html)  |  [AWS PyTorch 深層学習コンテナ](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#general-framework-containers) 1.5.0 以降  | 
|  [MXNet](https://sagemaker.readthedocs.io/en/stable/using_mxnet.html)   |  [AWS MXNet 深層学習コンテナ](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#general-framework-containers) 1.6.0 以降  | 
|  [XGBoost](https://sagemaker.readthedocs.io/en/stable/frameworks/xgboost/using_xgboost.html)  |  1.0-1、1.2-1、1.3-1  | 
|  [SageMaker AI 汎用推定器](https://sagemaker.readthedocs.io/en/stable/api/training/estimators.html)  |  [カスタムトレーニングコンテナ](debugger-bring-your-own-container.md) (手動フック登録により TensorFlow、PyTorch、MXNet、XGBoost で使用可能)  | 
+ **出力テンソルのデバッグ** - トレーニングジョブの重み、勾配、バイアス、スカラー値などのモデルパラメータを追跡およびデバッグします。利用可能な深層学習フレームワークは、Apache MXNet、TensorFlow、PyTorch、XGBoost です。
**重要**  
Keras を使用した TensorFlow フレームワークについては、SageMaker デバッガーは、TensorFlow 2.6 以降の `tf.keras` モジュールを使って構築されたモデルのデバッグに対するゼロコード変更サポートを廃止します。これは、[TensorFlow 2.6.0 リリースノート](https://github.com/tensorflow/tensorflow/releases/tag/v2.6.0)で発表された重大な変更によるものです。トレーニングスクリプトを更新する手順については、「[TensorFlow トレーニングスクリプトを適応させる](debugger-modify-script-tensorflow.md)」を参照してください。
**重要**  
PyTorch v1.12.0 以降から、SageMaker Debugger はデバッグモデルのゼロコード変更サポートを廃止します。  
これは、SageMaker Debugger が `torch.jit` の機能を妨害する原因となる重大な変更によるものです。トレーニングスクリプトを更新する手順については、「[PyTorch トレーニングスクリプトを適合させる](debugger-modify-script-pytorch.md)」を参照してください。

トレーニングやデバッグを行いたいフレームワークまたはアルゴリズムが表に載っていない場合は、[AWS ディスカッションフォーラム](https://forums.aws.amazon.com/)にアクセスして、SageMaker デバッガーに関するフィードバックを残してください。

## AWS リージョン
<a name="debugger-support-aws-regions"></a>

Amazon SageMaker Debugger は、以下のリージョンを除き、Amazon SageMaker AI がサービス提供されているすべてのリージョンで使用できます。
+ アジアパシフィック (ジャカルタ): `ap-southeast-3`

Amazon SageMaker AI が で稼働しているかどうかを確認するには AWS リージョン、[AWS 「リージョン別サービス](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)」を参照してください。

## カスタムトレーニングコンテナと共にデバッガーを使用する
<a name="debugger-byoc-intro"></a>

独自のトレーニングコンテナを SageMaker AI に持ち込んで、デバッガーを使ってトレーニングジョブのインサイトを得ることができます。モニタリングとデバッグの機能を使って Amazon EC2 インスタンスでモデルを最適化することで、作業効率を最大化します。

`sagemaker-debugger` クライアントライブラリを使ってトレーニングコンテナを構築し、それを Amazon Elastic Container Registry (Amazon ECR) にプッシュし、モニタリングとデバッグを行う方法の詳細については、「[カスタムトレーニングで Debugger を使用する](debugger-bring-your-own-container.md)」を参照してください。

## デバッガーのオープンソース GitHub リポジトリ
<a name="debugger-opensource"></a>

デバッガー API は、SageMaker Python SDK を通じて提供され、SageMaker AI [CreateTrainingJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) および [ DescribeTrainingJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeTrainingJob.html) API オペレーション用のデバッガーフックとルールの設定を構築することを目的としています。`sagemaker-debugger` クライアントライブラリは、*フック*を登録し*トライアル*機能を使ってトレーニングデータにアクセスするためのツールを、すべて柔軟で強力な API オペレーションを通じて提供します。Python 3.6 以降で、機械学習フレームワーク TensorFlow、PyTorch、MXNet、XGBoost をサポートしています。

デバッガーと `sagemaker-debugger` API オペレーションに関する直接のリソースについては、次のリンクを参照してください。
+ [Amazon SageMaker Python SDK のドキュメント](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_debugger.html)
+ [Amazon SageMaker Python SDK - Debugger API](https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html)
+ [Amazon SageMaker Debugger オープンソースクライアントライブラリ](https://github.com/awslabs/sagemaker-debugger#amazon-sagemaker-debugger)の [`sagemaker-debugger` Python SDK ドキュメント](https://sagemaker-debugger.readthedocs.io/en/website/index.html)
+ [`sagemaker-debugger` PyPI](https://pypi.org/project/smdebug/)

SDK for Java を使って SageMaker トレーニングジョブを実行し、デバッガー API を設定する場合は、次のリファレンスを参照してください。
+ [Amazon SageMaker Debugger API](debugger-reference.md#debugger-apis)
+ [SageMaker API を使って Debugger を設定する](debugger-createtrainingjob-api.md)

# Amazon SageMaker Debugger アーキテクチャ
<a name="debugger-how-it-works"></a>

このトピックでは、Amazon SageMaker デバッガーワークフローの概要を具体的に説明します。

デバッガーは、*パフォーマンスの最適化*のためのプロファイリング機能をサポートして、システムのボトルネックや低使用率などのコンピューティングの問題を特定し、ハードウェアリソースの使用率を大規模に最適化するのに役立ちます。

*モデルの最適化*のためのデバッガーのデバッグ機能は、勾配降下法やそれに類する最適化アルゴリズムを使って損失関数を最小化する際に発生し得る、非収束トレーニングの問題を分析することです。

次の図は、SageMaker デバッガーのアーキテクチャを示しています。太い境界線で囲まれているブロックは、デバッガーがトレーニングジョブを分析するために管理するものです。

![\[Amazon SageMaker デバッガーの仕組みの概要。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger_new_diagram.png)


デバッガーは、トレーニングジョブの次のデータをセキュアな Amazon S3 バケットに保存します。
+ **出力テンソル** - ML モデルのトレーニング中にフォワードパスとバックワードパスで継続的に更新されるスカラーとモデルパラメータのコレクション。出力テンソルには、スカラー値 (精度と損失) と行列 (重み、勾配、入力層、出力層) が含まれます。
**注記**  
デフォルトでは、デバッガーは SageMaker AI 推定器にデバッガー固有のパラメータを設定せずに SageMaker トレーニングジョブをモニタリングおよびデバッグします。デバッガーは 500 ミリ秒ごとにシステムメトリクスを収集し、500 ステップごとに基本的な出力テンソル (損失や精度などのスカラー出力) を収集します。また、`ProfilerReport` ルールを実行して、システムメトリクスを分析し、Studio デバッガーインサイトダッシュボードとプロファイリングレポートに集約します。デバッガーは、セキュアな Amazon S3 バケットに出力データを保存します。

デバッガーの組み込みルールは、S3 バケットに収集されたトレーニングデータを処理することで機械学習モデルを評価するように設計された処理コンテナで実行されます (「[データの処理とモデルの評価](https://docs.aws.amazon.com//sagemaker/latest/dg/processing-job.html)」を参照)。組み込みルールは、デバッガーによって完全に管理されます。また、モデルに合わせてカスタマイズした独自のルールを作成し、モニタリングしたい問題を監視することもできます。

# 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 標識のクラス) として入力イメージを予測することに成功します。

# Amazon SageMaker Debugger を使用してトレーニングジョブをデバッグする
<a name="debugger-debug-training-jobs"></a>

トレーニングスクリプトを準備し、SageMaker Debugger でトレーニングジョブを実行してモデルトレーニングの進行状況をデバッグするには、一般的な 2 段階のプロセスに従います。つまり `sagemaker-debugger` Python SDK を使用してトレーニングスクリプトを変更し、SageMaker Python SDK を使用して SageMaker AI 推定器を構築します。次のトピックでは、SageMaker Debugger のデバッグ機能を使用する方法について説明します。

**Topics**
+ [フックを登録するためにトレーニングスクリプトを適応させる](debugger-modify-script.md)
+ [SageMaker Python SDK を使用して Debugger でトレーニングジョブを開始する](debugger-configuration-for-debugging.md)
+ [XGBoost の SageMaker Debugger インタラクティブレポート](debugger-report-xgboost.md)
+ [Amazon SageMaker Debugger ルールに基づくアクション](debugger-action-on-rules.md)
+ [TensorBoard で Amazon SageMaker Debugger 出力テンソルを視覚化する](debugger-enable-tensorboard-summaries.md)

# フックを登録するためにトレーニングスクリプトを適応させる
<a name="debugger-modify-script"></a>

Amazon SageMaker Debugger には [`sagemaker-debugger` Python SDK](https://sagemaker-debugger.readthedocs.io/en/website) と呼ばれるクライアントライブラリが付属しています。`sagemaker-debugger` Python SDK には、トレーニング前にトレーニングスクリプトを調整するためのツールと、トレーニング後に分析ツールを提供します。このページでは、クライアントライブラリを使用してトレーニングスクリプトを適合させる方法について説明します。

`sagemaker-debugger` Python SDK には、トレーニングスクリプトの変更することなく、モデルテンソルを抽出するフックの登録に役立つラッパー関数が用意されています。モデル出力テンソルを収集を開始し、デバッグしてトレーニングの問題を見つけるには、トレーニングスクリプトに次の変更を加えます。

**ヒント**  
このページでは、API リファレンス用の「[`sagemaker-debugger` open source SDK documentation](https://sagemaker-debugger.readthedocs.io/en/website/index.html)」を使用してください。

**Topics**
+ [PyTorch トレーニングスクリプトを適合させる](debugger-modify-script-pytorch.md)
+ [TensorFlow トレーニングスクリプトを適応させる](debugger-modify-script-tensorflow.md)

# PyTorch トレーニングスクリプトを適合させる
<a name="debugger-modify-script-pytorch"></a>

モデル出力テンソルを収集を開始し、トレーニングの問題をデバッグするには、PyTorch トレーニングスクリプトに次の変更を加えます。

**注記**  
SageMaker Debugger は、[https://pytorch.org/docs/stable/nn.functional.html](https://pytorch.org/docs/stable/nn.functional.html) API オペレーションからモデル出力テンソルを収集できません。PyTorch トレーニングスクリプトを記述する場合は、代わりに [https://pytorch.org/docs/stable/generated/torch.nn.NLLLoss.html](https://pytorch.org/docs/stable/generated/torch.nn.NLLLoss.html) モジュールを使用することをお勧めします。

## PyTorch 1.12.0 の場合
<a name="debugger-modify-script-pytorch-1-12-0"></a>

PyTorch トレーニングスクリプトを持ち込んだ場合、トレーニングスクリプトに数行のコードを追加するだけで、トレーニングジョブを実行し、モデル出力テンソルを抽出できます。`sagemaker-debugger` クライアントライブラリの「[ フック API](https://sagemaker-debugger.readthedocs.io/en/website/hook-api.html)」を使用する必要があります。以下の説明では、コード例を使って各ステップごとに説明します。

1. フックを作成します。

   **(推奨) SageMaker AI 内でのトレーニングジョブの場合**

   ```
   import smdebug.pytorch as smd
   hook=smd.get_hook(create_if_not_exists=True)
   ```

   [SageMaker Python SDK を使用して Debugger でトレーニングジョブを開始する](debugger-configuration-for-debugging.md) で DebuggerHookConfig、TensorBoardConfig、またはルールのいずれかを推定器に組み込んでトレーニングジョブを起動すると、SageMaker AI は `get_hook` 関数によって取得される JSON 設定ファイルをトレーニングインスタンスに追加します。推定器に設定 API が含まれていない場合、フックで検索できる設定ファイルは存在せず、関数は `None` を返すことに注意してください。

   **(オプション) SageMaker AI 以外のトレーニングジョブの場合**

   ローカルモードでトレーニングジョブを実行する際に、SageMaker Notebook インスタンス、Amazon EC2 インスタンス、または独自のローカルデバイス上で直接実行する場合は、`smd.Hook` クラスを使用してフックを作成します。ただし、この方法ではテンソルコレクションの保存のみ可能で、TensorBoard の可視化に使用できます。SageMaker デバッガーのビルトインルールはローカルモードでは動作しません。ルールには SageMaker AI ML トレーニングインスタンスとリモートインスタンスからの出力をリアルタイムで保存する S3 が必要だからです。この場合 `smd.get_hook` API は `None` を返します。

   ローカルモードでテンソルを保存する手動フックを作成する場合は、以下のコードスニペットとロジックを使用して `smd.get_hook` API が `None` を戻すかどうかを確認し、`smd.Hook` クラスを使用して手動フックを作成します。ローカルマシンの任意の出力ディレクトリを指定できることに注意してください。

   ```
   import smdebug.pytorch as smd
   hook=smd.get_hook(create_if_not_exists=True)
   
   if hook is None:
       hook=smd.Hook(
           out_dir='/path/to/your/local/output/',
           export_tensorboard=True
       )
   ```

1. フックのクラスメソッドでモデルをラップします。

   この `hook.register_module()` メソッドはモデルを取得して各レイヤーを繰り返し処理し、[SageMaker Python SDK を使用して Debugger でトレーニングジョブを開始する](debugger-configuration-for-debugging.md) の設定で指定した正規表現と一致するテンソルを検索します。このフックメソッドで収集できるテンソルは、重み、バイアス、アクティベーション、グラデーション、入力、出力です。

   ```
   hook.register_module(model)
   ```
**ヒント**  
大規模なディープラーニングモデルから出力テンソル全体を収集すると、それらのコレクションの合計サイズが指数関数的に大きくなり、ボトルネックの原因になる可能性があります。特定のテンソルを保存したい場合は、`hook.save_tensor()` メソッドを使用することもできます。このメソッドは、特定のテンソルの変数を選択し、必要な名前を付けたカスタムコレクションに保存するのに役立ちます。詳細については、この手順の「[ステップ 7](#debugger-modify-script-pytorch-save-custom-tensor)」を参照してください。

1. 損失関数をフックのクラスメソッドでワープします。

   `hook.register_loss` メソッドは損失関数をラップします。[SageMaker Python SDK を使用して Debugger でトレーニングジョブを開始する](debugger-configuration-for-debugging.md) で設定する `save_interval` ごとに損失値を抽出し、`"losses"` コレクションに保存します。

   ```
   hook.register_loss(loss_function)
   ```

1. トレインブロックに `hook.set_mode(ModeKeys.TRAIN)` を追加します。これは、テンソルコレクションがトレーニングフェーズ中に抽出されることを示しています。

   ```
   def train():
       ...
       hook.set_mode(ModeKeys.TRAIN)
   ```

1. 検証ブロックを `hook.set_mode(ModeKeys.EVAL)` に追加します。これは、テンソルコレクションがト検証フェーズ中に抽出されることを示しています。

   ```
   def validation():
       ...
       hook.set_mode(ModeKeys.EVAL)
   ```

1. カスタムスカラーを保存するには [https://sagemaker-debugger.readthedocs.io/en/website/hook-constructor.html#smdebug.core.hook.BaseHook.save_scalar](https://sagemaker-debugger.readthedocs.io/en/website/hook-constructor.html#smdebug.core.hook.BaseHook.save_scalar) を使用します。モデルにないスカラー値を保存できます。例えば、評価中に計算された精度の値を記録したい場合は、精度を計算する行の下に次のコード行を追加します。

   ```
   hook.save_scalar("accuracy", accuracy)
   ```

   カスタムスカラーコレクションに名前を付けるには、最初の引数に文字列を指定する必要があります。これは TensorBoard のスカラー値を視覚化するために使用される名前で、任意の文字列を指定することができます。

1. <a name="debugger-modify-script-pytorch-save-custom-tensor"></a>カスタムテンソルを保存するには [https://sagemaker-debugger.readthedocs.io/en/website/hook-constructor.html#smdebug.core.hook.BaseHook.save_tensor](https://sagemaker-debugger.readthedocs.io/en/website/hook-constructor.html#smdebug.core.hook.BaseHook.save_tensor) を使用します。[https://sagemaker-debugger.readthedocs.io/en/website/hook-constructor.html#smdebug.core.hook.BaseHook.save_scalar](https://sagemaker-debugger.readthedocs.io/en/website/hook-constructor.html#smdebug.core.hook.BaseHook.save_scalar) と同様に、独自のテンソルコレクションを定義して、追加のテンソルを保存できます。例えば、モデルに渡された入力画像データを抽出し、カスタムテンソルとして保存するには、次のコード行 (`"images"` はカスタムテンソルの名前の例、`image_inputs` は入力画像データの変数の例) を追加します。

   ```
   hook.save_tensor("images", image_inputs)
   ```

   カスタムテンソルの名前を付けるには、最初の引数に文字列を指定する必要があることに注意してください。`hook.save_tensor()` には、カスタムテンソルを保存するテンソルコレクションを指定するための 3 番目の引数 `collections_to_write` があります。デフォルトは `collections_to_write="default"` です。3 番目の引数を明示的に指定しない場合、カスタムテンソルは `"default"` テンソルコレクションに保存されます。

トレーニングスクリプトの調整が完了したら、[SageMaker Python SDK を使用して Debugger でトレーニングジョブを開始する](debugger-configuration-for-debugging.md) に進みます。

# TensorFlow トレーニングスクリプトを適応させる
<a name="debugger-modify-script-tensorflow"></a>

モデル出力テンソルを収集を開始し、トレーニングの問題をデバッグするには、TensorFlow トレーニングスクリプトに次の変更を加えます。

**SageMaker AI 内でジョブをトレーニングするためのフックを作成する**

```
import smdebug.tensorflow as smd

hook=smd.get_hook(hook_type="keras", create_if_not_exists=True)
```

これにより、SageMaker トレーニングジョブを開始するときにフックが作成されます。[SageMaker Python SDK を使用して Debugger でトレーニングジョブを開始する](debugger-configuration-for-debugging.md) で任意の `DebuggerHookConfig`、`TensorBoardConfig`、または `Rules` のいずれかを推定器に組み込んでトレーニングジョブを起動すると、SageMaker AI は `smd.get_hook` メソッドよって取得される JSON 設定ファイルをトレーニングインスタンスに追加します。推定器に設定 API が含まれていない場合、フックで検索できる設定ファイルは存在せず、関数は `None` を返すことに注意してください。

**(オプション) SageMaker AI 以外のジョブをトレーニングするためのフックを作成する**

ローカルモードでトレーニングジョブを実行する際に、SageMaker Notebook インスタンス、Amazon EC2 インスタンス、または独自のローカルデバイス上で直接実行する場合は、`smd.Hook` クラスを使用してフックを作成します。ただし、この方法ではテンソルコレクションの保存のみ可能で、TensorBoard の可視化に使用できます。SageMaker デバッガのビルトインルールはローカルモードでは動作しません。この場合も `smd.get_hook` メソッドは `None` を返します。

手動フックを作成する場合は、以下のコードスニペットとロジックを使用してフックが `None` を返すかどうかを確認し、`smd.Hook` クラスを使用して手動フックを作成します。

```
import smdebug.tensorflow as smd

hook=smd.get_hook(hook_type="keras", create_if_not_exists=True) 

if hook is None:
    hook=smd.KerasHook(
        out_dir='/path/to/your/local/output/',
        export_tensorboard=True
    )
```

フック作成コードを追加したら、次の TensorFlow Keras のトピックに進みます。

**注記**  
SageMaker デバッガーは現在、TensorFlow Keras のみをサポートしています。

## TensorFlow Keras トレーニングスクリプトにフックを登録する
<a name="debugger-modify-script-tensorflow-keras"></a>

以下の手順では、フックとそのメソッドを使用して、モデルとオプティマイザから出力スカラーとテンソルを収集する方法を説明します。

1. フックのクラスメソッドで Keras モデルとオプティマイザをラップします。

   `hook.register_model()` メソッドはモデルを取得して各レイヤーを繰り返し処理し、「[SageMaker Python SDK を使用して Debugger でトレーニングジョブを開始する](debugger-configuration-for-debugging.md)」の設定で指定した正規表現と一致するテンソルを検索します。このフックメソッドで収集できるテンソルは、重み、バイアス、アクティベーションです。

   ```
   model=tf.keras.Model(...)
   hook.register_model(model)
   ```

1. オプティマイザを `hook.wrap_optimizer()` メソッドでラップします。

   ```
   optimizer=tf.keras.optimizers.Adam(...)
   optimizer=hook.wrap_optimizer(optimizer)
   ```

1. TensorFlow の eager モードでモデルをコンパイルします。

   各レイヤーの入出力テンソルなどのテンソルをモデルから収集するには、eager モードでトレーニングを実行する必要があります。そうでない場合は、SageMaker AI Debugger はテンソルを収集できなくなります。ただし、モデルの重み、バイアス、損失などの他のテンソルは、明示的に eager モードで実行しなくても収集できます。

   ```
   model.compile(
       loss="categorical_crossentropy", 
       optimizer=optimizer, 
       metrics=["accuracy"],
       # Required for collecting tensors of each layer
       run_eagerly=True
   )
   ```

1. フックを [https://www.tensorflow.org/api_docs/python/tf/keras/Model#fit](https://www.tensorflow.org/api_docs/python/tf/keras/Model#fit) メソッドに登録します。

   登録したフックからテンソルを収集するには、Keras `model.fit()` クラスメソッドに `callbacks=[hook]` を追加します。これにより、`sagemaker-debugger` フックが Keras コールバックとして渡されます。

   ```
   model.fit(
       X_train, Y_train,
       batch_size=batch_size,
       epochs=epoch,
       validation_data=(X_valid, Y_valid),
       shuffle=True, 
       callbacks=[hook]
   )
   ```

1. TensorFlow 2.x は、シンボリックな勾配変数しか提供されておらず、その値にアクセスすることはできません。勾配を収集するには、[https://sagemaker-debugger.readthedocs.io/en/website/hook-methods.html#tensorflow-specific-hook-api](https://sagemaker-debugger.readthedocs.io/en/website/hook-methods.html#tensorflow-specific-hook-api) メソッドで `tf.GradientTape` をラップします。そのためには、次のように独自のトレーニングステップを記述する必要があります。

   ```
   def training_step(model, dataset):
       with hook.wrap_tape(tf.GradientTape()) as tape:
           pred=model(data)
           loss_value=loss_fn(labels, pred)
       grads=tape.gradient(loss_value, model.trainable_variables)
       optimizer.apply_gradients(zip(grads, model.trainable_variables))
   ```

   テープをラップすることで、`sagemaker-debugger` フックは勾配、パラメータ、損失などの出力テンソルを識別できます。テープをラップすると `push_tape()`、`pop_tape()`、`gradient()` などのテープオブジェクトの関数を中心とした `hook.wrap_tape()` メソッドが SageMaker Debugger のライターを設定し、`gradient()` の入力 (トレーニング可能な変数と損失) および `gradient()` の出力 (勾配) として提供されるテンソルを保存するようになります。
**注記**  
カスタムトレーニングループで収集するには、必ず Eager モードを使用してください。そうでない場合は、SageMaker Debugger はテンソルを収集できなくなります。

`sagemaker-debugger` フック API が提供する、フックの構築やテンソルを保存するためのアクションの完全なリストについては、「`sagemaker-debugger` Python SDK ドキュメント」の「[Hook Methods](https://sagemaker-debugger.readthedocs.io/en/website/hook-methods.html)」を参照してください。

トレーニングスクリプトの調整が完了したら、[SageMaker Python SDK を使用して Debugger でトレーニングジョブを開始する](debugger-configuration-for-debugging.md) に進みます。

# SageMaker Python SDK を使用して Debugger でトレーニングジョブを開始する
<a name="debugger-configuration-for-debugging"></a>

SageMaker Debugger で SageMaker AI 推定器を設定するには、[Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) を使用し、Debugger 固有のパラメータを指定します。デバッグ機能を最大限に活用するには、`debugger_hook_config`、`tensorboard_output_config`、および `rules` の 3 つのパラメータを設定する必要があります。

**重要**  
トレーニングジョブを起動するために推定器フィットメソッドをコンストラクトして実行する前に、「[フックを登録するためにトレーニングスクリプトを適応させる](debugger-modify-script.md)」で説明されている手順に従ってトレーニングスクリプトを調整してください。

## Debugger 固有のパラメータを使用した SageMaker AI 推定器をコンストラクトする
<a name="debugger-configuration-structure"></a>

このセクションのコード例は、Debugger 固有のパラメータを使用して SageMaker AI 推定器をコンストラクトする方法を示しています。

**注記**  
以下のコード例は、SageMaker AI フレームワーク推定器をコンストラクトするためのテンプレートであり、直接実行できるものではありません。次のセクションに進み、デバッガー固有のパラメータを設定する必要があります。

------
#### [ PyTorch ]

```
# An example of constructing a SageMaker AI PyTorch estimator
import boto3
import sagemaker
from sagemaker.pytorch import PyTorch
from sagemaker.debugger import CollectionConfig, DebuggerHookConfig, Rule, rule_configs

session=boto3.session.Session()
region=session.region_name

debugger_hook_config=DebuggerHookConfig(...)
rules=[
    Rule.sagemaker(rule_configs.built_in_rule())
]

estimator=PyTorch(
    entry_point="directory/to/your_training_script.py",
    role=sagemaker.get_execution_role(),
    base_job_name="debugger-demo",
    instance_count=1,
    instance_type="ml.p3.2xlarge",
    framework_version="1.12.0",
    py_version="py37",
    
    # Debugger-specific parameters
    debugger_hook_config=debugger_hook_config,
    rules=rules
)

estimator.fit(wait=False)
```

------
#### [ TensorFlow ]

```
# An example of constructing a SageMaker AI TensorFlow estimator
import boto3
import sagemaker
from sagemaker.tensorflow import TensorFlow
from sagemaker.debugger import CollectionConfig, DebuggerHookConfig, Rule, rule_configs

session=boto3.session.Session()
region=session.region_name

debugger_hook_config=DebuggerHookConfig(...)
rules=[
    Rule.sagemaker(rule_configs.built_in_rule()),
    ProfilerRule.sagemaker(rule_configs.BuiltInRule())
]

estimator=TensorFlow(
    entry_point="directory/to/your_training_script.py",
    role=sagemaker.get_execution_role(),
    base_job_name="debugger-demo",
    instance_count=1,
    instance_type="ml.p3.2xlarge",
    framework_version="2.9.0",
    py_version="py39",
    
    # Debugger-specific parameters
    debugger_hook_config=debugger_hook_config,
    rules=rules
)

estimator.fit(wait=False)
```

------
#### [ MXNet ]

```
# An example of constructing a SageMaker AI MXNet estimator
import sagemaker
from sagemaker.mxnet import MXNet
from sagemaker.debugger import CollectionConfig, DebuggerHookConfig, Rule, rule_configs

debugger_hook_config=DebuggerHookConfig(...)
rules=[
    Rule.sagemaker(rule_configs.built_in_rule())
]

estimator=MXNet(
    entry_point="directory/to/your_training_script.py",
    role=sagemaker.get_execution_role(),
    base_job_name="debugger-demo",
    instance_count=1,
    instance_type="ml.p3.2xlarge",
    framework_version="1.7.0",
    py_version="py37",
    
    # Debugger-specific parameters
    debugger_hook_config=debugger_hook_config,
    rules=rules
)

estimator.fit(wait=False)
```

------
#### [ XGBoost ]

```
# An example of constructing a SageMaker AI XGBoost estimator
import sagemaker
from sagemaker.xgboost.estimator import XGBoost
from sagemaker.debugger import CollectionConfig, DebuggerHookConfig, Rule, rule_configs

debugger_hook_config=DebuggerHookConfig(...)
rules=[
    Rule.sagemaker(rule_configs.built_in_rule())
]

estimator=XGBoost(
    entry_point="directory/to/your_training_script.py",
    role=sagemaker.get_execution_role(),
    base_job_name="debugger-demo",
    instance_count=1,
    instance_type="ml.p3.2xlarge",
    framework_version="1.5-1",

    # Debugger-specific parameters
    debugger_hook_config=debugger_hook_config,
    rules=rules
)

estimator.fit(wait=False)
```

------
#### [ Generic estimator ]

```
# An example of constructing a SageMaker AI generic estimator using the XGBoost algorithm base image
import boto3
import sagemaker
from sagemaker.estimator import Estimator
from sagemaker import image_uris
from sagemaker.debugger import CollectionConfig, DebuggerHookConfig, Rule, rule_configs

debugger_hook_config=DebuggerHookConfig(...)
rules=[
    Rule.sagemaker(rule_configs.built_in_rule())
]

region=boto3.Session().region_name
xgboost_container=sagemaker.image_uris.retrieve("xgboost", region, "1.5-1")

estimator=Estimator(
    role=sagemaker.get_execution_role()
    image_uri=xgboost_container,
    base_job_name="debugger-demo",
    instance_count=1,
    instance_type="ml.m5.2xlarge",
    
    # Debugger-specific parameters
    debugger_hook_config=debugger_hook_config,
    rules=rules
)

estimator.fit(wait=False)
```

------

SageMaker Debugger を起動するには、以下のパラメータを設定します。
+ `debugger_hook_config` ([https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html#sagemaker.debugger.DebuggerHookConfig](https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html#sagemaker.debugger.DebuggerHookConfig) のオブジェクト) — [フックを登録するためにトレーニングスクリプトを適応させる](debugger-modify-script.md) の間に適応されたトレーニングスクリプトでフックを有効にするために必要で、トレーニングジョブから出力テンソルを収集し、保護された S3 バケットまたはローカルマシンにテンソルを保存するように SageMaker トレーニングランチャー (推定器) を設定します。`debugger_hook_config` パラメータの設定方法については、「[テンソルを保存するように SageMaker Debugger を設定する](debugger-configure-hook.md)」を参照してください。
+ `rules` ([https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html#sagemaker.debugger.Rule](https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html#sagemaker.debugger.Rule) オブジェクトのリスト) - リアルタイムで実行する SageMaker Debugger の組み込みルールをアクティブ化するには、このパラメータを設定します。組み込みルールは、セキュアな S3 バケットに保存されている出力テンソルを分析することで、モデルのトレーニングの進行状況を自動的にデバッグし、トレーニングの問題を検出するロジックです。`rules` パラメータの設定方法については、「[Debugger の組み込みルールの設定方法](use-debugger-built-in-rules.md)」を参照してください。出力テンソルをデバッグするための組み込みルールの完全なリストについては、「[デバッガールール](debugger-built-in-rules.md#debugger-built-in-rules-Rule)」を参照してください。トレーニングの問題を検出する独自のロジックを作成したい場合は、「[Debugger クライアントライブラリを使用してカスタムルールを作成する](debugger-custom-rules.md)」を参照してください。
**注記**  
組み込みルールは、SageMaker トレーニングインスタンスでのみ使用できます。ローカルモードでは使用できません。
+ `tensorboard_output_config` ([https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html#sagemaker.debugger.TensorBoardOutputConfig](https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html#sagemaker.debugger.TensorBoardOutputConfig) のオブジェクト) — TensorBoard 互換フォーマットの出力テンソルを収集し、`TensorBoardOutputConfig` オブジェクトで指定されている S3 出力パスに保存するように SageMaker Debugger を設定します。詳細については[TensorBoard で Amazon SageMaker Debugger 出力テンソルを視覚化する](debugger-enable-tensorboard-summaries.md)を参照してください。
**注記**  
`tensorboard_output_config` は `debugger_hook_config` パラメータを使用して設定する必要があります。そのためには、`sagemaker-debugger` フックを追加してトレーニングスクリプトを調整する必要もあります。

**注記**  
SageMaker Debugger は、出力テンソルを S3 バケットのサブフォルダに安全に保存します。例えば、アカウントのデフォルトの S3 バケット URI の形式は、`s3://amzn-s3-demo-bucket-sagemaker-<region>-<12digit_account_id>/<base-job-name>/<debugger-subfolders>/` です。SageMaker Debugger によって作成されるサブフォルダは、`debug-output` および `rule-output` の 2 つです。`tensorboard_output_config` パラメータを追加すると、`tensorboard-output` フォルダも表示されます。

Debugger 固有パラメータの詳細な設定方法については、次のトピックを参照してください。

**Topics**
+ [Debugger 固有のパラメータを使用した SageMaker AI 推定器をコンストラクトする](#debugger-configuration-structure)
+ [テンソルを保存するように SageMaker Debugger を設定する](debugger-configure-hook.md)
+ [Debugger の組み込みルールの設定方法](use-debugger-built-in-rules.md)
+ [Debugger をオフにする](debugger-turn-off.md)
+ [Debugger 用の便利な SageMaker AI 推定器クラスメソッド](debugger-estimator-classmethods.md)

# テンソルを保存するように SageMaker Debugger を設定する
<a name="debugger-configure-hook"></a>

テンソルは、各トレーニングの反復のバックワードパスとフォワードパスから更新されたパラメータのデータコレクションです。SageMaker Debugger は出力テンソルを収集してトレーニングジョブの状態を分析します。SageMaker Debugger の [https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html#sagemaker.debugger.CollectionConfig](https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html#sagemaker.debugger.CollectionConfig) および [https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html#sagemaker.debugger.DebuggerHookConfig](https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html#sagemaker.debugger.DebuggerHookConfig) API オペレーションは、テンソルをコレクションにグループ化し、ターゲット S3 バケットに保存するメソッドを提供します。次のトピックでは、`CollectionConfig` および `DebuggerHookConfig` API オペレーションを使用する方法を説明した後、Debugger フックを使用して出力テンソルを保存、アクセス、視覚化する方法の例を紹介します。

SageMaker AI 推定器をコンストラクトする際、`debugger_hook_config` パラメータを指定して SageMaker Debugger を有効にします。次のトピックでは、`CollectionConfig` および `DebuggerHookConfig` API オペレーションを使って `debugger_hook_config` を設定し、トレーニングジョブからテンソルを取り出して保存する例を紹介します。

**注記**  
適切に設定して有効化されると、SageMaker Debugger は、特に指定がない限り、出力テンソルをデフォルトの S3 バケットに保存します。デフォルトの S3 バケット URI の形式は、`s3://amzn-s3-demo-bucket-sagemaker-<region>-<12digit_account_id>/<training-job-name>/debug-output/` です。

**Topics**
+ [`CollectionConfig` API を使用してテンソルコレクションを設定する](debugger-configure-tensor-collections.md)
+ [テンソルを保存するように `DebuggerHookConfig` API を設定する](debugger-configure-tensor-hook.md)
+ [Debugger フックを設定するためのサンプルノートブックとコードサンプル](debugger-save-tensors.md)

# `CollectionConfig` API を使用してテンソルコレクションを設定する
<a name="debugger-configure-tensor-collections"></a>

`CollectionConfig` API オペレーションを使ってテンソルコレクションを設定します。デバッガーは、デバッガーがサポートする深層学習フレームワークと機械学習アルゴリズムを使用している場合、パラメータのさまざまな正規表現 (regex) をカバーする構築済みのテンソルコレクションを提供します。次のサンプルコードに示すように、デバッグする組み込みテンソルコレクションを追加します。

```
from sagemaker.debugger import CollectionConfig

collection_configs=[
    CollectionConfig(name="weights"),
    CollectionConfig(name="gradients")
]
```

上記のコレクションは、デフォルトの `"save_interval"` 値に基づいて 500 ステップごとにテンソルを保存するようにデバッガーフックを設定します。

利用可能なデバッガーの組み込みコレクションの完全なリストについては、「[デバッガー組み込みコレクション](https://github.com/awslabs/sagemaker-debugger/blob/master/docs/api.md#collection)」を参照してください。

保存間隔やテンソル正規表現の変更など、組み込みコレクションをカスタマイズする場合は、次の `CollectionConfig` テンプレートを使用してパラメータを調整します。

```
from sagemaker.debugger import CollectionConfig

collection_configs=[
    CollectionConfig(
        name="tensor_collection",
        parameters={
            "key_1": "value_1",
            "key_2": "value_2",
            ...
            "key_n": "value_n"
        }
    )
]
```

使用可能なパラメータキーの詳細については、[Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) の「[CollectionConfig](https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html#sagemaker.debugger.CollectionConfig)」を参照してください。例えば、次のコード例は、トレーニングのさまざまなフェーズで「損失」テンソルコレクションの保存間隔を調整する方法を示しています。トレーニングフェーズでは 100 ステップごとに損失を保存し、検証フェーズでは 10 ステップごとに検証損失を保存します。

```
from sagemaker.debugger import CollectionConfig

collection_configs=[
    CollectionConfig(
        name="losses",
        parameters={
            "train.save_interval": "100",
            "eval.save_interval": "10"
        }
    )
]
```

**ヒント**  
このテンソルコレクション設定オブジェクトは、[DebuggerHookConfig](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-configure-hook.html#debugger-configure-tensor-hook) API オペレーションと [Rule](https://docs.aws.amazon.com/sagemaker/latest/dg/use-debugger-built-in-rules.html#debugger-built-in-rules-configuration-param-change) API オペレーションの両方に使用できます。

# テンソルを保存するように `DebuggerHookConfig` API を設定する
<a name="debugger-configure-tensor-hook"></a>

[DebuggerHookConfig](https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html                 #sagemaker.debugger.DebuggerHookConfig) API を使用して、前のステップで作成した `collection_configs` オブジェクトを使用し `debugger_hook_config` オブジェクトを作成します。

```
from sagemaker.debugger import DebuggerHookConfig

debugger_hook_config=DebuggerHookConfig(
    collection_configs=collection_configs
)
```

デバッガーは、モデルトレーニング出力テンソルをデフォルトの S3 バケットに保存します。デフォルトの S3 バケット URI の形式は、`s3://amzn-s3-demo-bucket-sagemaker-<region>-<12digit_account_id>/<training-job-name>/debug-output/.` です。

S3 バケット URI を厳密に指定する場合は、次のコード例を使用してください。

```
from sagemaker.debugger import DebuggerHookConfig

debugger_hook_config=DebuggerHookConfig(
    s3_output_path="specify-uri"
    collection_configs=collection_configs
)
```

詳細については、[Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) の「[DebuggerHookConfig](https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html#sagemaker.debugger.DebuggerHookConfig)」を参照してください。

# Debugger フックを設定するためのサンプルノートブックとコードサンプル
<a name="debugger-save-tensors"></a>

次のセクションでは、デバッガーフックを使って出力テンソルを保存、アクセス、視覚化する方法のノートブックとコード例を示しています。

**Topics**
+ [テンソル可視化のサンプルノートブック](#debugger-tensor-visualization-notebooks)
+ [Debugger の組み込みコレクションを使ってテンソルを保存する](#debugger-save-built-in-collections)
+ [Debugger の組み込みコレクションを変更してテンソルを保存する](#debugger-save-modified-built-in-collections)
+ [Debugger のカスタムコレクションを使ってテンソルを保存する](#debugger-save-custom-collections)

## テンソル可視化のサンプルノートブック
<a name="debugger-tensor-visualization-notebooks"></a>

次の 2 つのノートブックの例は、テンソルを視覚化するための Amazon SageMaker の高度な使用法を示しています。デバッガーは、深層学習モデルのトレーニングを透過的に表示します。
+ [Interactive Tensor Analysis in SageMaker Studio Notebook with MXNet](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/sagemaker-debugger/mnist_tensor_analysis)

  このノートブックの例では、Amazon SageMaker デバッガーを使って保存されたテンソルを視覚化する方法を紹介します。テンソルを視覚化することで、深層学習アルゴリズムのトレーニング中にテンソル値がどのように変化するかが見えます。このノートブックには設定が不十分なニューラルネットワークのトレーニングジョブが含まれており、Amazon SageMaker Debugger を使用してテンソル (勾配、活性化関数の出力、重みを含む) を集計および分析します。たとえば、次の図は、勾配消失の問題が発生している畳み込みレイヤーの勾配の分布を示しています。  
![\[勾配の分布をプロットしたグラフ。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-vanishing-gradient.gif)

  また、このノートブックは、ハイパーパラメータを最初から適切に設定することにより、同じテンソルの分布図を作成してトレーニングプロセスが改善されることを示しています。
+ [MXNet モデルトレーニングからのテンソルの可視化とデバッグ](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/sagemaker-debugger/mnist_tensor_plot)

   このノートブックの例では、Amazon SageMaker デバッガーを使って MXNet Gluon モデルのトレーニングジョブからテンソルを保存して視覚化する方法を紹介します。これは、デバッガーがすべてのテンソルを Amazon S3 バケットに保存し、視覚化のために ReLU 活性化関数の出力を取得するように設定されていることを示しています。次の図は、ReLu 活性化関数の出力の 3 次元視覚化を示しています。カラースキームは、0 に近い値を示す青色と 1 に近い値を示す黄色に設定されています。  
![\[ReLU 活性化関数の出力の視覚化\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/tensorplot.gif)

  このノートブックでは、`tensor_plot.py` からインポートされた `TensorPlot` クラスは、2 次元画像を入力とする畳み込みニューラルネットワーク (CNN) をプロットするように設計されています。このノートブックの `tensor_plot.py` スクリプトは、デバッガーを使ってテンソルを取得し、CNN を視覚化します。このノートブックを SageMaker Studio で実行して、テンソルの視覚化を再現し、独自の畳み込みニューラルネットワークモデルを実装できます。
+ [MXNet を使用した SageMaker ノートブックでのリアルタイムテンソル分析](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/sagemaker-debugger/mxnet_realtime_analysis)

  この例では、Amazon SageMaker トレーニングジョブでテンソルを出力するために必要なコンポーネントをインストールし、デバッガー API オペレーションを使ってトレーニングの実行中にこれらのテンソルにアクセスする方法をガイドします。gluon の CNN モデルは、Fashion MNIST データセットでトレーニングされます。ジョブの実行中に、デバッガーが 100 個のバッチそれぞれから最初の畳み込みレイヤーの活性化関数の出力を取得して視覚化する方法を確認できます。また、ジョブの終了後に重みを視覚化する方法も表示されます。

## Debugger の組み込みコレクションを使ってテンソルを保存する
<a name="debugger-save-built-in-collections"></a>

`CollectionConfig` API を使ってテンソルの組み込みコレクションを使用し、`DebuggerHookConfig` API を使って保存できます。次の例は、デバッガーフック設定のデフォルト設定を使用して SageMaker AI TensorFlow 推定器を構築する方法を示しています。これは、MXNet、PyTorch、XGBoost 推定器にも利用できます。

**注記**  
次のサンプルコードでは、`DebuggerHookConfig` の `s3_output_path` パラメータはオプションです。指定しない場合、デバッガーはテンソルを `s3://<output_path>/debug-output/` に保存します。ここで、`<output_path>` は SageMaker トレーニングジョブのデフォルトの出力パスです。例:  

```
"s3://sagemaker-us-east-1-111122223333/sagemaker-debugger-training-YYYY-MM-DD-HH-MM-SS-123/debug-output"
```

```
import sagemaker
from sagemaker.tensorflow import TensorFlow
from sagemaker.debugger import DebuggerHookConfig, CollectionConfig

# use Debugger CollectionConfig to call built-in collections
collection_configs=[
        CollectionConfig(name="weights"),
        CollectionConfig(name="gradients"),
        CollectionConfig(name="losses"),
        CollectionConfig(name="biases")
    ]

# configure Debugger hook
# set a target S3 bucket as you want
sagemaker_session=sagemaker.Session()
BUCKET_NAME=sagemaker_session.default_bucket()
LOCATION_IN_BUCKET='debugger-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),
    collection_configs=collection_configs
)

# construct a SageMaker TensorFlow estimator
sagemaker_estimator=TensorFlow(
    entry_point='directory/to/your_training_script.py',
    role=sm.get_execution_role(),
    base_job_name='debugger-demo-job',
    instance_count=1,
    instance_type="ml.p3.2xlarge",
    framework_version="2.9.0",
    py_version="py39",
    
    # debugger-specific hook argument below
    debugger_hook_config=hook_config
)

sagemaker_estimator.fit()
```

デバッガーの組み込みコレクションのリストを見るには、「[デバッガー組み込みコレクション](https://github.com/awslabs/sagemaker-debugger/blob/master/docs/api.md#collection)」を参照してください。

## Debugger の組み込みコレクションを変更してテンソルを保存する
<a name="debugger-save-modified-built-in-collections"></a>

デバッガーの組み込みコレクションは、`CollectionConfig` API オペレーションを使って変更できます。次の例は、組み込みの `losses` コレクションを微調整し、SageMaker AI TensorFlow 推定器を構築する方法を示しています。これは、MXNet、PyTorch、XGBoost 推定器にも使用できます。

```
import sagemaker
from sagemaker.tensorflow import TensorFlow
from sagemaker.debugger import DebuggerHookConfig, CollectionConfig

# use Debugger CollectionConfig to call and modify built-in collections
collection_configs=[
    CollectionConfig(
                name="losses", 
                parameters={"save_interval": "50"})]

# configure Debugger hook
# set a target S3 bucket as you want
sagemaker_session=sagemaker.Session()
BUCKET_NAME=sagemaker_session.default_bucket()
LOCATION_IN_BUCKET='debugger-modified-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),
    collection_configs=collection_configs
)

# construct a SageMaker TensorFlow estimator
sagemaker_estimator=TensorFlow(
    entry_point='directory/to/your_training_script.py',
    role=sm.get_execution_role(),
    base_job_name='debugger-demo-job',
    instance_count=1,
    instance_type="ml.p3.2xlarge",
    framework_version="2.9.0",
    py_version="py39",
    
    # debugger-specific hook argument below
    debugger_hook_config=hook_config
)

sagemaker_estimator.fit()
```

`CollectionConfig` パラメータの完全なリストについては、「[デバッガーの CollectionConfig API](https://github.com/awslabs/sagemaker-debugger/blob/master/docs/api.md#configuring-collection-using-sagemaker-python-sdk)」を参照してください。

## Debugger のカスタムコレクションを使ってテンソルを保存する
<a name="debugger-save-custom-collections"></a>

Amazon S3 バケットに保存するデータ量を削減したい場合などは、すべてのテンソルを保存するのではなく、テンソルの保存数を減らすこともできます。次の例は、デバッガーフック設定をカスタマイズして、保存するターゲットテンソルを指定する方法を示しています。これは、TensorFlow、MXNet、PyTorch、XGBoost 推定器に使用できます。

```
import sagemaker
from sagemaker.tensorflow import TensorFlow
from sagemaker.debugger import DebuggerHookConfig, CollectionConfig

# use Debugger CollectionConfig to create a custom collection
collection_configs=[
        CollectionConfig(
            name="custom_activations_collection",
            parameters={
                "include_regex": "relu|tanh", # Required
                "reductions": "mean,variance,max,abs_mean,abs_variance,abs_max"
            })
    ]
    
# configure Debugger hook
# set a target S3 bucket as you want
sagemaker_session=sagemaker.Session()
BUCKET_NAME=sagemaker_session.default_bucket()
LOCATION_IN_BUCKET='debugger-custom-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),
    collection_configs=collection_configs
)

# construct a SageMaker TensorFlow estimator
sagemaker_estimator=TensorFlow(
    entry_point='directory/to/your_training_script.py',
    role=sm.get_execution_role(),
    base_job_name='debugger-demo-job',
    instance_count=1,
    instance_type="ml.p3.2xlarge",
    framework_version="2.9.0",
    py_version="py39",
    
    # debugger-specific hook argument below
    debugger_hook_config=hook_config
)

sagemaker_estimator.fit()
```

`CollectionConfig` パラメータの完全なリストについては、「[デバッガーの CollectionConfig](https://github.com/awslabs/sagemaker-debugger/blob/master/docs/api.md#configuring-collection-using-sagemaker-python-sdk)」を参照してください。

# Debugger の組み込みルールの設定方法
<a name="use-debugger-built-in-rules"></a>

次のトピックでは、SageMaker Debugger の組み込みルールの使用方法を学習します。Amazon SageMaker Debugger のルールは、モデルのトレーニング中に出力されたテンソルを分析します。SageMaker AI Debugger は、モデルのトレーニングを成功させるためのトレーニングジョブの進行状況とエラーをモニタリングする `Rule` API オペレーションを提供します。例えば、ルールによって、勾配が大きすぎたり小さすぎたりしていないか、モデルがオーバーフィットまたはオーバートレーニングになっていないか、トレーニングジョブが損失関数を減少させず改善していないかを検出できます。使用可能な組み込みルールの完全なリストを表示するには、「[デバッガーの組み込みルールのリスト](debugger-built-in-rules.md)」を参照してください。

**Topics**
+ [Debugger の組み込みルールをデフォルトのパラメータ設定で使用する](debugger-built-in-rules-configuration.md)
+ [Debugger の組み込みルールをカスタムパラメータ値で使用する](debugger-built-in-rules-configuration-param-change.md)
+ [Debugger ルールを設定するためのサンプルノートブックとコードサンプル](debugger-built-in-rules-example.md)

# Debugger の組み込みルールをデフォルトのパラメータ設定で使用する
<a name="debugger-built-in-rules-configuration"></a>

デバッガーの組み込みルールを推定器の中で指定するには、 リストオブジェクトを設定する必要があります。次のサンプルコードは、デバッガーの組み込みルールをリストする基本構造を示しています。

```
from sagemaker.debugger import Rule, rule_configs

rules=[
    Rule.sagemaker(rule_configs.built_in_rule_name_1()),
    Rule.sagemaker(rule_configs.built_in_rule_name_2()),
    ...
    Rule.sagemaker(rule_configs.built_in_rule_name_n()),
    ... # You can also append more profiler rules in the ProfilerRule.sagemaker(rule_configs.*()) format.
]
```

デフォルトパラメータ値と組み込みルールの説明の詳細については、「[デバッガーの組み込みルールのリスト](debugger-built-in-rules.md)」を参照してください。

SageMaker Debugger API リファレンスを見つけるには、「[https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html#sagemaker.debugger.sagemaker.debugger.rule_configs](https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html#sagemaker.debugger.sagemaker.debugger.rule_configs)」と「[https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html#sagemaker.debugger.Rule](https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html#sagemaker.debugger.Rule)」を参照してください。

例えば、モデルの全体的なトレーニングパフォーマンスと進行状況を検査するには、次の組み込みルール設定を持つ SageMaker AI 推定器を構築します。

```
from sagemaker.debugger import Rule, rule_configs

rules=[
    Rule.sagemaker(rule_configs.loss_not_decreasing()),
    Rule.sagemaker(rule_configs.overfit()),
    Rule.sagemaker(rule_configs.overtraining()),
    Rule.sagemaker(rule_configs.stalled_training_rule())
]
```

トレーニングジョブを開始すると、デバッガーはデフォルトで 500 ミリ秒ごとにシステムリソース使用率データを収集し、500 ステップごとに損失と精度の値を収集します。デバッガーは、リソース使用率を分析して、モデルにボトルネックの問題があるかどうかを特定します。`loss_not_decreasing`、`overfit`、`overtraining`、`stalled_training_rule` は、モデルがこれらのトレーニングの問題を伴わずに損失関数を最適化しているかどうかをモニタリングします。ルールがトレーニングの異常を検出すると、ルールの評価ステータスが `IssueFound` に変わります。Amazon CloudWatch Events と AWS Lambdaを使用して、トレーニングの問題の通知やトレーニングジョブの停止などの自動アクションを設定できます。詳細については、「[Amazon SageMaker Debugger ルールに基づくアクション](debugger-action-on-rules.md)」を参照してください。



# Debugger の組み込みルールをカスタムパラメータ値で使用する
<a name="debugger-built-in-rules-configuration-param-change"></a>

組み込みルールのパラメータ値を調整し、テンソルコレクションの正規表現をカスタマイズする場合は、`ProfilerRule.sagemaker` および `Rule.sagemaker` クラスメソッドの `base_config` および `rule_parameters` パラメータを設定します。`Rule.sagemaker` クラスメソッドの場合、`collections_to_save` パラメータを使用してテンソルコレクションをカスタマイズすることもできます。`CollectionConfig` クラスの使用方法については、「[`CollectionConfig` API を使用してテンソルコレクションを設定する](debugger-configure-tensor-collections.md)」を参照してください 。

パラメータ値をカスタマイズするには、組み込みルールに次の設定テンプレートを使用します。好きなようにルールパラメータを変更することで、トリガーされるルールの感度を調整できます。
+ `base_config` 引数は、組み込みルールメソッドを呼び出す場所です。
+ `rule_parameters` 引数は、[デバッガーの組み込みルールのリスト](debugger-built-in-rules.md) にリストされている組み込みルールのデフォルトのキーバリューを調整するためのものです。
+ `collections_to_save` 引数は、`CollectionConfig` API を介してテンソル設定を取り込むもので、`name` および `parameters` 引数が必要です。
  + `name` に利用可能なテンソルコレクションを見つけるには、「[デバッガーの組み込みテンソルコレクション](https://github.com/awslabs/sagemaker-debugger/blob/master/docs/api.md#built-in-collections)」を参照してください。
  + 調整可能な `parameters` の完全なリストについては、「[デバッガーの CollectionConfig API](https://github.com/awslabs/sagemaker-debugger/blob/master/docs/api.md#configuring-collection-using-sagemaker-python-sdk)」を参照してください。

デバッガールールクラス、メソッド、パラメータの詳細については、[Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) の「[SageMaker AI Debugger Rule class](https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html)」を参照してください。

```
from sagemaker.debugger import Rule, ProfilerRule, rule_configs, CollectionConfig

rules=[
    Rule.sagemaker(
        base_config=rule_configs.built_in_rule_name(),
        rule_parameters={
                "key": "value"
        },
        collections_to_save=[ 
            CollectionConfig(
                name="tensor_collection_name", 
                parameters={
                    "key": "value"
                } 
            )
        ]
    )
]
```

各ルールのパラメータの説明と値のカスタマイズ例については、「[デバッガーの組み込みルールのリスト](debugger-built-in-rules.md)」を参照してください。

# Debugger ルールを設定するためのサンプルノートブックとコードサンプル
<a name="debugger-built-in-rules-example"></a>

次のセクションでは、デバッガールールを使って SageMaker トレーニングジョブをモニタリングする方法のノートブックとコードの例について説明します。

**Topics**
+ [Debugger の組み込みルールのサンプルノートブック](#debugger-built-in-rules-notebook-example)
+ [Debugger の組み込みルールのサンプルコード](#debugger-deploy-built-in-rules)
+ [パラメータ変更で Debugger の組み込みルールを使用する](#debugger-deploy-modified-built-in-rules)

## Debugger の組み込みルールのサンプルノートブック
<a name="debugger-built-in-rules-notebook-example"></a>

次のサンプルノートブックは、Amazon SageMaker AI でトレーニングジョブを実行するときに、デバッガーの組み込みルールを使う方法を示しています。
+ [TensorFlow で SageMaker デバッガーの組み込みルールを使用する](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/sagemaker-debugger/tensorflow_builtin_rule)
+ [マネージド型スポットトレーニングと MXNet で SageMaker デバッガーの組み込みルールを使用する](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/sagemaker-debugger/mxnet_spot_training)
+ [XGBoost を使用したリアルタイムトレーニングジョブ分析にパラメータ変更をした SageMaker デバッガーの組み込みルールを使用する](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/sagemaker-debugger/xgboost_realtime_analysis)

SageMaker Studio でサンプルノートブックを実行中、作成されたトレーニングジョブのトライアルは **[Studio Experiment List]** (Studio 実験リスト) タブで見つけることができます。例えば、次のスクリーンショットに示すように、現在のトレーニングジョブの **[Describe Trial Component]** (トライアルコンポーネントの説明) ウィンドウを見つけて開くことができます。[Debugger] (デバッガー) タブでは、デバッガールール `vanishing_gradient()` と `loss_not_decreasing()` が並列でトレーニングセッションをモニタリングしているかどうかをチェックできます。Studio UI でトレーニングジョブのトライアルコンポーネントを見つける方法の詳細については、「[SageMaker Studio - 実験、トライアル、トライアルコンポーネントを表示する](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-tasks.html#studio-tasks-experiments)」を参照してください。

![\[SageMaker Studio でアクティブ化されたデバッガーの組み込みルールを使ってトレーニングジョブを実行するイメージ\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-built-in-rule-studio.png)


SageMaker AI 環境でデバッガーの組み込みルールを使うには、用意されたままの組み込みルールをデプロイする方法と、好きなようにパラメータを調整する方法の 2 つがあります。次のトピックでは、組み込みルールの使用方法をサンプルコードで示します。

## Debugger の組み込みルールのサンプルコード
<a name="debugger-deploy-built-in-rules"></a>

次のコードサンプルは、`Rule.sagemaker` メソッドを使用してデバッガーの組み込みルールを設定する方法を示しています。実行する組み込みルールを指定するには、`rules_configs` API オペレーションを使用して組み込みルールを呼び出します。デバッガーの組み込みルールとデフォルトのパラメータ値の完全なリストについては、「[デバッガーの組み込みルールのリスト](debugger-built-in-rules.md)」を参照してください。

```
import sagemaker
from sagemaker.tensorflow import TensorFlow
from sagemaker.debugger import Rule, CollectionConfig, rule_configs

# call built-in rules that you want to use.
built_in_rules=[ 
            Rule.sagemaker(rule_configs.vanishing_gradient())
            Rule.sagemaker(rule_configs.loss_not_decreasing())
]

# construct a SageMaker AI estimator with the Debugger built-in rules
sagemaker_estimator=TensorFlow(
    entry_point='directory/to/your_training_script.py',
    role=sm.get_execution_role(),
    base_job_name='debugger-built-in-rules-demo',
    instance_count=1,
    instance_type="ml.p3.2xlarge",
    framework_version="2.9.0",
    py_version="py39",

    # debugger-specific arguments below
    rules=built_in_rules
)
sagemaker_estimator.fit()
```

**注記**  
デバッガーの組み込みルールは、トレーニングジョブと並列で実行されます。1 つのトレーニングジョブに対する組み込みルールコンテナの最大数は 20 です。

デバッガールールクラス、メソッド、パラメータの詳細については、[Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html) の「[SageMaker デバッガールールクラス](https://sagemaker.readthedocs.io/en/stable)」を参照してください。

デバッガールールパラメータの調整方法の例については、次の「[パラメータ変更で Debugger の組み込みルールを使用する](#debugger-deploy-modified-built-in-rules)」セクションを参照してください。

## パラメータ変更で Debugger の組み込みルールを使用する
<a name="debugger-deploy-modified-built-in-rules"></a>

次のコード例は、パラメータを調整するための組み込みルールの構造を示しています。この例では、`stalled_training_rule` は、50 ステップごとにトレーニングジョブから、10 ステップごとに評価ステージから `losses` テンソルコレクションを収集します。トレーニングプロセスが停滞し始め、テンソル出力を 120 秒間収集しない場合、`stalled_training_rule` はトレーニングジョブを停止します。

```
import sagemaker
from sagemaker.tensorflow import TensorFlow
from sagemaker.debugger import Rule, CollectionConfig, rule_configs

# call the built-in rules and modify the CollectionConfig parameters

base_job_name_prefix= 'smdebug-stalled-demo-' + str(int(time.time()))

built_in_rules_modified=[
    Rule.sagemaker(
        base_config=rule_configs.stalled_training_rule(),
        rule_parameters={
                'threshold': '120',
                'training_job_name_prefix': base_job_name_prefix,
                'stop_training_on_fire' : 'True'
        }
        collections_to_save=[ 
            CollectionConfig(
                name="losses", 
                parameters={
                      "train.save_interval": "50"
                      "eval.save_interval": "10"
                } 
            )
        ]
    )
]

# construct a SageMaker AI estimator with the modified Debugger built-in rule
sagemaker_estimator=TensorFlow(
    entry_point='directory/to/your_training_script.py',
    role=sm.get_execution_role(),
    base_job_name=base_job_name_prefix,
    instance_count=1,
    instance_type="ml.p3.2xlarge",
    framework_version="2.9.0",
    py_version="py39",

    # debugger-specific arguments below
    rules=built_in_rules_modified
)
sagemaker_estimator.fit()
```

`CreateTrainingJob` API を使用したデバッガーの組み込みルールの高度な設定については、「[SageMaker API を使って Debugger を設定する](debugger-createtrainingjob-api.md)」を参照してください。

# Debugger をオフにする
<a name="debugger-turn-off"></a>

デバッガーを完全にオフにするには、次のいずれかの操作を行います。
+ トレーニングジョブを始める前に、以下を実行します。

  モニタリングとプロファイリングの両方を停止するには、`disable_profiler` パラメータを推定器に含め、`True` に設定します。
**警告**  
無効にすると、包括的な Studio デバッガーインサイトダッシュボードと自動生成されたプロファイリングレポートを表示できなくなります。

  デバッグを停止するには、`debugger_hook_config` パラメータを `False` に設定します。
**警告**  
無効にすると、出力テンソルの収集ができなくなり、モデルパラメータをデバッグできなくなります。

  ```
  estimator=Estimator(
      ...
      disable_profiler=True
      debugger_hook_config=False
  )
  ```

  デバッガー固有パラメータの詳細については、[Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) の [SageMaker AI 推定器](https://sagemaker.readthedocs.io/en/stable/api/training/estimators.html#sagemaker.estimator.Estimator)を参照してください。
+ トレーニングジョブの実行中に、以下を実行します。

  トレーニングジョブの実行中にモニタリングとプロファイリングの両方を無効にするには、次の推定器クラスメソッドを使用します。

  ```
  estimator.disable_profiling()
  ```

  フレームワークプロファイリングのみを無効にし、システムモニタリングを維持するには、`update_profiler` メソッドを使用します。

  ```
  estimator.update_profiler(disable_framework_metrics=true)
  ```

  推定器拡張メソッドの詳細については、[Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) ドキュメントにある[estimator.disable\$1profiling](https://sagemaker.readthedocs.io/en/stable/api/training/estimators.html#sagemaker.estimator.Estimator.disable_profiling)と[estimator.update\$1profiler](https://sagemaker.readthedocs.io/en/stable/api/training/estimators.html#sagemaker.estimator.Estimator.update_profiler) クラスメソッドを参照してください。

# Debugger 用の便利な SageMaker AI 推定器クラスメソッド
<a name="debugger-estimator-classmethods"></a>

次の推定器クラスメソッドは、SageMaker トレーニングジョブ情報にアクセスし、デバッガーによって収集されたトレーニングデータの出力パスを取得するのに便利です。次のメソッドは、`estimator.fit()` メソッドを使ってトレーニングジョブを開始した後に実行可能です。
+ SageMaker トレーニングジョブの基本の S3 バケット URI をチェックするには:

  ```
  estimator.output_path
  ```
+ SageMaker トレーニングジョブの基本のジョブ名をチェックするには:

  ```
  estimator.latest_training_job.job_name
  ```
+ SageMaker トレーニングジョブの完全な `CreateTrainingJob` API オペレーション設定を表示するには:

  ```
  estimator.latest_training_job.describe()
  ```
+ SageMaker トレーニングジョブの実行中にデバッガールールの完全なリストをチェックするには:

  ```
  estimator.latest_training_job.rule_job_summary()
  ```
+ モデルパラメータデータ (出力テンソル) が保存されている S3 バケット URI をチェックするには:

  ```
  estimator.latest_job_debugger_artifacts_path()
  ```
+ モデルパフォーマンスデータ (システムおよびフレームワークのメトリクス) が保存されている S3 バケット URI をチェックするには:

  ```
  estimator.latest_job_profiler_artifacts_path()
  ```
+ 出力テンソルをデバッグするためのデバッガーのルール設定をチェックするには:

  ```
  estimator.debugger_rule_configs
  ```
+ SageMaker トレーニングジョブの実行中にデバッグするためのデバッガールールのリストをチェックするには:

  ```
  estimator.debugger_rules
  ```
+ システムとフレームワークのメトリクスをモニタリングおよびプロファイリングするためのデバッガーのルール設定をチェックするには:

  ```
  estimator.profiler_rule_configs
  ```
+ SageMaker トレーニングジョブの実行中にモニタリングとプロファイリングのためのデバッガールールのリストをチェックするには:

  ```
  estimator.profiler_rules
  ```

SageMaker AI 推定器クラスとそのメソッドの詳細については、[Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) の[推定器 API](https://sagemaker.readthedocs.io/en/stable/api/training/estimators.html#sagemaker.estimator.Estimator) を参照してください。

# XGBoost の SageMaker Debugger インタラクティブレポート
<a name="debugger-report-xgboost"></a>

Debugger によって自動生成されたトレーニングレポートを受け取ります。デバッガーレポートは、トレーニングジョブに関するインサイトを提供し、モデルのパフォーマンスを向上させるための推奨事項を提案します。SageMaker AI XGBoost トレーニングジョブでは、デバッガー [CreateXGBoostReport](debugger-built-in-rules.md#create-xgboost-report) ルールを使って、トレーニングの進捗と結果の包括的なトレーニングレポートを受け取ります。このガイドに従って、XGBoost 推定器の構築中に [CreateXGBoostReport](debugger-built-in-rules.md#create-xgboost-report) ルールを指定し、[Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) または Amazon S3 コンソールを使用してレポートをダウンロードし、トレーニング結果に関するインサイトを得ることができます。

**注記**  
デバッガーレポートは、トレーニングジョブの実行中またはジョブの終了後にダウンロードできます。トレーニング中、デバッガーは現在のルールの評価ステータスを反映したレポートを同時に更新します。完全なデバッガーレポートは、トレーニングジョブが完了した後にのみダウンロードできます。

**重要**  
このレポートのプロットと推奨事項は、情報提供を目的としており、最終的な決定事項ではありません。お客様は、情報を独自に評価する責任があります。

**Topics**
+ [Debugger XGBoost レポートルールを使って SageMaker AI XGBoost 推定器を構築する](debugger-training-xgboost-report-estimator.md)
+ [Debugger XGBoost トレーニングレポートをダウンロードする](debugger-training-xgboost-report-download.md)
+ [Debugger XGBoost トレーニングレポートのチュートリアル](debugger-training-xgboost-report-walkthrough.md)

# Debugger XGBoost レポートルールを使って SageMaker AI XGBoost 推定器を構築する
<a name="debugger-training-xgboost-report-estimator"></a>

[CreateXGBoostReport](debugger-built-in-rules.md#create-xgboost-report) ルールは、トレーニングジョブから次の出力テンソルを収集します。
+ `hyperparameters` - 最初のステップで保存します。
+ `metrics` - 5 ステップごとに損失と精度を保存します。
+ `feature_importance` - 5 ステップごとに保存します。
+ `predictions` - 5 ステップごとに保存します。
+ `labels` - 5 ステップごとに保存します。

出力テンソルはデフォルトの S3 バケットに保存されます。例えば、`s3://sagemaker-<region>-<12digit_account_id>/<base-job-name>/debug-output/`。

XGBoost トレーニングジョブのために SageMaker AI 推定器を構築する場合は、次のサンプルコードに示すように、ルールを指定します。

------
#### [ Using the SageMaker AI generic estimator ]

```
import boto3
import sagemaker
from sagemaker.estimator import Estimator
from sagemaker import image_uris
from sagemaker.debugger import Rule, rule_configs

rules=[
    Rule.sagemaker(rule_configs.create_xgboost_report())
]

region = boto3.Session().region_name
xgboost_container=sagemaker.image_uris.retrieve("xgboost", region, "1.2-1")

estimator=Estimator(
    role=sagemaker.get_execution_role()
    image_uri=xgboost_container,
    base_job_name="debugger-xgboost-report-demo",
    instance_count=1,
    instance_type="ml.m5.2xlarge",
    
    # Add the Debugger XGBoost report rule
    rules=rules
)

estimator.fit(wait=False)
```

------

# Debugger XGBoost トレーニングレポートをダウンロードする
<a name="debugger-training-xgboost-report-download"></a>

トレーニングジョブの実行中またはジョブの終了後に、[Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) と AWS Command Line Interface (CLI) を使って、デバッガー XGBoost トレーニングレポートをダウンロードします。

------
#### [ Download using the SageMaker Python SDK and AWS CLI ]

1. 現在のジョブのデフォルトの S3 出力基本 URI をチェックします。

   ```
   estimator.output_path
   ```

1. 現在のジョブの名前をチェックします。

   ```
   estimator.latest_training_job.job_name
   ```

1. デバッガー XGBoost レポートは、`<default-s3-output-base-uri>/<training-job-name>/rule-output` に保存されます。ルールの出力パスを次のように設定します。

   ```
   rule_output_path = estimator.output_path + "/" + estimator.latest_training_job.job_name + "/rule-output"
   ```

1. レポートが生成されているかどうかをチェックするには、`--recursive` オプションを付けて `aws s3 ls` を使い、`rule_output_path` の下にディレクトリとファイルを再帰的にリストします。

   ```
   ! aws s3 ls {rule_output_path} --recursive
   ```

   これにより、`CreateXgboostReport` と `ProfilerReport-1234567890` という名前の自動生成されたフォルダにファイルの完全なリストが返されます。XGBoost トレーニングレポートは `CreateXgboostReport` に保存され、プロファイリングレポートは `ProfilerReport-1234567890` フォルダに保存されます。XGBoost トレーニングジョブでデフォルトで生成されるプロファイリングレポートの詳細については、「[SageMaker Debugger インタラクティブレポート](debugger-profiling-report.md)」を参照してください。  
![\[ルール出力の例。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-xgboost-report-ls.png)

   `xgboost_report.html` は、デバッガーによって自動生成された XGBoost トレーニングレポートです。`xgboost_report.ipynb` は、トレーニング結果をレポートにまとめるために使用される Jupyter ノートブックです。ノートブックを使って、すべてのファイルをダウンロードし、HTML レポートファイルを参照し、レポートを変更できます。

1. `aws s3 cp` を使ってファイルを再帰的にダウンロードします。次のコマンドは、すべてのルール出力ファイルを現在の作業ディレクトリの下にある `ProfilerReport-1234567890` フォルダに保存します。

   ```
   ! aws s3 cp {rule_output_path} ./ --recursive
   ```
**ヒント**  
Jupyter ノートブックサーバーを使っている場合は、`!pwd` を実行して現在の作業ディレクトリを確認します。

1. `/CreateXgboostReport` ディレクトリで、`xgboost_report.html` を開きます。JupyterLab を使っている場合は、**[Trust HTML]** (HTML を信頼) を選択して、自動生成されたデバッガートレーニングレポートを表示します。  
![\[ルール出力の例。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-xgboost-report-open-trust.png)

1. `xgboost_report.ipynb` ファイルを開いて、レポートがどのように生成されているか検証します。Jupyter ノートブックファイルを使って、トレーニングレポートをカスタマイズして拡張できます。

------
#### [ Download using the Amazon S3 console ]

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) で Amazon S3 コンソールを開きます。

1. 基本の S3 バケットを検索します。例えば、基本のジョブ名を指定していない場合、基本の S3 バケット名は、`sagemaker-<region>-111122223333` という形式になります。**[Find bucket by name]** (名前でバケットを検索) フィールドから基本の S3 バケットを調べます。  
![\[Amazon S3 コンソールの [Find bucket by name] (名前でバケットを検索) フィールド。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-report-download-s3console-0.png)

1. 基本の S3 バケットで、**[Find objects by prefix]** (プレフィックスでオブジェクトを検索) にジョブ名のプレフィックスを入力してトレーニングジョブ名を調べ、トレーニングジョブ名を選択します。  
![\[Amazon S3 コンソールの [Find objects by prefix] (プレフィックスでオブジェクトを検索) フィールド。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-report-download-s3console-1.png)

1. トレーニングジョブの S3 バケットで、**rule-output/** サブフォルダを選択します。デバッガーで収集されたトレーニングデータ用の 3 つのサブフォルダ (**debug-output/**、**profiler-output/**、**rule-output/**) があります。  
![\[ルール出力の S3 バケット URI の例。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-report-download-s3console-2.png)

1. **rule-output/** フォルダで、**CreateXgboostReport/** フォルダを選択します。このフォルダには、**xbgoost\$1report.html** (html で自動生成されたレポート) と **xbgoost\$1report.ipynb** (レポートの生成に使用されるスクリプトを含む Jupyter ノートブック) が含まれています。

1. **xbgoost\$1report.html** ファイルを選択し、**[Download actions]** (ダウンロードアクション) を選択してから、**[Download]** (ダウンロード) を選択します。  
![\[ルール出力の S3 バケット URI の例。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-xgboost-report-s3-download.png)

1. ダウンロードした **xbgoost\$1report.html** ファイルをウェブブラウザで開きます。

------

# Debugger XGBoost トレーニングレポートのチュートリアル
<a name="debugger-training-xgboost-report-walkthrough"></a>

このセクションでは、デバッガー XGBoost トレーニングレポートについて具体的に説明します。レポートは、出力テンソル正規表現に応じて自動的にまとめられ、バイナリ分類、複数クラス分類、回帰のトレーニングジョブのタイプが認識されます。

**重要**  
レポートでは、プロットと推奨事項は情報提供のために提供され、決定的ではありません。お客様は情報を独自に評価する責任を負うものとします。

**Topics**
+ [データセットの正解ラベルの分布](#debugger-training-xgboost-report-walkthrough-dist-label)
+ [損失対ステップグラフ](#debugger-training-xgboost-report-walkthrough-loss-vs-step)
+ [特徴量重要度](#debugger-training-xgboost-report-walkthrough-feature-importance)
+ [混同行列](#debugger-training-xgboost-report-walkthrough-confusion-matrix)
+ [混同行列の評価](#debugger-training-xgboost-report-walkthrough-eval-conf-matrix)
+ [反復における各対角要素の正解率](#debugger-training-xgboost-report-walkthrough-accuracy-rate)
+ [受信者操作特性曲線](#debugger-training-xgboost-report-walkthrough-rec-op-char)
+ [最後に保存したステップでの残差の分布](#debugger-training-xgboost-report-walkthrough-dist-residual)
+ [反復におけるラベルビンあたりの絶対検証エラー](#debugger-training-xgboost-report-walkthrough-val-error-per-label-bin)

## データセットの正解ラベルの分布
<a name="debugger-training-xgboost-report-walkthrough-dist-label"></a>

このヒストグラムは、元のデータセット内のラベル付けされたクラス (分類用) または値 (回帰用) の分布を示しています。データセットの歪みは、不正確さの原因となる可能性があります。この視覚化は、バイナリ分類、複数クラス分類、回帰のモデルタイプに使用できます。

![\[データセットグラフの正解ラベルの分布の例。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-training-xgboost-report-walkthrough-dist-label.png)


## 損失対ステップグラフ
<a name="debugger-training-xgboost-report-walkthrough-loss-vs-step"></a>

これは、トレーニングステップ全体でのトレーニングデータと検証データにおける損失の進行を示す折れ線グラフです。損失は、平均二乗誤差など、目的関数で定義したものです。このプロットから、モデルがオーバーフィットかアンダーフィットかを判断できます。このセクションでは、オーバーフィットおよびアンダーフィット問題の解決方法の決定に使えるインサイトも提供します。この視覚化は、バイナリ分類、複数クラス分類、回帰のモデルタイプに使用できます。

![\[損失対ステップグラフの例。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-training-xgboost-report-walkthrough-loss-vs-step.png)


## 特徴量重要度
<a name="debugger-training-xgboost-report-walkthrough-feature-importance"></a>

特徴の重要度の視覚化には、ウェイト、ゲイン、カバレッジという 3 つの異なるタイプが用意されています。それぞれの詳細な定義については、レポートで説明しています。特徴の重要度の視覚化により、トレーニングデータセット内のどの特徴が予測に貢献したかがわかります。特徴の重要度の視覚化は、バイナリ分類、複数クラス分類、回帰のモデルタイプで使用できます。

![\[特徴の重要度グラフの例。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-training-xgboost-report-walkthrough-feature-importance.png)


## 混同行列
<a name="debugger-training-xgboost-report-walkthrough-confusion-matrix"></a>

この視覚化は、バイナリ分類モデルと複数クラス分類モデルにのみ適用されます。精度だけではモデルのパフォーマンスを評価するのに十分ではないことがあります。ヘルスケアや不正検出などの一部のユースケースでは、偽陽性率と偽陰性率を知ることも重要です。混同行列は、モデルのパフォーマンスを評価するための追加のディメンションを提供します。

![\[混同行列の例。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-training-xgboost-report-walkthrough-confusion-matrix.png)


## 混同行列の評価
<a name="debugger-training-xgboost-report-walkthrough-eval-conf-matrix"></a>

このセクションでは、モデルの適合率、再現率、F1 スコアに関するマイクロ、マクロ、加重メトリクスについて、より多くのインサイトを提供します。

![\[混同行列の評価。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-training-xgboost-report-walkthrough-eval-conf-matrix.png)


## 反復における各対角要素の正解率
<a name="debugger-training-xgboost-report-walkthrough-accuracy-rate"></a>

この視覚化は、バイナリ分類モデルと複数クラス分類モデルにのみ適用されます。これは、各クラスのトレーニングステップ全体を通して、混同行列の対角値をプロットした折れ線グラフです。このプロットは、トレーニングステップ全体を通じて、各クラスの精度がどのように進歩するかを示します。このプロットから、パフォーマンスの低いクラスを特定できます。

![\[反復グラフにおける各対角要素の正解率の例。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-training-xgboost-report-walkthrough-accuracy-rate.gif)


## 受信者操作特性曲線
<a name="debugger-training-xgboost-report-walkthrough-rec-op-char"></a>

この視覚化は、バイナリ分類モデルにのみ適用されます。受信者操作特性曲線は、バイナリ分類モデルのパフォーマンスを評価するために一般的に使用されます。曲線の Y 軸は真陽性率 (TPF)、X 軸は偽陽性率 (FPR) です。プロットには、曲線下面積 (AUC) の値も表示されます。AUC 値が大きいほど、分類器の予測度が高くなります。また、ROC 曲線を使って TPR と FPR の間のトレードオフを理解し、ユースケースに最適な分類しきい値を特定することもできます。分類しきい値を調整することで、モデルの動作を調整し、いずれかのタイプのエラー (FP/FN) を減らすことができます。

![\[受信者操作特性曲線グラフの例。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-training-xgboost-report-walkthrough-rec-op-char.png)


## 最後に保存したステップでの残差の分布
<a name="debugger-training-xgboost-report-walkthrough-dist-residual"></a>

この視覚化は、デバッガーがキャプチャする最後のステップの残差分布を示す縦棒グラフです。この視覚化では、残差分布がゼロを中心とする正規分布に近いかどうかをチェックできます。残差が歪んでいる場合、特徴はラベルを予測するのに十分ではない可能性があります。

![\[最後に保存したステップグラフでの残差の分布の例。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-training-xgboost-report-walkthrough-dist-residual.png)


## 反復におけるラベルビンあたりの絶対検証エラー
<a name="debugger-training-xgboost-report-walkthrough-val-error-per-label-bin"></a>

この視覚化は、回帰モデルにのみ適用されます。実際のターゲット値は 10 間隔に分割されます。この視覚化では、トレーニングステップ全体で、各間隔の検証エラーがどのように進行するかをラインプロットで表示します。絶対検証エラーは、検証時の予測値と実際値の差の絶対値です。この視覚化から、パフォーマンスの低い間隔を特定できます。

![\[反復グラフにおけるラベルビンごとの絶対検証エラーの例。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-training-xgboost-report-walkthrough-val-error-per-label-bin.png)


# Amazon SageMaker Debugger ルールに基づくアクション
<a name="debugger-action-on-rules"></a>

デバッガールールの評価ステータスに基づいて、トレーニングジョブの停止や、Amazon Simple Notification Service (Amazon SNS) を使った通知の送信などの自動アクションを設定できます。Amazon CloudWatch Events と を使用して独自のアクションを作成することもできます AWS Lambda。デバッガールール評価ステータスに基づいて自動アクションを設定する方法については、次のトピックを参照してください。

**Topics**
+ [ルール用の Debugger の組み込みアクションを使用する](debugger-built-in-actions.md)
+ [Amazon CloudWatch と を使用したルールに対するアクション AWS Lambda](debugger-cloudwatch-lambda.md)

# ルール用の Debugger の組み込みアクションを使用する
<a name="debugger-built-in-actions"></a>

デバッガーの組み込みアクションを使って、[デバッガールール](debugger-built-in-rules.md#debugger-built-in-rules-Rule) で検出された問題に対応します。デバッガーの `rule_configs` クラスには、トレーニングジョブを自動的に停止したり、デバッガールールがトレーニングの問題を検出したときに Amazon Simple Notification Service (Amazon SNS) を使用して通知を送信したりするなどの、アクションのリストを設定するツールが用意されています。以下のトピックでは、これらのタスクを実行する手順を説明します。

**Topics**
+ [Amazon SNS を設定し、`SMDebugRules` トピックを作成し、トピックをサブスクライブする](#debugger-built-in-actions-sns)
+ [IAM ロールを設定して必要なポリシーをアタッチする](#debugger-built-in-actions-iam)
+ [組み込みアクションを使って Debugger ルールを設定する](#debugger-built-in-actions-on-rule)
+ [Debugger の組み込みアクションを使う場合の考慮事項](#debugger-built-in-actions-considerations)

## Amazon SNS を設定し、`SMDebugRules` トピックを作成し、トピックをサブスクライブする
<a name="debugger-built-in-actions-sns"></a>

このセクションでは、Amazon SNS **SMDebugRules** トピックを設定してサブスクライブし、サブスクリプションを確認してデバッガールールから通知を受け取る方法を具体的に説明します。

**注記**  
Amazon SNS の請求の詳細については、「[Amazon SNS の料金](https://aws.amazon.com/sns/pricing/)」と「[Amazon SNS のよくある質問](https://aws.amazon.com/sns/faqs/)」を参照してください。

**SMDebugRules トピックを作成するには**

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/sns/v3/home](https://console.aws.amazon.com/sns/v3/home) で Amazon SNS コンソールを開きます。

1. 左のナビゲーションペインで、[**トピック**] を選択します。

1. [**トピック**] ページで、[**トピックの作成**] を選択します。

1. [**サブスクリプションの作成**] ページで [**詳細**] セクションで、以下を実行します。

   1. **[Type]** (タイプ) で、トピックタイプとして **[Standard]** (標準) を選択します。

   1. [**名前**] に「**SMDebugRules**」と入力します。

1. その他のオプション設定をすべてスキップして、**[Create topic]** (トピックを作成) を選択します。オプション設定の詳細については、「[Amazon SNS トピックを作成する](https://docs.aws.amazon.com/sns/latest/dg/sns-create-topic.html)」を参照してください。

**SMDebugRules トピックをサブスクライブするには**

1. Amazon SNS コンソールの[https://console.aws.amazon.com/sns/v3/home](https://console.aws.amazon.com/sns/v3/home)を開いてください。

1. 左のナビゲーションペインで、**[サブスクリプション]** を選択します。

1. **[サブスクリプション]** ページで **[サブスクリプションの作成]** を選択します。

1. **[サブスクリプションの作成]** ページの **[詳細]** セクションで、以下を実行します。

   1. **[Topic ARN]** (トピック ARN) で、**SMDebugRules** トピック の ARN を選択します。ARN は、`arn:aws:sns:<region-id>:111122223333:SMDebugRules` の形式にしてください。

   1. [**プロトコル**] で、[**E メール**] または [**SMS**] を選択します。

   1. **[Endpoint]** (エンドポイント) には、通知を受け取るメールアドレスや電話番号などのエンドポイント値を入力します。
**注記**  
正しいメールアドレスと電話番号を入力してください。電話番号には、`+`、国コード、電話番号を含め、特殊文字やスペースは使用しないでください。例えば、電話番号 \$11 (222) 333-4444 は、**\$112223334444** のようになります。

1. その他のオプション設定をすべてスキップして、**[Create subscription]** (サブスクリプションを作成) を選択します。オプション設定の詳細については、「[Amazon SNS トピックをサブスクライブする](https://docs.aws.amazon.com/sns/latest/dg/sns-create-subscribe-endpoint-to-topic.html)」を参照してください。

**SMDebugRules** トピックをサブスクライブすると、次の確認メッセージがメールまたは電話で届きます。

![\[Amazon SNS SMDebugRules トピックのサブスクリプション確認メールメッセージ。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-built-in-action-subscription-confirmation.png)


Amazon SNS の詳細については、*Amazon SNS 開発者ガイド*の「[モバイルテキストメッセージング (SMS)](https://docs.aws.amazon.com/sns/latest/dg/sns-mobile-phone-number-as-subscriber.html)」および「[E メール通知](https://docs.aws.amazon.com/sns/latest/dg/sns-email-notifications.html)」を参照してください。

## IAM ロールを設定して必要なポリシーをアタッチする
<a name="debugger-built-in-actions-iam"></a>

このステップでは、必要なポリシーを IAM ロールに追加します。

**IAM ロールに必要なポリシーを追加するには**

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) で IAM コンソールを開きます。

1. 左のナビゲーションペインで、**[Policies]** (ポリシー) を選択し、**[Create Policy]** (ポリシーの作成) を選択します。

1. **[Create policy]** (ポリシーの作成) ページで、次の手順を実行して、新しい sns-access ポリシーを作成します。

   1. **JSON** タブを選択します。

   1. 次のコードで太字の JSON 文字列を に貼り付け`"Statement"`、12 桁の AWS アカウント ID を AWS 自分のアカウント ID に置き換えます。

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "VisualEditor0",
                  "Effect": "Allow",
                  "Action": [
                      "sns:Publish",
                      "sns:CreateTopic",
                      "sns:Subscribe"
                  ],
                  "Resource": "arn:aws:sns:*:111122223333:SMDebugRules"
              }
          ]
      }
      ```

------

   1. ページの下部で、**[Review policy]** (ポリシーの確認) を選択します。

   1. [**ポリシーの確認**] ページで [**名前**] に **sns-access** と入力します。

   1. ページの下部で、**[Create policy]** (ポリシーの作成) を選択します。

1. IAM コンソールに戻り、左のナビゲーションペインで、**[Roles]** (ロール) を選択します。

1. SageMaker AI モデルトレーニングに使う IAM ロールを検索し、その IAM ロールを選択します。

1. **[Summary]** (概要) ページの **[Permissions]** (許可) タブで、**[Attach policies]** (ポリシーをアタッチ) を選択します。

1. **sns-access** ポリシーを検索し、ポリシーの横にあるチェックボックスを選択して、**[Attach policies]** (ポリシーをアタッチ) を選択します。

Amazon SNS のための IAM ポリシーのその他の設定例については、「[Amazon SNS アクセスコントロールのケース例](https://docs.aws.amazon.com/sns/latest/dg/sns-access-policy-use-cases.html)」を参照してください。

## 組み込みアクションを使って Debugger ルールを設定する
<a name="debugger-built-in-actions-on-rule"></a>

前の手順で必要な設定を正常に終了したら、次のスクリプト例に示すように、デバッグルール用のデバッガー組み込みアクションを設定できます。`actions` リストオブジェクトの構築中に使用する組み込みアクションを選択できます。`rule_configs` は、デバッガーの組み込みルールおよびアクションを設定するための高レベルのツールを提供するヘルパーモジュールです。デバッガーでは、次の組み込みアクションを使用できます。
+ `rule_configs.StopTraining()` - デバッガールールが問題を検出すると、トレーニングジョブを停止します。
+ `rule_configs.Email("abc@abc.com")` - デバッガールールが問題を検出すると、メールで通知を送ります。SNS トピックサブスクリプションを設定したときに使用したメールアドレスを使用してください。
+ `rule_configs.SMS("+1234567890")` - デバッガールールが問題を検出すると、テキストメッセージで通知を送ります。SNS トピックサブスクリプションを設定したときに使用した電話番号を使用してください。
**注記**  
正しいメールアドレスと電話番号を入力してください。電話番号には、`+`、国コード、電話番号を含め、特殊文字やスペースは使用しないでください。例えば、電話番号 \$11 (222) 333-4444 は、**\$112223334444** のようになります。

すべての組み込みアクションまたはアクションのサブセットの使用は、`rule_configs.ActionList()` メソッドを使用してラップアップすることにより可能で、組み込みアクションが取り込まれ、アクションのリストが設定されます。

**3 つの組み込みアクションをすべて 1 つのルールに追加するには**

3 つの組み込みアクションすべてを 1 つのルールに含める場合は、推定器の構築中にデバッガーの組み込みアクションリストを設定します。次のテンプレートを使って推定器を構築すると、デバッガーはトレーニングジョブを停止し、トレーニングジョブの進行状況のモニタリングに使うルールについて、メールとテキストで通知を送信します。

```
from sagemaker.debugger import Rule, rule_configs

# Configure an action list object for Debugger rules
actions = rule_configs.ActionList(
    rule_configs.StopTraining(), 
    rule_configs.Email("abc@abc.com"), 
    rule_configs.SMS("+1234567890")
)

# Configure rules for debugging with the actions parameter
rules = [
    Rule.sagemaker(
        base_config=rule_configs.built_in_rule(),         # Required
        rule_parameters={"paramter_key": value },        # Optional
        actions=actions
    )
]

estimator = Estimator(
    ...
    rules = rules
)

estimator.fit(wait=False)
```

**複数の組み込みアクションオブジェクトを作成して、1 つのルールに異なるアクションを与えるには**

1 つのルールの異なるしきい値でトリガーされる組み込みアクションを与える場合、次のスクリプトに示すように、複数の組み込みアクションオブジェクトを作成できます。同じルールの実行による競合エラーを回避するには、次のスクリプトテンプレートの例に示すように、異なるルールジョブ名 (ルールの `name` 属性に異なる文字列を指定) を送信する必要があります。この例では、[StalledTrainingRule](debugger-built-in-rules.md#stalled-training) を設定して、トレーニングジョブが 60 秒間停滞した場合に `abc@abc.com` にメールを送信し、120 秒間停滞した場合にトレーニングジョブを停止する、という 2 つの異なるアクションを実行する方法を示しています。

```
from sagemaker.debugger import Rule, rule_configs
import time

base_job_name_prefix= 'smdebug-stalled-demo-' + str(int(time.time()))

# Configure an action object for StopTraining
action_stop_training = rule_configs.ActionList(
    rule_configs.StopTraining()
)

# Configure an action object for Email
action_email = rule_configs.ActionList(
    rule_configs.Email("abc@abc.com")
)

# Configure a rule with the Email built-in action to trigger if a training job stalls for 60 seconds
stalled_training_job_rule_email = Rule.sagemaker(
        base_config=rule_configs.stalled_training_rule(),
        rule_parameters={
                "threshold": "60", 
                "training_job_name_prefix": base_job_name_prefix
        },
        actions=action_email
)
stalled_training_job_rule_text.name="StalledTrainingJobRuleEmail"

# Configure a rule with the StopTraining built-in action to trigger if a training job stalls for 120 seconds
stalled_training_job_rule = Rule.sagemaker(
        base_config=rule_configs.stalled_training_rule(),
        rule_parameters={
                "threshold": "120", 
                "training_job_name_prefix": base_job_name_prefix
        },
        actions=action_stop_training
)
stalled_training_job_rule.name="StalledTrainingJobRuleStopTraining"

estimator = Estimator(
    ...
    rules = [stalled_training_job_rule_email, stalled_training_job_rule]
)

estimator.fit(wait=False)
```

トレーニングジョブの実行中に、ルールがトレーニングジョブの問題を検出するたびに、デバッガーの組み込みアクションによって通知メールとテキストメッセージが送信されます。次のスクリーンショットは、停滞したトレーニングジョブの問題があるトレーニングジョブについてのメール通知の例を示しています。

![\[StalledTraining の問題が検出されたときにデバッガーから送信されるメール通知の例。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-built-in-action-email.png)


次のスクリーンショットは、ルールが StalledTraining の問題を検出したときにデバッガーが送信するテキスト通知の例を示しています。

![\[StalledTraining の問題が検出されたときにデバッガーから送信されるテキスト通知の例。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-built-in-action-text.png)


## Debugger の組み込みアクションを使う場合の考慮事項
<a name="debugger-built-in-actions-considerations"></a>
+ デバッガーの組み込みアクションを使うには、インターネット接続が必要です。この機能は、Amazon SageMaker AI または Amazon VPC が提供するネットワーク分離モードではサポートされていません。
+ 組み込みアクションは、[プロファイラールール](debugger-built-in-profiler-rules.md#debugger-built-in-profiler-rules-ProfilerRule) には使用できません。
+ 組み込みアクションは、スポットトレーニング中断があるトレーニングジョブでは使用できません。
+ メールまたはテキスト通知では、メッセージの最後に「`None`」と表示されます。これには意味がないため、「`None`」というテキストは無視してください。

# Amazon CloudWatch と を使用したルールに対するアクション AWS Lambda
<a name="debugger-cloudwatch-lambda"></a>

Amazon CloudWatch は、Amazon SageMaker AI モデルトレーニングジョブのログと Amazon SageMaker Debugger ルール処理ジョブのログを収集します。Amazon CloudWatch Events と を使用してデバッガーを設定し AWS Lambda 、デバッガールールの評価ステータスに基づいてアクションを実行します。

## サンプルノートブックの例
<a name="debugger-test-stop-training"></a>

次のサンプルノートブックを実行できます。これらは、Amazon CloudWatch および AWS Lambdaを使用して、Debugger の組み込みルールに基づいてアクションを使い、トレーニングジョブを停止する実験用です。
+ [Amazon SageMaker Debugger - Reacting to CloudWatch Events from Rules](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-debugger/tensorflow_action_on_rule/tf-mnist-stop-training-job.html)

  このサンプルノートブックでは、勾配消失問題があるトレーニングジョブを実行します。デバッガーの [VanishingGradient](debugger-built-in-rules.md#vanishing-gradient) 組み込みルールが、SageMaker AI TensorFlow 推定器の構築中に使用されます。デバッガールールが問題を検出すると、トレーニングジョブは終了します。
+ [Detect Stalled Training and Invoke Actions Using SageMaker Debugger Rule](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-debugger/tensorflow_action_on_rule/detect_stalled_training_job_and_actions.html)

  このサンプルノートブックでは、10 分間スリープ状態にするコード行を含むトレーニングスクリプトを実行します。デバッガーの [StalledTrainingRule](debugger-built-in-rules.md#stalled-training) 組み込みルールが問題を呼び出し、トレーニングジョブを停止します。

**Topics**
+ [サンプルノートブックの例](#debugger-test-stop-training)
+ [Debugger ルールとトレーニングジョブに関する CloudWatch Logs にアクセスする](debugger-cloudwatch-metric.md)
+ [CloudWatch と Lambda を使ってトレーニングジョブを自動終了するように Debugger を設定する](debugger-stop-training.md)
+ [CloudWatch Events ルールを無効にして、トレーニングジョブ自動終了の使用を停止する](debugger-disable-cw.md)

# Debugger ルールとトレーニングジョブに関する CloudWatch Logs にアクセスする
<a name="debugger-cloudwatch-metric"></a>

CloudWatch Logs のトレーニングジョブとデバッガールールジョブのステータスを使って、トレーニングの問題が発生した場合にさらにアクションを実行できます。次の手順は、関連する CloudWatch Logs にアクセスする方法を示しています。CloudWatch を使用したトレーニングジョブのモニタリングの詳細については、「[Monitor Amazon SageMaker AI](https://docs.aws.amazon.com/sagemaker/latest/dg/monitoring-overview.html)」を参照してください。

**トレーニングジョブのログと Debugger ルールジョブのログにアクセスするには**

1. CloudWatch コンソールの [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) を開いてください。

1. 左のナビゲーションペインの **[Logs]** (ログ) ノードで、**[Log Groups]** (ロググループ) を選択します。

1. ロググループリストで、以下を実行します。
   + トレーニングジョブのログの場合は、**/aws/sagemaker/TrainingJobs** を選択します。
   + デバッガールールジョブのログの場合は、**/aws/sagemaker/ProcessingJobs** を選択します。

# CloudWatch と Lambda を使ってトレーニングジョブを自動終了するように Debugger を設定する
<a name="debugger-stop-training"></a>

デバッガールールはトレーニングジョブのステータスをモニタリングし、CloudWatch Events ルールはデバッガールールトレーニングジョブの評価ステータスをモニタリングします。以下のセクションでは、CloudWatch と Lambda を使用してトレーニングジョブを自動終了するために必要なプロセスの概要を説明します。

**Topics**
+ [ステップ 1: Lambda 関数を作成する](#debugger-lambda-function-create)
+ [ステップ 2: Lambda 関数を設定する](#debugger-lambda-function-configure)
+ [ステップ 3: CloudWatch Events ルールを作成し、Debugger の Lambda 関数にリンクする](#debugger-cloudwatch-events)

## ステップ 1: Lambda 関数を作成する
<a name="debugger-lambda-function-create"></a>

**Lambda 関数を作成するには**

1. [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/) で AWS Lambda コンソールを開きます。

1. 左のナビゲーションペインで、**[Functions]** (関数)、**[Create function]** (関数の作成) の順に選択します。

1. **[Create function]** (関数の作成) ページで、**[Author from scratch]** (一から作成) オプションを選択します。

1. **[Basic information]** (基本情報) セクションに、**[Function name]** (関数名) を入力します (例: **debugger-rule-stop-training-job**)。

1. **[ランタイム]** で **[Python 3.7]** を選択します。

1. **[Permissions]** (許可) で、ドロップダウンオプションを展開し、**[Change default execution role]** (デフォルトの実行ロールを変更する) を選択します。

1. **[実行ロール]** で、**[既存のロールを使用]** を選択し、SageMaker AI でジョブをトレーニングするために使う IAM ロールを選択します。
**注記**  
`AmazonSageMakerFullAccess` と `AWSLambdaBasicExecutionRole` が添付された実行ロールを使っていることを確認してください。そうしないと、Lambda 関数はトレーニングジョブのデバッガールールステータスの変更に適切に反応しません。どの実行ロールが使用されているかわからない場合は、Jupyter ノートブックセルで次のコードを実行して、実行ロールの出力を取得します。  

   ```
   import sagemaker
   sagemaker.get_execution_role()
   ```

1. ページの下部で、**[関数の作成]** を選択します。

次の図は、入力フィールドと選択が完了した状態の **[Create function]** (関数の作成) ページの例を示しています。

![\[[Create function] (関数の作成) ページ。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-lambda-create.png)


## ステップ 2: Lambda 関数を設定する
<a name="debugger-lambda-function-configure"></a>

**Lambda 関数を設定するには**

1. 設定ページの **[Function code]** (関数コード) セクションで、Lambda コードエディタペインに次の Python スクリプトを貼り付けます。`lambda_handler` 関数は、CloudWatch によって収集されたデバッガールールの評価ステータスをモニタリングし、`StopTrainingJob` API オペレーションをトリガーします。`client` for AWS SDK for Python (Boto3) SageMaker AI は、 `StopTrainingJob` API オペレーションをトリガーする高レベルのメソッド `stop_training_job`を提供します。

   ```
   import json
   import boto3
   import logging
   
   logger = logging.getLogger()
   logger.setLevel(logging.INFO)
   
   def lambda_handler(event, context):
       training_job_name = event.get("detail").get("TrainingJobName")
       logging.info(f'Evaluating Debugger rules for training job: {training_job_name}')
       eval_statuses = event.get("detail").get("DebugRuleEvaluationStatuses", None)
   
       if eval_statuses is None or len(eval_statuses) == 0:
           logging.info("Couldn't find any debug rule statuses, skipping...")
           return {
               'statusCode': 200,
               'body': json.dumps('Nothing to do')
           }
   
       # should only attempt stopping jobs with InProgress status
       training_job_status = event.get("detail").get("TrainingJobStatus", None)
       if training_job_status != 'InProgress':
           logging.debug(f"Current Training job status({training_job_status}) is not 'InProgress'. Exiting")
           return {
               'statusCode': 200,
               'body': json.dumps('Nothing to do')
           }
   
       client = boto3.client('sagemaker')
   
       for status in eval_statuses:
           logging.info(status.get("RuleEvaluationStatus") + ', RuleEvaluationStatus=' + str(status))
           if status.get("RuleEvaluationStatus") == "IssuesFound":
               secondary_status = event.get("detail").get("SecondaryStatus", None)
               logging.info(
                   f'About to stop training job, since evaluation of rule configuration {status.get("RuleConfigurationName")} resulted in "IssuesFound". ' +
                   f'\ntraining job "{training_job_name}" status is "{training_job_status}", secondary status is "{secondary_status}"' +
                   f'\nAttempting to stop training job "{training_job_name}"'
               )
               try:
                   client.stop_training_job(
                       TrainingJobName=training_job_name
                   )
               except Exception as e:
                   logging.error(
                       "Encountered error while trying to "
                       "stop training job {}: {}".format(
                           training_job_name, str(e)
                       )
                   )
                   raise e
       return None
   ```

   Lambda コードエディタインターフェイスの詳細については、[AWS 「Lambda コンソールエディタを使用した関数の作成](https://docs.aws.amazon.com/lambda/latest/dg/code-editor.html)」を参照してください。

1. 他のすべての設定をスキップして、設定ページの上部にある **[Save]** (保存) を選択します。

## ステップ 3: CloudWatch Events ルールを作成し、Debugger の Lambda 関数にリンクする
<a name="debugger-cloudwatch-events"></a>

**CloudWatch Events ルールを作成し、デバッガーの Lambda 関数にリンクするには**

1. CloudWatch コンソールの [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) を開いてください。

1. 左のナビゲーションペインで、**[Events]** (イベント) ノードの **[Rules]** (ルール) を選択します。

1. **[‬ルールを作成]‭** を選択します。

1. **[ステップ 1: ルールを作成]** ページの **[イベントソース]** セクションで、**[サービス名]** に **[SageMaker AI]** を選択し、**[イベントタイプ]** に **[SageMaker トレーニングジョブの状態変更]** を選択します。[Event Pattern Preview] (イベントパターンのプレビュー) は、次の JSON 文字列の例のようになります。

   ```
   {
       "source": [
           "aws.sagemaker"
       ],
       "detail-type": [
           "SageMaker Training Job State Change"
       ]
   }
   ```

1. **[Targets]** (ターゲット) セクションで、**[Add target\$1]** (ターゲットの追加\$1) を選択し、作成した **debugger-rule-stop-training-job** Lambda 関数を選択します。このステップは、CloudWatch Events ルールと Lambda 関数をリンクします。

1. **[Configure details]** (詳細設定) を選択し、**[Step 2: Configure rule details]** (ステップ 2: ルールの詳細を設定する) ページに移動します。

1. CloudWatch ルール定義名を指定します。例えば、**debugger-cw-event-rule** などです。

1. **[Create rule]** (ルールの作成) を選択して終了します。

1. Lambda 関数の設定ページに戻り、ページを更新します。**[Designer]** (デザイナー) パネルで正しく設定されていることを確認します。CloudWatch Events ルールが、Lambda 関数のトリガーとして登録されているはずです。設定のデザインは、次の例のようになります。  
<a name="lambda-designer-example"></a>![\[CloudWatch 設定のデザイナーパネル。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-lambda-designer.png)

# CloudWatch Events ルールを無効にして、トレーニングジョブ自動終了の使用を停止する
<a name="debugger-disable-cw"></a>

トレーニングジョブ自動終了を無効にするには、CloudWatch Events ルールを無効にする必要があります。Lambda の**[Designer]** (デザイナー) パネルで、その Lambda 関数にリンクされている **[EventBridge (CloudWatch Events)]** ブロックを選択します。これにより、**[デザイナー]** パネルの下に **[EventBridge]** パネルが表示されます (例えば、前のスクリーンショットを参照)。**[EventBridge (CloudWatch Events): debugger-cw-event-rule]** の横にあるチェックボックスをオンにし、**[Disable]** (無効) を選択します。後で自動終了機能を使う場合は、CloudWatch Events ルールを再度有効にできます。

# TensorBoard で Amazon SageMaker Debugger 出力テンソルを視覚化する
<a name="debugger-enable-tensorboard-summaries"></a>

**重要**  
このページは非推奨となり、代わりに Amazon SageMaker AI with TensoBoard の使用が推奨されています。TensorBoard の包括的なエクスペリエンスが SageMaker トレーニングと統合されており、SageMaker AI ドメインのアクセス制御機能も使用できます。詳細については[Amazon SageMaker AI の TensorBoard](tensorboard-on-sagemaker.md)を参照してください。

SageMaker デバッガーを使って、TensorBoard と互換性のある出力テンソルファイルを作成します。ファイルをロードして TensorBoard で視覚化し、SageMaker トレーニングジョブを分析します。デバッガーは、TensorBoard と互換性のある出力テンソルファイルを自動的に生成します。出力テンソルを保存するためにカスタマイズしたフック設定に対して、デバッガーには、スカラーサマリー、分布、ヒストグラムを作成し、TensorBoard にインポートできる柔軟性があります。

![\[デバッガー出力テンソル保存メカニズムのアーキテクチャ図。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-tensorboard-concept.png)


これを有効にするには、`DebuggerHookConfig` と `TensorBoardOutputConfig` オブジェクトを `estimator` に渡します。

次の手順では、スカラー、重み、バイアスを、TensorBoard で視覚化できる完全なテンソル、ヒストグラム、分布として保存する方法について説明します。デバッガーはこれらをトレーニングコンテナのローカルパス (デフォルトパスは `/opt/ml/output/tensors`) に保存し、デバッガー出力設定オブジェクトで渡された Amazon S3 のロケーションに同期させます。

**デバッガーを使って TensorBoard 互換の出力テンソルファイルを保存するには**

1. デバッガーの `TensorBoardOutputConfig` クラスを使って、TensorBoard 出力を保存するように `tensorboard_output_config` 設定オブジェクトを設定します。`s3_output_path` パラメータには、現在の SageMaker AI セッションのデフォルトの S3 バケットか、任意の S3 バケットを指定します。この例では、`container_local_output_path` パラメータを追加せずに、デフォルトのローカルパス `/opt/ml/output/tensors` に設定します。

   ```
   import sagemaker
   from sagemaker.debugger import TensorBoardOutputConfig
   
   bucket = sagemaker.Session().default_bucket()
   tensorboard_output_config = TensorBoardOutputConfig(
       s3_output_path='s3://{}'.format(bucket)
   )
   ```

   詳細については、[Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) のデバッガー `[TensorBoardOutputConfig](https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html#sagemaker.debugger.TensorBoardOutputConfig)` API を参照してください。

1. デバッガーフックを設定し、フックパラメータ値をカスタマイズします。例えば、次のコードは、すべてのスカラー出力をトレーニングフェーズでは 100 ステップごと、検証フェーズで 10 ステップごとに保存し、`weights` パラメータを 500 ステップごと (テンソルコレクションを保存するためのデフォルトの `save_interval` 値は 500)、`bias` パラメータをグローバルステップが 500 に達するまで 10 グローバルステップごとに保存するようデバッガーフックを設定します。

   ```
   from sagemaker.debugger import CollectionConfig, DebuggerHookConfig
   
   hook_config = DebuggerHookConfig(
       hook_parameters={
           "train.save_interval": "100",
           "eval.save_interval": "10"
       },
       collection_configs=[
           CollectionConfig("weights"),
           CollectionConfig(
               name="biases",
               parameters={
                   "save_interval": "10",
                   "end_step": "500",
                   "save_histogram": "True"
               }
           ),
       ]
   )
   ```

   デバッガー設定 API の詳細については、[Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) のデバッガー `[CollectionConfig](https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html#sagemaker.debugger.CollectionConfig)` API と `[DebuggerHookConfig](https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html#sagemaker.debugger.DebuggerHookConfig)` API を参照してください。

1. 設定オブジェクトを渡すデバッガーパラメータを使って SageMaker AI 推定器を構築します。次のテンプレート例は、一般的な SageMaker AI 推定器を作成する方法を示します。`estimator` と `Estimator` は、他の SageMaker AI フレームワークの推定器の親クラスや推定器クラスに置き換えることができます。この機能で利用可能な SageMaker AI フレームワーク推定器は、`[TensorFlow](https://sagemaker.readthedocs.io/en/stable/frameworks/tensorflow/using_tf.html#create-an-estimator)`、`[PyTorch](https://sagemaker.readthedocs.io/en/stable/frameworks/pytorch/using_pytorch.html#create-an-estimator)`、`[MXNet](https://sagemaker.readthedocs.io/en/stable/frameworks/mxnet/using_mxnet.html#create-an-estimator)` です。

   ```
   from sagemaker.estimator import Estimator
   
   estimator = Estimator(
       ...
       # Debugger parameters
       debugger_hook_config=hook_config,
       tensorboard_output_config=tensorboard_output_config
   )
   estimator.fit()
   ```

   `estimator.fit()` メソッドはトレーニングジョブを開始し、デバッガーは出力テンソルファイルをデバッガー S3 出力パスと TensorBoard S3 出力パスにリアルタイムで書き込みます。出力パスを取得するには、次の推定器メソッドを使用します。
   + デバッガー S3 出力パスには、`estimator.latest_job_debugger_artifacts_path()` を使用します。
   + TensorBoard S3 出力パスには、`estimator.latest_job_tensorboard_artifacts_path()` を使用します。

1. トレーニングが完了したら、保存された出力テンソルの名前をチェックします。

   ```
   from smdebug.trials import create_trial
   trial = create_trial(estimator.latest_job_debugger_artifacts_path())
   trial.tensor_names()
   ```

1. Amazon S3 で TensorBoard の出力データをチェックします。

   ```
   tensorboard_output_path=estimator.latest_job_tensorboard_artifacts_path()
   print(tensorboard_output_path)
   !aws s3 ls {tensorboard_output_path}/
   ```

1. TensorBoard の出力データをノートブックインスタンスにダウンロードします。たとえば、次の AWS CLI コマンドは、ノートブックインスタンスの現在の作業ディレクトリの `/logs/fit` に TensorBoard ファイルをダウンロードします。

   ```
   !aws s3 cp --recursive {tensorboard_output_path} ./logs/fit
   ```

1. ファイルディレクトリを TAR ファイルに圧縮して、ローカルマシンにダウンロードします。

   ```
   !tar -cf logs.tar logs
   ```

1. TensorBoard TAR ファイルをダウンロードしてデバイス上のディレクトリに抽出し、Jupyter ノートブックサーバーを起動し、新しいノートブックを開いて、TensorBoard アプリケーションを実行します。

   ```
   !tar -xf logs.tar
   %load_ext tensorboard
   %tensorboard --logdir logs/fit
   ```

次のアニメーションスクリーンショットは、ステップ 5 ～ 8 を示しています。これは、デバッガー TensorBoard TAR ファイルをダウンロードし、このファイルをローカルデバイス上の Jupyter ノートブックにロードする方法を示しています。

![\[Debugger TensorBoard ファイルをダウンロードしてローカルマシンにロードする方法を示すアニメーションスクリーンショット。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-tensorboard.gif)


# デバッガーの組み込みルールのリスト
<a name="debugger-built-in-rules"></a>

Amazon SageMaker Debugger が提供するデバッガーの組み込みルールを使用して、モデルのトレーニング中に収集されたメトリクスとテンソルを分析できます。以下のリストには、デバッガールールをまとめています。各組み込みルールの情報と、設定およびデプロイする方法の例が記載されています。

デバッガーの組み込みルールは、トレーニングジョブの成功に不可欠なさまざまな共通条件をモニタリングします。組み込みルールは、[Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) または低レベルの SageMaker API オペレーションを使って呼び出せます。

組み込みルールの使用に追加料金はかかりません。請求の詳細については、「[Amazon SageMaker の料金](https://aws.amazon.com/sagemaker/pricing/)」のページを参照してください。

**注記**  
トレーニングジョブにアタッチできる組み込みルールの最大数は 20 です。SageMaker デバッガーは、組み込みルールを完全に管理し、トレーニングジョブを同期的に分析します。

**重要**  
新しいデバッガー機能を使うには、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)
```

## デバッガールール
<a name="debugger-built-in-rules-Rule"></a>

次のルールは、`Rule.sagemaker` クラスメソッド使って呼び出せるデバッガーの組み込みルールです。

トレーニングレポートを生成するためのデバッガー組み込みルール


| 有効範囲 | 組み込みルール | 
| --- | --- | 
| SageMaker AI XGBoost トレーニングジョブのトレーニングレポート |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/debugger-built-in-rules.html)  | 

モデルトレーニングデータ (出力テンソル) をデバッグするためのデバッガー組み込みルール


| 有効範囲 | 組み込みルール | 
| --- | --- | 
| 深層学習フレームワーク (TensorFlow、MXNet、PyTorch) |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/debugger-built-in-rules.html)  | 
| ディープラーニングフレームワーク (TensorFlow、MXNet、および PyTorch) および XGBoost アルゴリズム  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/debugger-built-in-rules.html)  | 
| ディープラーニングアプリケーション |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/debugger-built-in-rules.html)  | 
| XGBoost アルゴリズム |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/debugger-built-in-rules.html)  | 

**デフォルトのパラメータ値で組み込みルールを使用するには** - 次の設定形式を使用します。

```
from sagemaker.debugger import Rule, ProfilerRule, rule_configs

rules = [
    Rule.sagemaker(rule_configs.built_in_rule_name_1()),
    Rule.sagemaker(rule_configs.built_in_rule_name_2()),
    ...
    Rule.sagemaker(rule_configs.built_in_rule_name_n())
]
```

**パラメータ値をカスタマイズして組み込みルールを使用するには** - 次の設定形式を使用します。

```
from sagemaker.debugger import Rule, ProfilerRule, rule_configs

rules = [
    Rule.sagemaker(
        base_config=rule_configs.built_in_rule_name(),
        rule_parameters={
                "key": "value"
        }
        collections_to_save=[ 
            CollectionConfig(
                name="tensor_collection_name", 
                parameters={
                    "key": "value"
                } 
            )
        ]
    )
]
```

`rule_parameters` パラメータで利用可能なキーを見つけるに、パラメータの説明テーブルを参照してください。

パラメータの説明テーブルの下に、各組み込みルールのサンプル設定コードが記載されています。
+ デバッガーの組み込みルールの詳細な説明と使用例については、「[Debugger の組み込みルールのサンプルコード](debugger-built-in-rules-example.md#debugger-deploy-built-in-rules)」を参照してください。
+ 組み込みルールを低レベルの SageMaker API オペレーションで使用する方法の詳細な説明については、「[SageMaker API を使って Debugger を設定する](debugger-createtrainingjob-api.md)」を参照してください。

## CreateXGBoostReport
<a name="create-xgboost-report"></a>

CreateXgboostReport ルールは、XGBoost トレーニングジョブから出力テンソルを収集し、包括的なトレーニングレポートを自動生成します。トレーニングジョブの実行中またはトレーニングジョブの完了後に包括的なプロファイリングレポートをダウンロードし、トレーニングの進行状況またはトレーニングジョブの最終結果をチェックできます。CreateXgboostReport ルールは、デフォルトで次の出力テンソルを収集します。
+ `hyperparameters` - 最初のステップで保存します
+ `metrics` - 5 ステップごとに損失と精度を保存します
+ `feature_importance` - 5 ステップごとに保存します
+ `predictions` - 5 ステップごとに保存します
+ `labels` - 5 ステップごとに保存します

CreateXgboostReport ルールのパラメータの説明


| Parameter Name | 説明 | 
| --- | --- | 
| base\$1trial | 基本トライアルトレーニングジョブ名。このパラメータは、Amazon SageMaker デバッガーによって現在のトレーニングジョブに自動的に設定されます。 **必須** 有効な値: 文字列  | 

```
rules=[
    Rule.sagemaker(
        rule_configs.create_xgboost_report()
    )  
]
```

## DeadRelu
<a name="dead-relu"></a>

このルールは、トライアルにおける正規化線形ユニット (ReLU) 活性化関数の割合が、活性化アクティビティがしきい値を下回ったために死状態と見なされるかどうかを検出します。レイヤ内の非アクティブな ReLU の割合が非アクティブな ReLU `threshold_layer` の値より大きい場合、ルールは `True` を返します。

DeadRelu ルールのパラメータの説明


| Parameter Name | 説明 | 
| --- | --- | 
| base\$1trial |  基本トライアルトレーニングジョブ名。このパラメータは、Amazon SageMaker デバッガーによって現在のトレーニングジョブに自動的に設定されます。 **必須** 有効な値: 文字列  | 
| tensor\$1regex |  この比較を特定のスカラー値テンソルに限定するために使用する正規表現パターンのリスト。このルールは、リストで指定された正規表現パターンに一致するテンソルのみを検査します。パターンが渡されない場合、デフォルト設定により、トライアルで収集されたすべてのテンソルが比較されます。スカラー値テンソルのみを照合できます。 **オプション** 有効な値: 文字列のリストまたはカンマ区切りの文字列  デフォルト値: `".*relu_output"`  | 
| threshold\$1inactivity |  ReLU が死状態と見なされるアクティビティのレベルを定義します。ReLU は、トライアルの開始時にアクティブになり、その後、トレーニングプロセス中にゆっくりと死状態になる場合があります。ReLU が `threshold_inactivity` よりもアクティブでない場合、死状態とみなされます。 **オプション** 有効な値: 浮動小数点数 デフォルト値: `1.0` (パーセント)  | 
| threshold\$1layer |  レイヤ内の非アクティブな ReLU の割合が `threshold_layer` より大きい場合、`True` を返します。 レイヤ内の非アクティブな ReLU の割合が `threshold_layer` より小さい場合、`False` を返します。 **オプション** 有効な値: 浮動小数点数 デフォルト値: `50.0` (パーセント)  | 

```
built_in_rules = [
    Rule.sagemaker(
        base_config=rule_configs.dead_relu(),
        rule_parameters={
                "tensor_regex": ".*relu_output|.*ReLU_output",
                "threshold_inactivity": "1.0",
                "threshold_layer": "50.0"
        },
        collections_to_save=[ 
            CollectionConfig(
                name="custom_relu_collection", 
                parameters={
                    "include_regex: ".*relu_output|.*ReLU_output",
                    "save_interval": "500"
                } 
            )
        ]
    )
]
```

組み込みルールを設定およびデプロイする例については、「[Debugger の組み込みルールの設定方法](use-debugger-built-in-rules.md)」を参照してください。

**注記**  
このルールは、XGBoost アルゴリズムには使用できません。

## ExplodingTensor
<a name="exploding-tensor"></a>

このルールは、トレーニング中に放出されたテンソルが無限または NaN (非数) のいずれかの非有限値を持つかどうかを検出します。非有限値が検出された場合、ルールは `True` を返します。

ExplodingTensor ルールのパラメータの説明


| Parameter Name | 説明 | 
| --- | --- | 
| base\$1trial |  基本トライアルトレーニングジョブ名。このパラメータは、Amazon SageMaker デバッガーによって現在のトレーニングジョブに自動的に設定されます。 **必須** 有効な値: 文字列  | 
| collection\$1names |  ルールが検査するテンソルのコレクション名のリスト。 **オプション** 有効な値: 文字列 デフォルト値: `None`  | 
| tensor\$1regex |  この比較を特定のスカラー値テンソルに限定するために使用する正規表現パターンのリスト。このルールは、リストで指定された正規表現パターンに一致するテンソルのみを検査します。パターンが渡されない場合、デフォルト設定により、トライアルで収集されたすべてのテンソルが比較されます。スカラー値テンソルのみを照合できます。 **オプション** 有効な値: 文字列  デフォルト値: `None`  | 
| only\$1nan |   `True` の場合、`NaN` に対してのみ`base_trial` テンソル値を監視し、無限については監視しません。 `False` の場合、`NaN` と無限の両方を分解値として扱い、両方を監視します。 **オプション** デフォルト値: `False`  | 

```
built_in_rules = [
    Rule.sagemaker(
        base_config=rule_configs.exploding_tensor(),
        rule_parameters={
                "tensor_regex": ".*gradient",
                "only_nan": "False"
        },
        collections_to_save=[ 
            CollectionConfig(
                name="gradients", 
                parameters={
                    "save_interval": "500"
                }
            )
        ]
    )
]
```

組み込みルールを設定およびデプロイする例については、「[Debugger の組み込みルールの設定方法](use-debugger-built-in-rules.md)」を参照してください。

**注記**  
このルールは、XGBoost アルゴリズムには使用できません。

## PoorWeightInitialization
<a name="poor-weight-initialization"></a>

 このルールは、モデルパラメータの初期化が不十分であるかどうかを検出します。

適切な初期化を行うことで、ニューラルネットワークの重みと勾配の対称性が崩れ、レイヤー間で相応の活性化分散が維持されます。さもなければ、ニューラルネットワークは効果的に学習しません。Xavier のようなイニシャライザは、アクティベーション間で分散を一定に保つことを目的としています。これは、非常に深いニューラルネットのトレーニングに特に関連しています。初期化が小さすぎると、勾配が消失する可能性があります。初期化が大きすぎると、勾配が爆発する可能性があります。このルールは、レイヤー間のアクティベーション入力の分散、勾配の分布、および初期ステップの損失収束をチェックし、ニューラルネットワークの初期化が不十分であるかどうかを判断します。

PoorWeightInitialization ルールのパラメータの説明


| Parameter Name | 説明 | 
| --- | --- | 
| base\$1trial |  基本トライアルトレーニングジョブ名。このパラメータは、Amazon SageMaker デバッガーによって現在のトレーニングジョブに自動的に設定されます。 **必須** 有効な値: 文字列  | 
| activation\$1inputs\$1regex |  この比較を特定のスカラー値テンソルに限定するために使用する正規表現パターンのリスト。このルールは、リストで指定された正規表現パターンに一致するテンソルのみを検査します。パターンが渡されない場合、デフォルト設定により、トライアルで収集されたすべてのテンソルが比較されます。スカラー値テンソルのみを照合できます。 **オプション** 有効な値: 文字列 デフォルト値: `".*relu_input"`  | 
| threshold |  レイヤごとの重みの最小分散と最大分散の比率が、あるステップで `threshold` を超えた場合、ルールは `True` を返します。 **オプション** 有効な値: 浮動小数点数 デフォルト値: `10.0`  | 
| distribution\$1range |  勾配分布の 5 パーセンタイルと 95 パーセンタイルの最小差が`distribution_range` より小さい場合、ルールは `True` を返します。 **オプション** 有効な値: 浮動小数点数 デフォルト値: `0.001`  | 
| patience |  損失が減少しなくなったと見なされるまで待機するステップの数。 **オプション** 有効な値: 整数 デフォルト値: `5`  | 
| steps |  このルールが分析するステップの数。通常は、最初の数回のイテレーションのみをチェックする必要があります。 **オプション** 有効な値: 浮動小数点数 デフォルト値: `10`  | 

```
built_in_rules = [
    Rule.sagemaker(
        base_config=rule_configs.poor_weight_initialization(),
        rule_parameters={
                "activation_inputs_regex": ".*relu_input|.*ReLU_input",
                "threshold": "10.0",
                "distribution_range": "0.001",
                "patience": "5",
                "steps": "10"
        },
        collections_to_save=[ 
            CollectionConfig(
                name="custom_relu_collection", 
                parameters={
                    "include_regex": ".*relu_input|.*ReLU_input",
                    "save_interval": "500"
                } 
            )
        ]
    )
]
```

組み込みルールを設定およびデプロイする例については、「[Debugger の組み込みルールの設定方法](use-debugger-built-in-rules.md)」を参照してください。

**注記**  
このルールは、XGBoost アルゴリズムには使用できません。

## SaturatedActivation
<a name="saturated-activation"></a>

このルールは、タンとシグモイド活性化層が飽和状態になっているかどうかを検出します。活性化層は、レイヤの入力が活性化関数の最大値または最小値に近づくと飽和します。タンおよびシグモイド活性化関数の最小値と最大値は、それぞれの `min_threshold` および `max_thresholds` 値によって定義されます。ノードのアクティビティが `threshold_inactivity` の割合を下回ると、そのノードは飽和していると見なされます。ノードの `threshold_layer` パーセント以上が飽和している場合、ルールは `True` を返します。

SaturatedActivation ルールのパラメータの説明


| Parameter Name | 説明 | 
| --- | --- | 
| base\$1trial |  基本トライアルトレーニングジョブ名。このパラメータは、Amazon SageMaker デバッガーによって現在のトレーニングジョブに自動的に設定されます。 **必須** 有効な値: 文字列  | 
| collection\$1names |  ルールが検査するテンソルのコレクション名のリスト。 **オプション** 有効な値: 文字列のリストまたはカンマ区切りの文字列 デフォルト値: なし  | 
| tensor\$1regex |  この比較を特定のスカラー値テンソルに限定するために使用する正規表現パターンのリスト。このルールは、リストで指定された正規表現パターンに一致するテンソルのみを検査します。パターンが渡されない場合、デフォルト設定により、トライアルで収集されたすべてのテンソルが比較されます。スカラー値テンソルのみを照合できます。 **オプション** 有効な値: 文字列  デフォルト値: `".*tanh_input\|.*sigmoid_input".`  | 
| threshold\$1tanh\$1min |  タン活性化関数の入力の極値を定義する最小しきい値と最大しきい値は、`(min_threshold, max_threshold)` のように定義されます。デフォルト値は、消失する勾配しきい値 0.0000001 に基づいて決定されます。 **オプション** 有効な値: 浮動小数点数 デフォルト値: `-9.4999`  | 
| threshold\$1tanh\$1max |  タン活性化関数の入力の極値を定義する最小しきい値と最大しきい値は、`(min_threshold, max_threshold)` のように定義されます。デフォルト値は、消失する勾配しきい値 0.0000001 に基づいて決定されます。 **オプション** 有効な値: 浮動小数点数 デフォルト値: `9.4999`  | 
| threshold\$1sigmoid\$1min |  シグモイド活性化関数の入力の極値を定義する最小しきい値と最大しきい値は、`(min_threshold, max_threshold)` のように定義されます。デフォルト値は、消失する勾配しきい値 0.0000001 に基づいて決定されます。 **オプション** 有効な値: 浮動小数点数 デフォルト値: `-23`  | 
| threshold\$1sigmoid\$1max |  シグモイド活性化関数の入力の極値を定義する最小しきい値と最大しきい値は、`(min_threshold, max_threshold)` のように定義されます。デフォルト値は、消失する勾配しきい値 0.0000001 に基づいて決定されます。 **オプション** 有効な値: 浮動小数点数 デフォルト値: `16.99999`  | 
| threshold\$1inactivity |  活性化層が飽和していると見なされる非アクティブの割合。活性化は、トライアルの開始時にアクティブになり、その後、トレーニングプロセス中に徐々にアクティブでなくなる場合があります。 **オプション** 有効な値: 浮動小数点数 デフォルト値: `1.0`  | 
| threshold\$1layer |  レイヤー内の飽和活性化の数が、`threshold_layer` の割合より大きい場合に `True` を返します。 レイヤー内の飽和活性化の数が、`threshold_layer` の割合より少ない場合に `False` を返します。 **オプション** 有効な値: 浮動小数点数 デフォルト値: `50.0`  | 

```
built_in_rules = [
    Rule.sagemaker(
        base_config=rule_configs.saturated_activation(),
        rule_parameters={
                "tensor_regex": ".*tanh_input|.*sigmoid_input",
                "threshold_tanh_min": "-9.4999",
                "threshold_tanh_max": "9.4999",
                "threshold_sigmoid_min": "-23",
                "threshold_sigmoid_max": "16.99999",
                "threshold_inactivity": "1.0",
                "threshold_layer": "50.0"
        },
        collections_to_save=[ 
            CollectionConfig(
                name="custom_activations_collection",
                parameters={
                    "include_regex": ".*tanh_input|.*sigmoid_input"
                    "save_interval": "500"
                } 
            )
        ]
    )
]
```

組み込みルールを設定およびデプロイする例については、「[Debugger の組み込みルールの設定方法](use-debugger-built-in-rules.md)」を参照してください。

**注記**  
このルールは、XGBoost アルゴリズムには使用できません。

## VanishingGradient
<a name="vanishing-gradient"></a>

このルールは、トライアルの勾配が極端に小さくなるか、またはゼロになっていないかどうかを検出します。勾配の絶対値の平均が指定された `threshold` を下回ると、ルールは `True` を返します。

VanishingGradient ルールのパラメータの説明


| Parameter Name | 説明 | 
| --- | --- | 
| base\$1trial |  基本トライアルトレーニングジョブ名。このパラメータは、Amazon SageMaker デバッガーによって現在のトレーニングジョブに自動的に設定されます。 **必須** 有効な値: 文字列  | 
| threshold | 勾配が消失していると判断される値。**オプション**有効な値: 浮動小数点数デフォルト値: `0.0000001`。 | 

```
built_in_rules = [
    Rule.sagemaker(
        base_config=rule_configs.vanishing_gradient(),
        rule_parameters={
                "threshold": "0.0000001"
        },
        collections_to_save=[ 
            CollectionConfig(
                name="gradients", 
                parameters={
                    "save_interval": "500"
                } 
            )
        ]
    )
]
```

組み込みルールを設定およびデプロイする例については、「[Debugger の組み込みルールの設定方法](use-debugger-built-in-rules.md)」を参照してください。

**注記**  
このルールは、XGBoost アルゴリズムには使用できません。

## WeightUpdateRatio
<a name="weight-update-ratio"></a>

このルールは、トレーニング中に重みに対する更新の比率を追跡し、その比率が大きくなりすぎたり小さくなりすぎたりしていないかどうかを検出します。重みに対する更新の比率が `large_threshold value` より大きい場合、またはこの比率が `small_threshold` より小さい場合、ルールは `True` を返します。

トレーニングの条件は、更新が勾配に比例している場合に最適です。更新が大きすぎると、重みが最適値から遠ざかり、更新が小さすぎると収束が非常に遅くなります。このルールでは、2 つのトレーニングステップで重みを使用できるようにする必要があるため、`train.save_interval` を `num_steps` と等しくなるように設定する必要があります。

WeightUpdateRatio ルールのパラメータの説明


| パラメータ名 | 説明 | 
| --- | --- | 
| base\$1trial |  基本トライアルトレーニングジョブ名。このパラメータは、Amazon SageMaker デバッガーによって現在のトレーニングジョブに自動的に設定されます。 **必須** 有効な値: 文字列  | 
| num\$1steps |  テンソルが変更されたかどうかを判断するためにルールがチェックするステップの数。 重量比を比較するステップの数。値を渡さない場合、ルールはデフォルトで現在のステップと直前に保存したステップに対して実行されます。このパラメータの値を渡してデフォルトをオーバーライドすると、ステップ `s` とステップ `>= s - num_steps` での重みの比較が行われます。 **オプション** 有効な値: 整数 デフォルト値: `None`  | 
| large\$1threshold |  ルールが `True` を返す前に、重みに対する更新の比率が取ることのできる最大値。 **オプション** 有効な値: 浮動小数点数 デフォルト値: `10.0`  | 
| small\$1threshold |  重みに対する更新の比率が取ることのできる最小値。この値を下回ると、ルールは `True` を返します。 **オプション** 有効な値: 浮動小数点数 デフォルト値: `0.00000001`  | 
| epsilon |  重みの更新比率を計算する際、デバッガーがゼロで除算しないようにするために使用される小さな定数。 **オプション** 有効な値: 浮動小数点数 デフォルト値: `0.000000001`  | 

```
built_in_rules = [
    Rule.sagemaker(
        base_config=rule_configs.weight_update_ratio(),
        rule_parameters={
                "num_steps": "100",
                "large_threshold": "10.0",
                "small_threshold": "0.00000001",
                "epsilon": "0.000000001"
        },
        collections_to_save=[ 
            CollectionConfig(
                name="weights", 
                parameters={
                    "train.save_interval": "100"
                } 
            )
        ]
    )
]
```

組み込みルールを設定およびデプロイする例については、「[Debugger の組み込みルールの設定方法](use-debugger-built-in-rules.md)」を参照してください。

**注記**  
このルールは、XGBoost アルゴリズムには使用できません。

## AllZero
<a name="all-zero"></a>

このルールは、テンソル値のすべてまたは指定された割合がゼロかどうかを検出します。

このルールは、サポートされているディープラーニングフレームワーク (TensorFlow、MXNet、PyTorch) のいずれか、または XGBoost アルゴリズムに適用できます。`collection_names` または `tensor_regex` パラメータを指定する必要があります。両方のパラメータが指定されている場合、ルールは両方のセットのテンソルの和集合を検査します。

組み込みルールを設定およびデプロイする例については、「[Debugger の組み込みルールの設定方法](use-debugger-built-in-rules.md)」を参照してください。

AllZero ルールのパラメータの説明


| Parameter Name | 説明 | 
| --- | --- | 
| base\$1trial |  基本トライアルトレーニングジョブ名。このパラメータは、Amazon SageMaker デバッガーによって現在のトレーニングジョブに自動的に設定されます。 **必須** 有効な値: 文字列  | 
| collection\$1names |  ルールが検査するテンソルのコレクション名のリスト。 **オプション** 有効な値: 文字列のリストまたはカンマ区切りの文字列 デフォルト値: `None`  | 
| tensor\$1regex |  この比較を特定のスカラー値テンソルに限定するために使用する正規表現パターンのリスト。このルールは、リストで指定された正規表現パターンに一致するテンソルのみを検査します。パターンが渡されない場合、デフォルト設定により、トライアルで収集されたすべてのテンソルが比較されます。スカラー値テンソルのみを照合できます。 **オプション** 有効な値: 文字列のリストまたはカンマ区切りの文字列 デフォルト値: `None`  | 
| threshold |  このルールが呼び出されるためにゼロにする必要があるテンソル内の値の割合を指定します。 **オプション** 有効な値: 浮動小数点数 デフォルト値: 100 (パーセント)  | 

```
built_in_rules = [
    Rule.sagemaker(
        base_config=rule_configs.all_zero(),
        rule_parameters={
                "tensor_regex": ".*",
                "threshold": "100"
        },
        collections_to_save=[ 
            CollectionConfig(
                name="all", 
                parameters={
                    "save_interval": "500"
                } 
            )
        ]
    )
]
```

## ClassImbalance
<a name="class-imbalance"></a>

このルールは、クラス間のサンプリングの不均衡を測定し、不均衡がしきい値を超えた場合、または不均衡の結果として過度に多くの誤予測が発生した場合にエラーをスローします。

分類モデルには、トレーニングデータセット内のバランスの取れたクラスや、トレーニング中の適切な重み付けやサンプリングが必要です。ルールは次のチェックを実行します。
+  これは、クラスごとの発生をカウントします。最小クラスと最大クラスの間のサンプル数の比率が `threshold_imbalance` より大きい場合、エラーがスローされます。
+  クラスごとの予測精度をチェックします。リサンプリングまたは重み付けが正しく適用されていない場合、トレーニングサンプルが多いクラスの精度は高くなりますが、トレーニングサンプルが少ないクラスの精度は低くなります。特定のクラスの誤予測の一部が `threshold_misprediction` を超える場合は、エラーがスローされます。

このルールは、サポートされているディープラーニングフレームワーク (TensorFlow、MXNet、PyTorch) のいずれか、または XGBoost アルゴリズムに適用できます。

組み込みルールを設定およびデプロイする例については、「[Debugger の組み込みルールの設定方法](use-debugger-built-in-rules.md)」を参照してください。

ClassImbalance ルールのパラメータの説明


| Parameter Name | 説明 | 
| --- | --- | 
| base\$1trial |  基本トライアルトレーニングジョブ名。このパラメータは、Amazon SageMaker デバッガーによって現在のトレーニングジョブに自動的に設定されます。 **必須** 有効な値: 文字列  | 
| threshold\$1imbalance |  最小クラスと最大クラスのサンプル数の間の許容可能な不均衡。このしきい値を超えると、エラーがスローされます。 **オプション** 有効な値: 浮動小数点数 デフォルト値: `10`  | 
| threshold\$1misprediction |  各クラスに許容される誤予測の割合の制限。このしきいを超えると、エラーがスローされます。過小評価されているクラスは、このしきい値を超えるリスクが最も高くなります。 **オプション** 有効な値: 浮動小数点数 デフォルト値: `0.7`  | 
| samples |  不均衡が評価される前に処理する必要があるラベルの数。ルールは、いくつかのステップの十分なサンプルが確認されるまで、トリガーされないことがあります。データセットに含まれるクラスの数が多いほど、この `sample` 数は大きくなります。 **オプション** 有効な値: 整数 デフォルト値: `500` (10 クラスを持つ MNIST のようなデータセットを仮定)  | 
| argmax |  `True` の場合、[np.argmax](https://docs.scipy.org/doc/numpy-1.9.3/reference/generated/numpy.argmax.html) は予測テンソルに適用されます。各クラスの確率ベクトルがある場合に必要です。最も高い確率を持っているクラスを決定するために使用されます。 **条件付き** 有効な値: ブール値 デフォルト値: `False`  | 
| labels\$1regex |  ラベルを含むテンソルの名前。 **オプション** 有効な値: 文字列 デフォルト値: `".*labels"`  | 
| predictions\$1regex |  予測を含むテンソルの名前。 **オプション** 有効な値: 文字列 デフォルト値: `".*predictions"`  | 

```
built_in_rules = [
    Rule.sagemaker(
        base_config=rule_configs.class_imbalance(),
        rule_parameters={
                "threshold_imbalance": "10",
                "threshold_misprediction": "0.7",
                "samples": "500",
                "argmax": "False",
                "labels_regex": ".*labels",
                "predictions_regex": ".*predictions"
        },
        collections_to_save=[ 
            CollectionConfig(
                name="custom_output_collection",
                parameters={
                    "include_regex": ".*labels|.*predictions",
                    "save_interval": "500"
                } 
            )
        ]
    )
]
```

## LossNotDecreasing
<a name="loss-not-decreasing"></a>

このルールは、損失の値が適切な割合で減少していないことを検出します。これらの損失はスカラーでなければなりません。

このルールは、サポートされているディープラーニングフレームワーク (TensorFlow、MXNet、PyTorch) のいずれか、または XGBoost アルゴリズムに適用できます。`collection_names` または `tensor_regex` パラメータを指定する必要があります。両方のパラメータが指定されている場合、ルールは両方のセットのテンソルの和集合を検査します。

組み込みルールを設定およびデプロイする例については、「[Debugger の組み込みルールの設定方法](use-debugger-built-in-rules.md)」を参照してください。

LossNotDecreasing ルールのパラメータの説明


| Parameter Name | 説明 | 
| --- | --- | 
| base\$1trial |  基本トライアルトレーニングジョブ名。このパラメータは、Amazon SageMaker デバッガーによって現在のトレーニングジョブに自動的に設定されます。 **必須** 有効な値: 文字列  | 
| collection\$1names |  ルールが検査するテンソルのコレクション名のリスト。 **オプション** 有効な値: 文字列のリストまたはカンマ区切りの文字列 デフォルト値: `None`  | 
| tensor\$1regex |  この比較を特定のスカラー値テンソルに限定するために使用される正規表現パターンのリスト。このルールは、リストで指定された正規表現パターンに一致するテンソルのみを検査します。パターンが渡されない場合、デフォルト設定により、トライアルで収集されたすべてのテンソルが比較されます。スカラー値テンソルのみを照合できます。 **オプション** 有効な値: 文字列のリストまたはカンマ区切りの文字列  デフォルト値: `None`  | 
| use\$1losses\$1collection |  `True` に設定すると、コレクションが存在する場合に「losses」という名前のコレクションの損失が検索されます。 **オプション** 有効な値: ブール値 デフォルト値: `True`  | 
| num\$1steps |  損失が減少しているかどうかをルールがチェックするまでの最小ステップ数。ルールの評価は `num_steps` ごとに行われます。ルールは、このステップの損失と、現在のステップの少なくとも `num_steps` つ後にあるステップの損失を比較します。例えば、損失を 3 ステップごとに保存し、`num_steps` を 10 に設定するとします。ステップ 21 では、ステップ 21 の損失がステップ 9 の損失と比較されます。損失がチェックされる次のステップはステップ 33 です。これは、ステップ 21 の 10 ステップ後はステップ 31 であり、ステップ 31 とステップ 32 では損失が保存されないためです。 **オプション** 有効な値: 整数 デフォルト値: `10`  | 
| diff\$1percent |  `num_steps` の間で損失が減少する最小パーセント差。 **オプション** 有効な値: `0.0` < 浮動小数点数 < `100` デフォルト値: `0.1` (パーセント)  | 
| increase\$1threshold\$1percent |  損失が増加してきている場合に、損失の増加が許容される最大しきい値の割合 **オプション** 有効な値: `0` < 浮動小数点数 < `100` デフォルト値: `5` (パーセント)  | 
| mode |  ルールチェックのためにテンソル値を照会するデバッガーモードの名前。このパラメータを渡さない場合、ルールはデフォルトで `mode.EVAL`、`mode.TRAIN`、`mode.GLOBAL` の順にチェックします。 **オプション** 有効な値: 文字列 (`EVAL`、`TRAIN`、または `GLOBAL`) デフォルト値: `GLOBAL`  | 

```
built_in_rules = [
    Rule.sagemaker(
        base_config=rule_configs.loss_not_decreasing(),
        rule_parameters={
                "tensor_regex": ".*",
                "use_losses_collection": "True",
                "num_steps": "10",
                "diff_percent": "0.1",
                "increase_threshold_percent": "5",
                "mode": "GLOBAL"
        },
        collections_to_save=[ 
            CollectionConfig(
                name="losses", 
                parameters={
                    "save_interval": "500"
                } 
            )
        ]
    )
]
```

## Overfit
<a name="overfit"></a>

このルールは、検証とトレーニングの損失を比較することにより、モデルがトレーニングデータにオーバーフィットしているかどうかを検出します。

このルールは、サポートされているディープラーニングフレームワーク (TensorFlow、MXNet、PyTorch) のいずれか、または XGBoost アルゴリズムに適用できます。

組み込みルールを設定およびデプロイする例については、「[Debugger の組み込みルールの設定方法](use-debugger-built-in-rules.md)」を参照してください。

**注記**  
オーバーフィットを防ぐ標準的な方法は、モデルを正規化することです。

Overfit ルールのパラメータの説明


| Parameter Name | 説明 | 
| --- | --- | 
| base\$1trial |  基本トライアルトレーニングジョブ名。このパラメータは、Amazon SageMaker デバッガーによって現在のトレーニングジョブに自動的に設定されます。 **必須** 有効な値: 文字列  | 
| tensor\$1regex |  この比較を特定のスカラー値テンソルに限定するために使用する正規表現パターンのリスト。このルールは、リストで指定された正規表現パターンに一致するテンソルのみを検査します。パターンが渡されない場合、デフォルト設定により、トライアルで収集されたすべてのテンソルが比較されます。スカラー値テンソルのみを照合できます。 **オプション** 有効な値: 文字列のリストまたはカンマ区切りの文字列  デフォルト値: なし  | 
| start\$1step |  検証とトレーニング損失の比較を開始するステップ。 **オプション** 有効な値: 整数 デフォルト値: `0`  | 
| patience |  モデルが過適合であるとみなされる前に、`ratio_threshold` が設定された値を超えることを許可されるステップの数。 **オプション** 有効な値: 整数 デフォルト値: `1`  | 
| ratio\$1threshold |  平均検証損失と平均トレーニング損失の間の差と平均トレーニング損失の最大比。`patience` 数のステップでこのしきい値を超えた場合、モデルはオーバーフィットし、ルールは `True` を返します。 **オプション** 有効な値: 浮動小数点数 デフォルト値: `0.1`  | 

```
built_in_rules = [
    Rule.sagemaker(
        base_config=rule_configs.overfit(),
        rule_parameters={
                "tensor_regex": ".*",
                "start_step": "0",
                "patience": "1",
                "ratio_threshold": "0.1"
        },
        collections_to_save=[
            CollectionConfig(
                name="losses", 
                parameters={
                    "train.save_interval": "100",
                    "eval.save_interval": "10"
                } 
            )
        ]
    )
]
```

## Overtraining
<a name="overtraining"></a>

このルールは、モデルがオーバートレーニングされているかどうかを検出します。正常に動作するモデルでトレーニングを何度も繰り返すと (トレーニングと検証の両方の損失が減少)、モデルは損失関数の最小値に近づき、それ以上改善されなくなります。モデルがトレーニングを続けると、オーバーフィットし始めるため、検証損失が増加し始める可能性があります。このルールでは、モデルが改善されていないか判断するしきい値と条件を設定し、オーバートレーニングによるオーバーフィットの問題を防止します。

このルールは、サポートされているディープラーニングフレームワーク (TensorFlow、MXNet、PyTorch) のいずれか、または XGBoost アルゴリズムに適用できます。

組み込みルールを設定およびデプロイする例については、「[Debugger の組み込みルールの設定方法](use-debugger-built-in-rules.md)」を参照してください。

**注記**  
Overtraining は、早期停止によって回避することができます。早期停止の詳細については、「[トレーニングジョブを早期停止する](automatic-model-tuning-early-stopping.md)」を参照してください。デバッガーでスポットトレーニングを使う方法を示す例については、「[Amazon SageMaker デバッガーでスポットトレーニングを有効にする](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-debugger/mxnet_spot_training/mxnet-spot-training-with-sagemakerdebugger.html)」を参照してください。

Overtraining ルールのパラメータの説明


| Parameter Name | 説明 | 
| --- | --- | 
| base\$1trial |  基本トライアルトレーニングジョブ名。このパラメータは、Amazon SageMaker デバッガーによって現在のトレーニングジョブに自動的に設定されます。 **必須** 有効な値: 文字列  | 
| patience\$1train |  トレーニング損失が改善していないとみなされる前に待機するステップ数。 **オプション** 有効な値: 整数 デフォルト値: `5`  | 
| patience\$1validation | 検証の損失が改善していないとみなされる前に待機するステップ数。**オプション**有効な値: 整数デフォルト値: `10` | 
| delta |  エラーが新しい最適要件として見なされる前にどの程度改善すべきかを示す最小しきい値。 **オプション** 有効な値: 浮動小数点数 デフォルト値: `0.01`  | 

```
built_in_rules = [
    Rule.sagemaker(
        base_config=rule_configs.overtraining(),
        rule_parameters={
                "patience_train": "5",
                "patience_validation": "10",
                "delta": "0.01"
        },
        collections_to_save=[ 
            CollectionConfig(
                name="losses", 
                parameters={
                    "save_interval": "500"
                } 
            )
        ]
    )
]
```

## SimilarAcrossRuns
<a name="similar-across-runs"></a>

このルールは、基本トライアルから収集されたテンソルと、別のトライアルからのテンソルを比較します。

このルールは、サポートされているディープラーニングフレームワーク (TensorFlow、MXNet、PyTorch) のいずれか、または XGBoost アルゴリズムに適用できます。

組み込みルールを設定およびデプロイする例については、「[Debugger の組み込みルールの設定方法](use-debugger-built-in-rules.md)」を参照してください。

SimilarAcrossRuns ルールのパラメータの説明


| Parameter Name | 説明 | 
| --- | --- | 
| base\$1trial |  基本トライアルトレーニングジョブ名。このパラメータは、Amazon SageMaker デバッガーによって現在のトレーニングジョブに自動的に設定されます。 **必須** 有効な値: 文字列  | 
| other\$1trials |  現在の `base_trial` から収集したテンソルと比較するテンソルの出力元の完了トレーニングジョブ名。 **必須** 有効な値: 文字列  | 
| collection\$1names |  ルールが検査するテンソルのコレクション名のリスト。 **オプション** 有効な値: 文字列のリストまたはカンマ区切りの文字列 デフォルト値: なし  | 
| tensor\$1regex |  この比較を特定のスカラー値テンソルに限定するために使用する正規表現パターンのリスト。このルールは、リストで指定された正規表現パターンに一致するテンソルのみを検査します。パターンが渡されない場合、デフォルト設定により、トライアルで収集されたすべてのテンソルが比較されます。スカラー値テンソルのみを照合できます。 **オプション** 有効な値: 文字列のリストまたはカンマ区切りの文字列  デフォルト値: なし  | 

```
built_in_rules = [
    Rule.sagemaker(
        base_config=rule_configs.similar_across_runs(),
        rule_parameters={
                "other_trials": "<specify-another-job-name>",
                "collection_names": "losses",
                "tensor_regex": ".*"
        },
        collections_to_save=[ 
            CollectionConfig(
                name="losses", 
                parameters={
                    "save_interval": "500"
                } 
            )
        ]
    )
]
```

## StalledTrainingRule
<a name="stalled-training"></a>

StalledTrainingRule は、トレーニングジョブが進行していないことを検出し、ルールが発動するとトレーニングジョブを停止させます。このルールは、`threshold` パラメータで定義された時間間隔で、定期的にテンソルが保存されていることを必要とします。このルールは新しいテンソルをモニタリングし続け、新しいテンソルがしきい値間隔で出力されなかった場合、ルールを発動します。

StalledTrainingRule ルールのパラメータの説明


| Parameter Name | 説明 | 
| --- | --- | 
| base\$1trial |  基本トライアルトレーニングジョブ名。このパラメータは、Amazon SageMaker デバッガーによって現在のトレーニングジョブに自動的に設定されます。 **必須** 有効な値: 文字列  | 
| threshold |  テンソル出力が停滞したトレーニングの問題を起こすまで、ルールがテンソル出力を待つ時間を秒単位で定義するしきい値。デフォルト値は 1800 秒です。 **オプション** 有効な値: 整数 デフォルト値: `1800`  | 
| stop\$1training\$1on\$1fire |  `True` に設定されている場合、基本トレーニングジョブが「`threshold`」秒でテンソルを出力するかモニタリングします。 **オプション** 有効な値: ブール値 デフォルト値: `False`  | 
| training\$1job\$1name\$1prefix |  基本トレーニングジョブ名のプレフィックス。`stop_training_on_fire` が true の場合、ルールは同じアカウント内でこのプレフィックスを持つ SageMaker トレーニングジョブを検索します。不活動状態が検出された場合、ルールは `StopTrainingJob` アクションを実行します。同じプレフィックスを持つジョブが複数見つかった場合、ルールは終了をスキップすることに注意してください。プレフィックスは、トレーニングジョブごとに一意に設定することが重要です。 **オプション** 有効な値: 文字列  | 

```
built_in_rules = [
    Rule.sagemaker(
        base_config=rule_configs.stalled_training_rule(),
        rule_parameters={
                "threshold": "1800",
                "stop_training_on_fire": "True",
                "training_job_name_prefix": "<specify-training-base-job-name>"
        },
        collections_to_save=[ 
            CollectionConfig(
                name="losses", 
                parameters={
                    "save_interval": "500"
                } 
            )
        ]
    )
]
```

## TensorVariance
<a name="tensor-variance"></a>

このルールは、テンソルの非常に高いまたは低い分散を検出します。テンソルの非常に高いまたは低い分散は、ニューロンの飽和につながり、ニューラルネットワークの学習能力を低下させる可能性があります。テンソルの分散が非常に高いと、最終的にテンソルの爆発につながる可能性があります。このルールを使用すると、このような問題を早期に検出できます。

このルールは、サポートされているディープラーニングフレームワーク (TensorFlow、MXNet、PyTorch) のいずれか、または XGBoost アルゴリズムに適用できます。`collection_names` または `tensor_regex` パラメータを指定する必要があります。両方のパラメータが指定されている場合、ルールは両方のセットのテンソルの和集合を検査します。

組み込みルールを設定およびデプロイする例については、「[Debugger の組み込みルールの設定方法](use-debugger-built-in-rules.md)」を参照してください。

TensorVariance ルールのパラメータの説明


| Parameter Name | 説明 | 
| --- | --- | 
| base\$1trial |  基本トライアルトレーニングジョブ名。このパラメータは、Amazon SageMaker デバッガーによって現在のトレーニングジョブに自動的に設定されます。 **必須** 有効な値: 文字列  | 
| collection\$1names |  ルールが検査するテンソルのコレクション名のリスト。 **オプション** 有効な値: 文字列のリストまたはカンマ区切りの文字列 デフォルト値: なし  | 
| tensor\$1regex |  この比較を特定のスカラー値テンソルに限定するために使用する正規表現パターンのリスト。このルールは、リストで指定された正規表現パターンに一致するテンソルのみを検査します。パターンが渡されない場合、デフォルト設定により、トライアルで収集されたすべてのテンソルが比較されます。スカラー値テンソルのみを照合できます。 **オプション** 有効な値: 文字列のリストまたはカンマ区切りの文字列  デフォルト値: なし  | 
| max\$1threshold |  テンソル分散の上限のしきい値。 **オプション** 有効な値: 浮動小数点数 デフォルト値: なし  | 
| min\$1threshold |  テンソル分散の下限のしきい値。 **オプション** 有効な値: 浮動小数点数 デフォルト値: なし  | 

```
built_in_rules = [
    Rule.sagemaker(
        base_config=rule_configs.tensor_variance(),
        rule_parameters={
                "collection_names": "weights",
                "max_threshold": "10",
                "min_threshold": "0.00001",
        },
        collections_to_save=[ 
            CollectionConfig(
                name="weights", 
                parameters={
                    "save_interval": "500"
                } 
            )
        ]
    )
]
```

## UnchangedTensor
<a name="unchanged-tensor"></a>

このルールは、テンソルがステップ間で変化していないことを検出します。

このルールは、[numpy.allclose](https://docs.scipy.org/doc/numpy/reference/generated/numpy.allclose.html) メソッドを実行し、テンソルが変わっていないかどうかをチェックします。

このルールは、サポートされているディープラーニングフレームワーク (TensorFlow、MXNet、PyTorch) のいずれか、または XGBoost アルゴリズムに適用できます。`collection_names` または `tensor_regex` パラメータを指定する必要があります。両方のパラメータが指定されている場合、ルールは両方のセットのテンソルの和集合を検査します。

組み込みルールを設定およびデプロイする例については、「[Debugger の組み込みルールの設定方法](use-debugger-built-in-rules.md)」を参照してください。

UnchangedTensor ルールのパラメータの説明


| Parameter Name | 説明 | 
| --- | --- | 
| base\$1trial |  基本トライアルトレーニングジョブ名。このパラメータは、Amazon SageMaker デバッガーによって現在のトレーニングジョブに自動的に設定されます。 **必須** 有効な値: 文字列  | 
| collection\$1names |  ルールが検査するテンソルのコレクション名のリスト。 **オプション** 有効な値: 文字列のリストまたはカンマ区切りの文字列 デフォルト値: なし  | 
| tensor\$1regex |  この比較を特定のスカラー値テンソルに限定するために使用する正規表現パターンのリスト。このルールは、リストで指定された正規表現パターンに一致するテンソルのみを検査します。パターンが渡されない場合、デフォルト設定により、トライアルで収集されたすべてのテンソルが比較されます。スカラー値テンソルのみを照合できます。 **オプション** 有効な値: 文字列のリストまたはカンマ区切りの文字列  デフォルト値: なし  | 
| num\$1steps |  テンソルが変更されたかどうかを判断するためにルールがチェックするステップの数。 これにより、使用可能な最後の `num_steps` がチェックされます。ステップの数は連続している必要はありません。`num_steps` が 2 の場合、ステップ s では必ずしも s-1 と s をチェックするとは限りません。s-1 がない場合は、最後の使用可能なステップが s とともにチェックされます。この場合、使用可能な最後のステップが現在のステップでチェックされます。 **オプション** 有効な値: 整数 デフォルト値: `3`  | 
| rtol |  `[numpy.allclose](https://docs.scipy.org/doc/numpy/reference/generated/numpy.allclose.html)` メソッドに渡される相対許容誤差のパラメータ。 **オプション** 有効な値: 浮動小数点数 デフォルト値: `1e-05`  | 
| atol |  `[numpy.allclose](https://docs.scipy.org/doc/numpy/reference/generated/numpy.allclose.html)` メソッドに渡される絶対許容誤差のパラメータ。 **オプション** 有効な値: 浮動小数点数 デフォルト値: `1e-08`  | 
| equal\$1nan |  NaN を等しいものとして比較するかどうかについて。`True` の場合、入力配列 a 内の NaN は、出力配列の入力配列 b の NaN に等しいと見なされます。このパラメータは、`[numpy.allclose](https://docs.scipy.org/doc/numpy/reference/generated/numpy.allclose.html)` メソッドに渡されます。 **オプション** 有効な値: ブール値 デフォルト値: `False`  | 

```
built_in_rules = [
    Rule.sagemaker(
        base_config=rule_configs.unchanged_tensor(),
        rule_parameters={
                "collection_names": "losses",
                "tensor_regex": "",
                "num_steps": "3",
                "rtol": "1e-05",
                "atol": "1e-08",
                "equal_nan": "False"
        },
        collections_to_save=[ 
            CollectionConfig(
                name="losses", 
                parameters={
                    "save_interval": "500"
                } 
            )
        ]
    )
]
```

## CheckInputImages
<a name="checkinput-mages"></a>

このルールは、入力イメージが正しく正規化されているかどうかをチェックします。具体的には、サンプルデータの平均がゼロからのしきい値よりも大きく異なるかどうかを検出します。多くのコンピュータビジョンモデルでは、入力データの平均と単位分散がゼロである必要があります。

このルールは、ディープラーニングアプリケーションに適用できます。

組み込みルールを設定およびデプロイする例については、「[Debugger の組み込みルールの設定方法](use-debugger-built-in-rules.md)」を参照してください。

CheckInputImages ルールのパラメータの説明


| Parameter Name | 説明 | 
| --- | --- | 
| base\$1trial |  基本トライアルトレーニングジョブ名。このパラメータは、Amazon SageMaker デバッガーによって現在のトレーニングジョブに自動的に設定されます。 **必須** 有効な値: 文字列  | 
| threshold\$1mean |  入力データの平均値が 0 からどれだけ異なるかを定義するしきい値。 **オプション** 有効な値: 浮動小数点数 デフォルト値: `0.2`  | 
| threshold\$1samples |  エラーがスローされる前にサンプリングする必要があるイメージの数。値が低すぎると、データセット平均の推定値が不正確になります。 **オプション** 有効な値: 整数 デフォルト値: `500`  | 
| regex |  入力データテンソルの名前。 **オプション** 有効な値: 文字列 デフォルト値: `".*hybridsequential0_input_0"` (HybridSequential を使用した Apache MXNet モデルの入力テンソルの名前)  | 
| channel |  入力テンソル形状配列におけるカラーチャネルの位置。 **オプション** 有効な値: 整数 デフォルト値: `1` (たとえば、MXNet は (batch\$1size, channel, height, width) 形式の入力データを想定しています)  | 

```
built_in_rules = [
    Rule.sagemaker(
        base_config=rule_configs.check_input_images(),
        rule_parameters={
                "threshold_mean": "0.2",
                "threshold_samples": "500",
                "regex": ".*hybridsequential0_input_0",
                "channel": "1"
        },
        collections_to_save=[ 
            CollectionConfig(
                name="custom_inputs_collection", 
                parameters={
                    "include_regex": ".*hybridsequential0_input_0",
                    "save_interval": "500"
                } 
            )
        ]
    )
]
```

## NLPSequenceRatio
<a name="nlp-sequence-ratio"></a>

このルールは、パフォーマンスの最適化に役立つ入力シーケンスの残りの部分を考慮して、特定のトークンの比率を計算します。たとえば、入力シーケンスの文末 (EOS) トークンのパディングの割合を計算できます。EOS トークンの数が多すぎる場合は、代替バケット方針を実行する必要があります。また、入力シーケンス内の未知のトークンの割合を計算することもできます。未知語の数が多すぎる場合は、代替語彙を使用することができます。

このルールは、ディープラーニングアプリケーションに適用できます。

組み込みルールを設定およびデプロイする例については、「[Debugger の組み込みルールの設定方法](use-debugger-built-in-rules.md)」を参照してください。

NLPSequenceRatio ルールのパラメータの説明


| Parameter Name | 説明 | 
| --- | --- | 
| base\$1trial |  基本トライアルトレーニングジョブ名。このパラメータは、Amazon SageMaker デバッガーによって現在のトレーニングジョブに自動的に設定されます。 **必須** 有効な値: 文字列  | 
| tensor\$1regex |  この比較を特定のスカラー値テンソルに限定するために使用する正規表現パターンのリスト。このルールは、リストで指定された正規表現パターンに一致するテンソルのみを検査します。パターンが渡されない場合、デフォルト設定により、トライアルで収集されたすべてのテンソルが比較されます。スカラー値テンソルのみを照合できます。 **オプション** 有効な値: 文字列のリストまたはカンマ区切りの文字列  デフォルト値: `".*embedding0_input_0"` (埋め込みをネットワークの初期レイヤと仮定)  | 
| token\$1values |  トークンの数値のリストの文字列。たとえば、「3、0」のように指定します。 **オプション** 有効な値: カンマ区切りの数値文字列 デフォルト値: `0`  | 
| token\$1thresholds\$1percent |  各 `token_values` に対応するしきい値のリスト (パーセンテージ) の文字列。たとえば、「50.0、50.0」のように指定します。 **オプション** 有効な値: カンマ区切りの浮動小数点数の文字列。 デフォルト値: `"50"`  | 

```
built_in_rules = [
    Rule.sagemaker(
        base_config=rule_configs.nlp_sequence_ratio(),
        rule_parameters={
                "tensor_regex": ".*embedding0_input_0",
                "token_values": "0",
                "token_thresholds_percent": "50"
        },
        collections_to_save=[ 
            CollectionConfig(
                name="custom_inputs_collection", 
                parameters={
                    "include_regex": ".*embedding0_input_0"
                } 
            )
        ]
    )
]
```

## Confusion
<a name="confusion"></a>

このルールは、分類問題に対する混同行列の良さを評価します。

これは、サイズ `category_no*category_no` のマトリックスを作成し、(`labels`、`predictions`) ペアから来るデータを入力します。(`labels`、`predictions`) ペアごとに、`confusion[labels][predictions]` のカウント は 1 ずつ増加します。マトリックスが完全に入力されると、対角値と非対角値の比率は次のように評価されます。
+ 対角線上の要素の場合: `confusion[i][i]/sum_j(confusion[j][j])>=min_diag`
+ 非対角線上の要素の場合: `confusion[j][i])/sum_j(confusion[j][i])<=max_off_diag`

このルールは、XGBoost アルゴリズムに適用できます。

組み込みルールを設定およびデプロイする例については、「[Debugger の組み込みルールの設定方法](use-debugger-built-in-rules.md)」を参照してください。

Confusion ルールのパラメータの説明


| Parameter Name | 説明 | 
| --- | --- | 
| base\$1trial |  基本トライアルトレーニングジョブ名。このパラメータは、Amazon SageMaker デバッガーによって現在のトレーニングジョブに自動的に設定されます。 **必須** 有効な値: 文字列  | 
| category\$1no |  カテゴリの数。 **オプション** 有効な値: 2 以上の整数 デフォルト値: `"None"`  | 
| labels |  `labels` テンソルコレクションまたは正解ラベルの 1 次元ベクトル。 **オプション** 有効な値: 文字列 デフォルト値: `"labels"`  | 
| predictions |  `predictions` テンソルコレクションまたは推定ラベルの 1 次元ベクトル。 **オプション** 有効な値: 文字列 デフォルト値: `"predictions"`  | 
| labels\$1collection |  ルールは、`labels` についてこのコレクションのテンソルを検査します。 **オプション** 有効な値: 文字列 デフォルト値: `"labels"`  | 
| predictions\$1collection |  ルールは、`predictions` についてこのコレクションのテンソルを検査します。 **オプション** 有効な値: 文字列 デフォルト値: `"predictions"`  | 
| min\$1diag |  対角線上のデータの比率の最小しきい値。 **オプション** 有効な値: `0`≤ 浮動小数点数 ≤`1` デフォルト値: `0.9`  | 
| max\$1off\$1diag |  非対角線上のデータの比率の最大しきい値。 **オプション** 有効な値: `0`≤ 浮動小数点数 ≤`1` デフォルト値: `0.1`  | 

```
built_in_rules = [
    Rule.sagemaker(
        base_config=rule_configs.confusion(),
        rule_parameters={
                "category_no": "10",
                "labels": "labels",
                "predictions": "predictions",
                "labels_collection": "labels",
                "predictions_collection": "predictions",
                "min_diag": "0.9",
                "max_off_diag": "0.1"
        },
        collections_to_save=[ 
            CollectionConfig(
                name="labels",
                parameters={
                    "save_interval": "500"
                } 
            ),
            CollectionConfig(
                name="predictions",
                parameters={
                    "include_regex": "500"
                } 
            )
        ]
    )
]
```

**注記**  
このルールでは、オプションのパラメータ値が指定されていない場合、デフォルト値が推測されます。

## FeatureImportanceOverweight
<a name="feature_importance_overweight"></a>

このルールは、ステップごとに上位 n 個の特徴重要度値の重みを累積し、それがしきい値を超えないようにします。例えば、上位 3 つの特徴に対してしきい値を設定して、モデルの総重みの 80% を超えないように設定できます。

このルールは、XGBoost アルゴリズムに対してのみ有効です。

組み込みルールを設定およびデプロイする例については、「[Debugger の組み込みルールの設定方法](use-debugger-built-in-rules.md)」を参照してください。

FeatureImportanceOverweight ルールのパラメータの説明


| Parameter Name | 説明 | 
| --- | --- | 
| base\$1trial |  基本トライアルトレーニングジョブ名。このパラメータは、Amazon SageMaker デバッガーによって現在のトレーニングジョブに自動的に設定されます。 **必須** 有効な値: 文字列  | 
| threshold |  上位 `n` 個の特徴の累積合計の割合についてしきい値を定義します。数値 `n` は、`nfeatures` パラメータで定義されます。 **オプション** 有効な値: 浮動小数点数 デフォルト値: `0.8`  | 
| nfeatures |  上位の特徴の数。 **オプション** 有効な値: 整数 デフォルト値: `3`  | 
| tensor\$1regex |  ルールが分析するテンソル名の正規表現 (regex)。 **オプション** 有効な値: 文字列 デフォルト値: `".*feature_importance/weight"`  | 

```
built_in_rules = [
    Rule.sagemaker(
        base_config=rule_configs.feature_importance_overweight(),
        rule_parameters={
                "threshold": "0.8",
                "nfeatures": "3",
                "tensor_regex": ".*feature_importance/weight"
        },
        collections_to_save=[ 
            CollectionConfig(
                name="feature_importance", 
                parameters={
                    "save_interval": "500"
                } 
            )
        ]
    )
]
```

## TreeDepth
<a name="tree-depth"></a>

このルールは、XGBoost モデルのツリーの深さを測定します。XGBoost は、分割が損失を改善しない場合に分割を拒否します。これにより、トレーニングが正規化されます。その結果、ツリーは `depth` パラメータで定義されているほど深く成長しない可能性があります。

このルールは、XGBoost アルゴリズムに対してのみ有効です。

組み込みルールを設定およびデプロイする例については、「[Debugger の組み込みルールの設定方法](use-debugger-built-in-rules.md)」を参照してください。

TreeDepth ルールのパラメータの説明


| Parameter Name | 説明 | 
| --- | --- | 
| base\$1trial |  基本トライアルトレーニングジョブ名。このパラメータは、Amazon SageMaker デバッガーによって現在のトレーニングジョブに自動的に設定されます。 **必須** 有効な値: 文字列  | 
| depth |  ツリーの深さ。ツリーの深さは、最大のノード ID の 2 対数を計算することによって得られます。 **オプション** 有効な値: 浮動小数点数 デフォルト値: `4`  | 

```
built_in_rules = [
    Rule.sagemaker(
        base_config=rule_configs.tree_depth(),
        rule_parameters={
                "depth": "4"
        },
        collections_to_save=[ 
            CollectionConfig(
                name="tree", 
                parameters={
                    "save_interval": "500"
                } 
            )
        ]
    )
]
```

# Debugger クライアントライブラリを使用してカスタムルールを作成する
<a name="debugger-custom-rules"></a>

Debugger のルール API と、独自のルールコンテナの構築用ツールを提供するオープンソースの [`smdebug` Python ライブラリ](https://github.com/awslabs/sagemaker-debugger/)を使って、トレーニングジョブをモニタリングするカスタムルールを作成できます。

## カスタムルールを作成するための前提条件
<a name="debugger-custom-rules-prerequisite"></a>

デバッガーカスタムルールの作成には、次の前提条件が必要です。
+ [SageMaker デバッガールールカスタム API](https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html#sagemaker.debugger.Rule.custom)
+ [オープンソース smdebug Python ライブラリ](https://github.com/awslabs/sagemaker-debugger/)
+ 独自のカスタムルール python スクリプト
+ [カスタムルール評価用の Amazon SageMaker Debugger イメージの URI](debugger-reference.md#debuger-custom-rule-registry-ids)

**Topics**
+ [カスタムルールを作成するための前提条件](#debugger-custom-rules-prerequisite)
+ [`smdebug` クライアントライブラリを使ってカスタムルールを Python スクリプトとして作成する](debugger-custom-rules-python-script.md)
+ [Debugger API を使って独自のカスタムルールを実行する](debugger-custom-rules-python-sdk.md)

# `smdebug` クライアントライブラリを使ってカスタムルールを Python スクリプトとして作成する
<a name="debugger-custom-rules-python-script"></a>

`smdebug` ルール API は、独自のカスタムルールを設定するためのインターフェイスを提供します。次の Python スクリプトは、カスタムルール `CustomGradientRule` の作成方法のサンプルです。このチュートリアルカスタムルールは、勾配が大きくなりすぎていないかどうかをモニタリングするもので、デフォルトのしきい値を 10 に設定しています。カスタムルールは、トレーニングジョブの開始時に SageMaker AI 推定器によって作成された基本トライアルを実行します。

```
from smdebug.rules.rule import Rule

class CustomGradientRule(Rule):
    def __init__(self, base_trial, threshold=10.0):
        super().__init__(base_trial)
        self.threshold = float(threshold)

    def invoke_at_step(self, step):
        for tname in self.base_trial.tensor_names(collection="gradients"):
            t = self.base_trial.tensor(tname)
            abs_mean = t.reduction_value(step, "mean", abs=True)
            if abs_mean > self.threshold:
                return True
        return False
```

次のセクションでカスタムルールオブジェクトを構築することで、同じ Python スクリプトに必要な数のカスタムルールクラスを追加し、どのトレーニングジョブトライアルにもデプロイできます。

# Debugger API を使って独自のカスタムルールを実行する
<a name="debugger-custom-rules-python-sdk"></a>

次のコードサンプルは、[Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) を使ってカスタムルールを設定する方法を示しています。この例では、前のステップで作成したカスタムルールスクリプトが「*path/to/my\$1custom\$1rule.py*」にあることを前提としています。

```
from sagemaker.debugger import Rule, CollectionConfig

custom_rule = Rule.custom(
    name='MyCustomRule',
    image_uri='759209512951.dkr.ecr.us-west-2.amazonaws.com/sagemaker-debugger-rule-evaluator:latest', 
    instance_type='ml.t3.medium',     
    source='path/to/my_custom_rule.py', 
    rule_to_invoke='CustomGradientRule',     
    collections_to_save=[CollectionConfig("gradients")], 
    rule_parameters={"threshold": "20.0"}
)
```

次のリストでは、デバッガー `Rule.custom` API の引数について説明します。
+ `name` (str): 自由なカスタムルール名を指定します。
+ `image_uri` (str): これは、独自のカスタムルールを理解するロジックを持つコンテナのイメージです。トレーニングジョブで保存した指定されたテンソルコレクションを取得して評価します。オープンソースの SageMaker AI ルールエバリュエーターイメージのリストは、「[カスタムルール評価用の Amazon SageMaker Debugger イメージの URI](debugger-reference.md#debuger-custom-rule-registry-ids)」から参照できます。
+ `instance_type` (str): ルール Docker コンテナを構築するためのインスタンスを指定する必要があります。これにより、トレーニングコンテナと並列でインスタンスがスピンアップされます。
+ `source` (str): これは、カスタムルールスクリプトへのローカルパスまたは Amazon S3 URI です。
+ `rule_to_invoke` (str): カスタムルールスクリプト内の特定のルールクラスの実装を指定します。SageMaker AI がサポートするのは、ルールジョブの中で一度に 1 つだけのルールの評価です。
+ `collections_to_save` (str): ルールを実行するために保存するテンソルコレクションを指定します。
+ `rule_parameters` (dictionary): ディクショナリ形式のパラメータ入力を受け入れます。カスタムルールスクリプトで設定したパラメータを調整できます。

`custom_rule` オブジェクトを設定した後は、どのトレーニングジョブの SageMaker AI 推定器の構築にも使用できます。トレーニングスクリプトへの `entry_point` を指定します。トレーニングスクリプトを変更する必要はありません。

```
from sagemaker.tensorflow import TensorFlow

estimator = TensorFlow(
                role=sagemaker.get_execution_role(),
                base_job_name='smdebug-custom-rule-demo-tf-keras',
                entry_point='path/to/your_training_script.py'
                train_instance_type='ml.p2.xlarge'
                ...
                
                # debugger-specific arguments below
                rules = [custom_rule]
)

estimator.fit()
```

デバッガーのカスタムルールを使うその他のバリエーションと高度な例については、次のサンプルノートブックを参照してください。
+ [Amazon SageMaker デバッガーのカスタムルールを使ってトレーニングジョブをモニタリングする](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-debugger/tensorflow_keras_custom_rule/tf-keras-custom-rule.html)
+ [ResNet と AlexNet の PyTorch 反復モデルプルーニング](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/sagemaker-debugger/pytorch_iterative_model_pruning)
+ [TensorFlow のトレーニングステータスに基づいてアクションを実行するためのデバッガールールを使って Amazon CloudWatch Events をトリガーする](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/sagemaker-debugger/tensorflow_action_on_rule)

# カスタムトレーニングで Debugger を使用する
<a name="debugger-bring-your-own-container"></a>

Amazon SageMaker Debugger は、Amazon SageMaker AI に持ち込むすべての深層学習モデルで使用できます。 AWS CLI、SageMaker AI `Estimator` API、およびデバッガー APIs を使用すると、任意の Docker ベースイメージを使用してコンテナを構築およびカスタマイズしてモデルをトレーニングできます。カスタマイズされたコンテナと共にデバッガーを使うには、トレーニングスクリプトに最小限の変更を加えてデバッガーフックコールバックを実装し、トレーニングジョブからテンソルを取得する必要があります。以下のセクションでは、カスタムのトレーニングコンテナでデバッガーを使用する方法を説明します。

デバッガーと一体のカスタマイズされたコンテナを構築するには、次のリソースが必要です。
+ [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable)
+ [SMDebug オープンソースクライアントライブラリ](https://github.com/awslabs/sagemaker-debugger)
+ 任意の Docker ベースイメージ
+ デバッガーフックが登録されたトレーニングスクリプト - デバッガーフックをトレーニングスクリプトに登録する方法の詳細については、「[デバッガーフックをトレーニングスクリプトに登録する](#debugger-script-mode)」を参照してください。

カスタムトレーニングコンテナと共にデバッガーを使用するエンドツーエンドの例については、次のサンプルノートブックを参照してください。
+ [カスタムトレーニングコンテナを構築し、デバッガーでトレーニングジョブをデバッグする](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-debugger/build_your_own_container_with_debugger/debugger_byoc.html)

**ヒント**  
このカスタムコンテナとデバッガーのガイドは、カスタムトレーニングコンテナを構築し、Amazon ECR にプッシュする方法を具体的に説明する「[独自のトレーニングコンテナの適応](adapt-training-container.md)」ガイドの拡張版です。

## カスタムトレーニングコンテナ構築の準備をする
<a name="debugger-bring-your-own-container-1"></a>

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
```

## デバッガーフックをトレーニングスクリプトに登録する
<a name="debugger-script-mode"></a>

モデルトレーニングをデバッグするには、トレーニングスクリプトにデバッガーフックを追加する必要があります。

**注記**  
このステップは、モデルトレーニングをデバッグするためのモデルパラメータ (出力テンソル) を収集するために必要です。モニタリングとプロファイリングのみを行う場合は、このフック登録ステップを省略でき、推定器を構築するときに `debugger_hook_config` パラメータを除外できます。

次のサンプルコードは、Keras ResNet50 モデルを使用したトレーニングスクリプトの構造と、デバッグのための Keras コールバックとしてデバッガーフックを渡す方法を示しています。完全なトレーニングスクリプトについては、「[SageMaker デバッガーフックを使用した TensorFlow トレーニングスクリプト](https://github.com/aws/amazon-sagemaker-examples/blob/master/sagemaker-debugger/build_your_own_container_with_debugger/docker/tf_keras_resnet_byoc.py)」を参照してください。

```
# 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 クライアントライブラリの次のリンクを参照してください。
+ [SMDebug TensorFlow フック](https://github.com/awslabs/sagemaker-debugger/blob/master/docs/tensorflow.md)
+ [SMDebug PyTorch フック](https://github.com/awslabs/sagemaker-debugger/blob/master/docs/pytorch.md)
+ [SMDebug MXNet フック](https://github.com/awslabs/sagemaker-debugger/blob/master/docs/mxnet.md)
+ [SMDebug XGBoost フック](https://github.com/awslabs/sagemaker-debugger/blob/master/docs/xgboost.md)

次のサンプルノートブックのトレーニングスクリプトには、デバッガーフックをトレーニングスクリプトに追加し、詳細な出力テンソルを収集する方法についてのより多くの例が含まれています。
+ [TensorFlow 2.1 フレームワークを使用したスクリプトモードのデバッガー](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-debugger/tensorflow2/tensorflow2_keras_custom_container/tf2-keras-custom-container.html)

  Deep Learning Containers での Debugger の使用とスクリプトモードでの Debugger の使用の違いを確認するには、このノートブックを開き、[Deep Learning Containers TensorFlow v2.1 での前の Debugger のノートブック例](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-debugger/tensorflow2/tensorflow2_zero_code_change/tf2-keras-default-container.html)を並べて配置してください。

   スクリプトモードでは、フック設定部分は、推定器を設定するスクリプトから削除されます。代わりに、 デバッガーフック機能は、トレーニングスクリプトである[スクリプトモードの TensorFlow Keras ResNet トレーニングスクリプト](https://github.com/awslabs/amazon-sagemaker-examples/blob/master/sagemaker-debugger/tensorflow2/tensorflow2_keras_custom_container/src/tf_keras_resnet_byoc.py)にマージされます。トレーニングスクリプトにより、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 デバッガーを使用する](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/sagemaker-debugger/pytorch_custom_container)

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

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

  このノートブックでは、[元の PyTorch トレーニングスクリプト](https://github.com/pytorch/examples/blob/master/mnist/main.py)をデバッガーを有効にした修正バージョンに変更する詳細なステップを示しています。さらに、この例では、デバッガーの組み込みルールを使って、勾配消失などのトレーニングの問題を検出する方法と、保存されたテンソルの呼び出しと分析を行うデバッガーのトライアル機能を示しています。

## Dockerfile を作成して設定する
<a name="debugger-bring-your-own-container-2"></a>

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 深層学習コンテナイメージ](https://aws.amazon.com/releasenotes/available-deep-learning-containers-images/)」を参照してください。

## カスタムトレーニングイメージを構築して Amazon ECR にプッシュする
<a name="debugger-bring-your-own-container-3"></a>

テストノートブック `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
```

## カスタムトレーニングコンテナを使ってトレーニングジョブを実行してデバッグする
<a name="debugger-bring-your-own-container-4"></a>

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()
```

# SageMaker API を使って Debugger を設定する
<a name="debugger-createtrainingjob-api"></a>

 前述のトピックでは、 AWS SDK for Python (Boto3) および SageMaker API オペレーションのラッパーである Amazon SageMaker Python SDK を介したデバッガーの使用に焦点を当てています。これにより、Amazon SageMaker API オペレーションにアクセスするための高レベルのエクスペリエンスが提供されます。Java、Go、C\$1\$1 などの他の SDKs に AWS Boto3 または AWS Command Line Interface (CLI) を使用して SageMaker API オペレーションを手動で設定する必要がある場合は、このセクションで以下の低レベル API オペレーションを設定する方法について説明します。

**Topics**
+ [JSON (AWS CLI)](debugger-built-in-rules-api.CLI.md)
+ [SDK for Python (Boto3)](debugger-built-in-rules-api.Boto3.md)

# JSON (AWS CLI)
<a name="debugger-built-in-rules-api.CLI"></a>

Amazon SageMaker Debugger の組み込みルールは、SageMaker AI [CreateTrainingJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) API オペレーションを介して、[DebugHookConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DebugHookConfig.html)、[DebugRuleConfiguration](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DebugRuleConfiguration.html)、[ProfilerConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProfilerConfig.html)、[ProfilerRuleConfiguration](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProfilerRuleConfiguration.html) オブジェクトを使ってトレーニングジョブ用に設定できます。`RuleEvaluatorImage` パラメータで正しいイメージ URI を指定する必要があります。次の例では、[CreateTrainingJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) をリクエストする JSON 文字列を設定する方法を具体的に説明します。

次のコードは、必要な設定とデバッガー設定でトレーニングジョブを実行するための完全な JSON テンプレートを示しています。テンプレートを JSON ファイルとして作業ディレクトリに保存し、CLI AWS を使用してトレーニングジョブを実行します。例えば、次のコードを `debugger-training-job-cli.json` として保存します。

**注記**  
正しい Docker コンテナイメージを使っていることを確認してください。 AWS 深層学習コンテナイメージを検索するには、[「利用可能な深層学習コンテナイメージ](https://github.com/aws/deep-learning-containers/blob/master/available_images.md)」を参照してください。デバッガールールを使用するために利用可能な Docker イメージの完全なリストを見つけるには、「[Debugger ルールの Docker イメージ](debugger-reference.md#debugger-docker-images-rules)」を参照してください。

```
{
   "TrainingJobName": "debugger-aws-cli-test",
   "RoleArn": "arn:aws:iam::111122223333:role/service-role/AmazonSageMaker-ExecutionRole-YYYYMMDDT123456",
   "AlgorithmSpecification": {
      // Specify a training Docker container image URI (Deep Learning Container or your own training container) to TrainingImage.
      "TrainingImage": "763104351884.dkr.ecr.us-west-2.amazonaws.com/tensorflow-training:2.4.1-gpu-py37-cu110-ubuntu18.04",
      "TrainingInputMode": "File",
      "EnableSageMakerMetricsTimeSeries": false
   },
   "HyperParameters": {
      "sagemaker_program": "entry_point/tf-hvd-train.py",
      "sagemaker_submit_directory": "s3://sagemaker-us-west-2-111122223333/debugger-boto3-profiling-test/source.tar.gz"
   },
   "OutputDataConfig": { 
      "S3OutputPath": "s3://sagemaker-us-west-2-111122223333/debugger-aws-cli-test/output"
   },
   "DebugHookConfig": { 
      "S3OutputPath": "s3://sagemaker-us-west-2-111122223333/debugger-aws-cli-test/debug-output",
      "CollectionConfigurations": [
         {
            "CollectionName": "losses",
            "CollectionParameters" : {
                "train.save_interval": "50"
            }
         }
      ]
   },
   "DebugRuleConfigurations": [ 
      { 
         "RuleConfigurationName": "LossNotDecreasing",
         "RuleEvaluatorImage": "895741380848.dkr.ecr.us-west-2.amazonaws.com/sagemaker-debugger-rules:latest",
         "RuleParameters": {"rule_to_invoke": "LossNotDecreasing"}
      }
   ],
   "ProfilerConfig": { 
      "S3OutputPath": "s3://sagemaker-us-west-2-111122223333/debugger-aws-cli-test/profiler-output",
      "ProfilingIntervalInMilliseconds": 500,
      "ProfilingParameters": {
          "DataloaderProfilingConfig": "{\"StartStep\": 5, \"NumSteps\": 3, \"MetricsRegex\": \".*\", }",
          "DetailedProfilingConfig": "{\"StartStep\": 5, \"NumSteps\": 3, }",
          "PythonProfilingConfig": "{\"StartStep\": 5, \"NumSteps\": 3, \"ProfilerName\": \"cprofile\", \"cProfileTimer\": \"total_time\"}",
          "LocalPath": "/opt/ml/output/profiler/" 
      }
   },
   "ProfilerRuleConfigurations": [ 
      { 
         "RuleConfigurationName": "ProfilerReport",
         "RuleEvaluatorImage": "895741380848.dkr.ecr.us-west-2.amazonaws.com/sagemaker-debugger-rules:latest",
         "RuleParameters": {"rule_to_invoke": "ProfilerReport"}
      }
   ],
   "ResourceConfig": { 
      "InstanceType": "ml.p3.8xlarge",
      "InstanceCount": 1,
      "VolumeSizeInGB": 30
   },
   
   "StoppingCondition": { 
      "MaxRuntimeInSeconds": 86400
   }
}
```

JSON ファイルを保存したら、ターミナルで次のコマンドを実行します。(Jupyter ノートブックを使用している場合は、行の先頭で `!` を使用してください)。

```
aws sagemaker create-training-job --cli-input-json file://debugger-training-job-cli.json
```

## モデルパラメータをデバッグするためのデバッガールールを設定するには
<a name="debugger-built-in-rules-api-debug.CLI"></a>

次のコードサンプルは、この SageMaker API を使って組み込み `VanishingGradient` ルールを設定する方法を示しています。

**デバッガーが出力テンソルを収集できるようにするには**

デバッガーフック設定を次のように指定します。

```
"DebugHookConfig": {
    "S3OutputPath": "s3://<default-bucket>/<training-job-name>/debug-output",
    "CollectionConfigurations": [
        {
            "CollectionName": "gradients",
            "CollectionParameters" : {
                "save_interval": "500"
            }
        }
    ]
}
```

これにより、トレーニングジョブは 500 ステップの `save_interval` ごとに、テンソルコレクション、`gradients` を保存します。利用可能な `CollectionName` 値を見つけるには、*SMDebug クライアントライブラリドキュメント*の「[デバッガー組み込みコレクション](https://github.com/awslabs/sagemaker-debugger/blob/master/docs/api.md#built-in-collections)」を参照してください。利用可能な `CollectionParameters` パラメータのキーと値を見つけるには、*SageMaker Python SDK ドキュメント*の [https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html#sagemaker.debugger.CollectionConfig](https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html#sagemaker.debugger.CollectionConfig) クラスを参照してください。

**出力テンソルをデバッグするためのデバッガールールを有効にするには**

次の `DebugRuleConfigurations` API の例は、保存された `gradients` コレクションで組み込みの `VanishingGradient` ルールを実行する方法を示しています。

```
"DebugRuleConfigurations": [
    {
        "RuleConfigurationName": "VanishingGradient",
        "RuleEvaluatorImage": "503895931360.dkr.ecr.us-east-1.amazonaws.com/sagemaker-debugger-rules:latest",
        "RuleParameters": {
            "rule_to_invoke": "VanishingGradient",
            "threshold": "20.0"
        }
    }
]
```

このサンプルのような設定では、デバッガーは `gradients` テンソルのコレクションで `VanishingGradient` ルールを使ってトレーニングジョブのルール評価ジョブを開始します。デバッガールールを使用するために利用可能な Docker イメージの完全なリストを見つけるには、「[Debugger ルールの Docker イメージ](debugger-reference.md#debugger-docker-images-rules)」を参照してください。`RuleParameters` のキーバリューのペアを見つけるには、「[デバッガーの組み込みルールのリスト](debugger-built-in-rules.md)」を参照してください。

## システムおよびフレームワークのメトリクスをプロファイリングするためのデバッガー組み込みルールを設定するには
<a name="debugger-built-in-rules-api-profile.CLI"></a>

次のサンプルコードは、Profiler Config API オペレーションを指定して、システムおよびフレームワークのメトリクスの収集を有効にする方法を示しています。

**システムおよびフレームワークのメトリクスを収集するためにデバッガープロファイリングを有効にするには**

------
#### [ Target Step ]

```
"ProfilerConfig": { 
    // Optional. Path to an S3 bucket to save profiling outputs
    "S3OutputPath": "s3://<default-bucket>/<training-job-name>/profiler-output", 
    // Available values for ProfilingIntervalInMilliseconds: 100, 200, 500, 1000 (1 second), 5000 (5 seconds), and 60000 (1 minute) milliseconds.
    "ProfilingIntervalInMilliseconds": 500, 
    "ProfilingParameters": {
        "DataloaderProfilingConfig": "{ \"StartStep\": 5, \"NumSteps\": 3, \"MetricsRegex\": \".*\" }",
        "DetailedProfilingConfig": "{ \"StartStep\": 5, \"NumSteps\": 3 }",
        // For PythonProfilingConfig,
        // available ProfilerName options: cProfile, Pyinstrument
        // available cProfileTimer options only when using cProfile: cpu, off_cpu, total_time
        "PythonProfilingConfig": "{ \"StartStep\": 5, \"NumSteps\": 3, \"ProfilerName\": \"cProfile\", \"cProfileTimer\": \"total_time\" }",
        // Optional. Local path for profiling outputs
        "LocalPath": "/opt/ml/output/profiler/" 
    }
}
```

------
#### [ Target Time Duration ]

```
"ProfilerConfig": { 
    // Optional. Path to an S3 bucket to save profiling outputs
    "S3OutputPath": "s3://<default-bucket>/<training-job-name>/profiler-output", 
    // Available values for ProfilingIntervalInMilliseconds: 100, 200, 500, 1000 (1 second), 5000 (5 seconds), and 60000 (1 minute) milliseconds.
    "ProfilingIntervalInMilliseconds": 500,
    "ProfilingParameters": {
        "DataloaderProfilingConfig": "{ \"StartTimeInSecSinceEpoch\": 12345567789, \"DurationInSeconds\": 10, \"MetricsRegex\": \".*\" }",
        "DetailedProfilingConfig": "{ \"StartTimeInSecSinceEpoch\": 12345567789, \"DurationInSeconds\": 10 }",
        // For PythonProfilingConfig,
        // available ProfilerName options: cProfile, Pyinstrument
        // available cProfileTimer options only when using cProfile: cpu, off_cpu, total_time
        "PythonProfilingConfig": "{ \"StartTimeInSecSinceEpoch\": 12345567789, \"DurationInSeconds\": 10, \"ProfilerName\": \"cProfile\", \"cProfileTimer\": \"total_time\" }",
        // Optional. Local path for profiling outputs
        "LocalPath": "/opt/ml/output/profiler/"  
    }
}
```

------

**メトリクスをプロファイリングするためのデバッガールールを有効にするには**

次のサンプルコードは、`ProfilerReport` ルールの設定方法を示しています。

```
"ProfilerRuleConfigurations": [ 
    {
        "RuleConfigurationName": "ProfilerReport",
        "RuleEvaluatorImage": "895741380848.dkr.ecr.us-west-2.amazonaws.com/sagemaker-debugger-rules:latest",
        "RuleParameters": {
            "rule_to_invoke": "ProfilerReport",
            "CPUBottleneck_cpu_threshold": "90",
            "IOBottleneck_threshold": "90"
        }
    }
]
```

デバッガールールを使用するために利用可能な Docker イメージの完全なリストを見つけるには、「[Debugger ルールの Docker イメージ](debugger-reference.md#debugger-docker-images-rules)」を参照してください。`RuleParameters` のキーバリューのペアを見つけるには、「[デバッガーの組み込みルールのリスト](debugger-built-in-rules.md)」を参照してください。

## `UpdateTrainingJob` API オペレーションを使って Debugger プロファイリング設定を更新する
<a name="debugger-updatetrainingjob-api.CLI"></a>

[UpdateTrainingJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateTrainingJob.html) API オペレーションを使用すると、トレーニングジョブの実行中にデバッガープロファイリング設定を更新できます。新しい [ProfilerConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProfilerConfig.html) および [ProfilerRuleConfiguration](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProfilerRuleConfiguration.html) オブジェクトを設定し、`TrainingJobName` パラメータにトレーニングジョブ名を指定します。

```
{
    "ProfilerConfig": { 
        "DisableProfiler": boolean,
        "ProfilingIntervalInMilliseconds": number,
        "ProfilingParameters": { 
            "string" : "string" 
        }
    },
    "ProfilerRuleConfigurations": [ 
        { 
            "RuleConfigurationName": "string",
            "RuleEvaluatorImage": "string",
            "RuleParameters": { 
                "string" : "string" 
            }
        }
    ],
    "TrainingJobName": "your-training-job-name-YYYY-MM-DD-HH-MM-SS-SSS"
}
```

## `CreateTrainingJob` API に Debugger のカスタムルール設定を追加する
<a name="debugger-custom-rules-api.CLI"></a>

カスタムルールは、[CreateTrainingJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) API オペレーションで [ DebugHookConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DebugHookConfig.html) および [DebugRuleConfiguration](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DebugRuleConfiguration.html) オブジェクトを使って、トレーニングジョブ用に設定できます。次のコードサンプルは、この SageMaker API オペレーションを使用して、*smdebug* ライブラリを使って記述されたカスタム `ImproperActivation` ルールを設定する方法を示しています。この例では、カスタムルールを *custom\$1rules.py* ファイルに記述し、Amazon S3 バケットにアップロード済みであることを前提としています。例では、カスタムルールを実行するために使用できる構築済み Docker イメージを提供しています。これらについては、「[カスタムルール評価用の Amazon SageMaker Debugger イメージの URI](debugger-reference.md#debuger-custom-rule-registry-ids)」を参照してください。`RuleEvaluatorImage` パラメータで、ビルド済み Docker イメージの URL レジストリアドレスを指定します。

```
"DebugHookConfig": {
    "S3OutputPath": "s3://<default-bucket>/<training-job-name>/debug-output",
    "CollectionConfigurations": [
        {
            "CollectionName": "relu_activations",
            "CollectionParameters": {
                "include_regex": "relu",
                "save_interval": "500",
                "end_step": "5000"
            }
        }
    ]
},
"DebugRulesConfigurations": [
    {
        "RuleConfigurationName": "improper_activation_job",
        "RuleEvaluatorImage": "552407032007.dkr.ecr.ap-south-1.amazonaws.com/sagemaker-debugger-rule-evaluator:latest",
        "InstanceType": "ml.c4.xlarge",
        "VolumeSizeInGB": 400,
        "RuleParameters": {
           "source_s3_uri": "s3://bucket/custom_rules.py",
           "rule_to_invoke": "ImproperActivation",
           "collection_names": "relu_activations"
        }
    }
]
```

デバッガールールを使用するために利用可能な Docker イメージの完全なリストを見つけるには、「[Debugger ルールの Docker イメージ](debugger-reference.md#debugger-docker-images-rules)」を参照してください。`RuleParameters` のキーバリューのペアを見つけるには、「[デバッガーの組み込みルールのリスト](debugger-built-in-rules.md)」を参照してください。

# SDK for Python (Boto3)
<a name="debugger-built-in-rules-api.Boto3"></a>

Amazon SageMaker Debugger の組み込みルールは、 AWS Boto3 SageMaker AI クライアントの [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_training_job](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_training_job)関数を使用してトレーニングジョブ用に設定できます。正しいイメージ URI を`RuleEvaluatorImage` パラメータに指定する必要があります。次の例では、[https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_training_job](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_training_job) 関数のリクエストボディの設定方法を具体的に説明します。

次のコードは、トレーニングスクリプト `entry_point/train.py` が TensorFlow を使って準備されていることを前提に、`create_training_job()` リクエストボディにデバッガーを設定し、`us-west-2` でトレーニングジョブを開始する方法の完全な例を示しています。エンドツーエンドのサンプルノートブックを見つけるには、「[Amazon SageMaker デバッガー (Boto3) を使って TensorFlow マルチ GPU マルチノードトレーニングジョブをプロファイリングする](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-debugger/tensorflow_profiling/tf-resnet-profiling-multi-gpu-multi-node-boto3.html)」を参照してください。

**注記**  
正しい Docker コンテナイメージを使っていることを確認してください。利用可能な AWS Deep Learning Container イメージを確認するには、[「利用可能な Deep Learning Containers イメージ](https://github.com/aws/deep-learning-containers/blob/master/available_images.md)」を参照してください。デバッガールールを使用するために利用可能な Docker イメージの完全なリストを見つけるには、「[Debugger ルールの Docker イメージ](debugger-reference.md#debugger-docker-images-rules)」を参照してください。

```
import sagemaker, boto3
import datetime, tarfile

# Start setting up a SageMaker session and a Boto3 SageMaker client
session = sagemaker.Session()
region = session.boto_region_name
bucket = session.default_bucket()

# Upload a training script to a default Amazon S3 bucket of the current SageMaker session
source = 'source.tar.gz'
project = 'debugger-boto3-test'

tar = tarfile.open(source, 'w:gz')
tar.add ('entry_point/train.py') # Specify the directory and name of your training script
tar.close()

s3 = boto3.client('s3')
s3.upload_file(source, bucket, project+'/'+source)

# Set up a Boto3 session client for SageMaker
sm = boto3.Session(region_name=region).client("sagemaker")

# Start a training job
sm.create_training_job(
    TrainingJobName='debugger-boto3-'+datetime.datetime.now().strftime('%Y-%m-%d-%H-%M-%S'),
    HyperParameters={
        'sagemaker_submit_directory': 's3://'+bucket+'/'+project+'/'+source,
        'sagemaker_program': '/entry_point/train.py' # training scrip file location and name under the sagemaker_submit_directory
    },
    AlgorithmSpecification={
        # Specify a training Docker container image URI (Deep Learning Container or your own training container) to TrainingImage.
        'TrainingImage': '763104351884.dkr.ecr.us-west-2.amazonaws.com/tensorflow-training:2.4.1-gpu-py37-cu110-ubuntu18.04',
        'TrainingInputMode': 'File',
        'EnableSageMakerMetricsTimeSeries': False
    },
    RoleArn='arn:aws:iam::111122223333:role/service-role/AmazonSageMaker-ExecutionRole-20201014T161125',
    OutputDataConfig={'S3OutputPath': 's3://'+bucket+'/'+project+'/output'},
    ResourceConfig={
        'InstanceType': 'ml.p3.8xlarge',
        'InstanceCount': 1,
        'VolumeSizeInGB': 30
    },
    StoppingCondition={
        'MaxRuntimeInSeconds': 86400
    },
    DebugHookConfig={
        'S3OutputPath': 's3://'+bucket+'/'+project+'/debug-output',
        'CollectionConfigurations': [
            {
                'CollectionName': 'losses',
                'CollectionParameters' : {
                    'train.save_interval': '500',
                    'eval.save_interval': '50'
                }
            }
        ]
    },
    DebugRuleConfigurations=[
        {
            'RuleConfigurationName': 'LossNotDecreasing',
            'RuleEvaluatorImage': '895741380848.dkr.ecr.us-west-2.amazonaws.com/sagemaker-debugger-rules:latest',
            'RuleParameters': {'rule_to_invoke': 'LossNotDecreasing'}
        }
    ],
    ProfilerConfig={
        'S3OutputPath': 's3://'+bucket+'/'+project+'/profiler-output',
        'ProfilingIntervalInMilliseconds': 500,
        'ProfilingParameters': {
            'DataloaderProfilingConfig': '{"StartStep": 5, "NumSteps": 3, "MetricsRegex": ".*", }',
            'DetailedProfilingConfig': '{"StartStep": 5, "NumSteps": 3, }',
            'PythonProfilingConfig': '{"StartStep": 5, "NumSteps": 3, "ProfilerName": "cprofile", "cProfileTimer": "total_time"}',
            'LocalPath': '/opt/ml/output/profiler/' # Optional. Local path for profiling outputs
        }
    },
    ProfilerRuleConfigurations=[
        {
            'RuleConfigurationName': 'ProfilerReport',
            'RuleEvaluatorImage': '895741380848.dkr.ecr.us-west-2.amazonaws.com/sagemaker-debugger-rules:latest',
            'RuleParameters': {'rule_to_invoke': 'ProfilerReport'}
        }
    ]
)
```

## モデルパラメータをデバッグするためのデバッガールールを設定するには
<a name="debugger-built-in-rules-api-debug.Boto3"></a>

次のコードサンプルは、この SageMaker API を使って組み込み `VanishingGradient` ルールを設定する方法を示しています。

**デバッガーが出力テンソルを収集できるようにするには**

デバッガーフック設定を次のように指定します。

```
DebugHookConfig={
    'S3OutputPath': 's3://<default-bucket>/<training-job-name>/debug-output',
    'CollectionConfigurations': [
        {
            'CollectionName': 'gradients',
            'CollectionParameters' : {
                'train.save_interval': '500',
                'eval.save_interval': '50'
            }
        }
    ]
}
```

これにより、トレーニングジョブは 500 ステップの `gradients` ごとに、テンソルコレクション、`save_interval` を保存します。利用可能な `CollectionName` 値を見つけるには、*SMDebug クライアントライブラリドキュメント*の「[デバッガー組み込みコレクション](https://github.com/awslabs/sagemaker-debugger/blob/master/docs/api.md#built-in-collections)」を参照してください。利用可能な `CollectionParameters` パラメータのキーと値を見つけるには、*SageMaker Python SDK ドキュメント*の [https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html#sagemaker.debugger.CollectionConfig](https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html#sagemaker.debugger.CollectionConfig) クラスを参照してください。

**出力テンソルをデバッグするためのデバッガールールを有効にするには**

次の `DebugRuleConfigurations` API の例は、保存された `gradients` コレクションで組み込みの `VanishingGradient` ルールを実行する方法を示しています。

```
DebugRuleConfigurations=[
    {
        'RuleConfigurationName': 'VanishingGradient',
        'RuleEvaluatorImage': '895741380848.dkr.ecr.us-west-2.amazonaws.com/sagemaker-debugger-rules:latest',
        'RuleParameters': {
            'rule_to_invoke': 'VanishingGradient',
            'threshold': '20.0'
        }
    }
]
```

このサンプルのような設定では、デバッガーは `gradients` テンソルのコレクションで `VanishingGradient` ルールを使ってトレーニングジョブのルール評価ジョブを開始します。デバッガールールを使用するために利用可能な Docker イメージの完全なリストを見つけるには、「[Debugger ルールの Docker イメージ](debugger-reference.md#debugger-docker-images-rules)」を参照してください。`RuleParameters` のキーバリューのペアを見つけるには、「[デバッガーの組み込みルールのリスト](debugger-built-in-rules.md)」を参照してください。

## システムおよびフレームワークのメトリクスをプロファイリングするためのデバッガー組み込みルールを設定するには
<a name="debugger-built-in-rules-api-profile.Boto3"></a>

次のサンプルコードは、Profiler Config API オペレーションを指定して、システムおよびフレームワークのメトリクスの収集を有効にする方法を示しています。

**システムおよびフレームワークのメトリクスを収集するためにデバッガープロファイリングを有効にするには**

------
#### [ Target Step ]

```
ProfilerConfig={ 
    'S3OutputPath': 's3://<default-bucket>/<training-job-name>/profiler-output', # Optional. Path to an S3 bucket to save profiling outputs
    # Available values for ProfilingIntervalInMilliseconds: 100, 200, 500, 1000 (1 second), 5000 (5 seconds), and 60000 (1 minute) milliseconds.
    'ProfilingIntervalInMilliseconds': 500, 
    'ProfilingParameters': {
        'DataloaderProfilingConfig': '{
            "StartStep": 5, 
            "NumSteps": 3, 
            "MetricsRegex": ".*"
        }',
        'DetailedProfilingConfig': '{
            "StartStep": 5, 
            "NumSteps": 3 
        }',
        'PythonProfilingConfig': '{
            "StartStep": 5, 
            "NumSteps": 3, 
            "ProfilerName": "cprofile",  # Available options: cprofile, pyinstrument
            "cProfileTimer": "total_time"  # Include only when using cprofile. Available options: cpu, off_cpu, total_time
        }',
        'LocalPath': '/opt/ml/output/profiler/' # Optional. Local path for profiling outputs
    }
}
```

------
#### [ Target Time Duration ]

```
ProfilerConfig={ 
    'S3OutputPath': 's3://<default-bucket>/<training-job-name>/profiler-output', # Optional. Path to an S3 bucket to save profiling outputs
    # Available values for ProfilingIntervalInMilliseconds: 100, 200, 500, 1000 (1 second), 5000 (5 seconds), and 60000 (1 minute) milliseconds.
    'ProfilingIntervalInMilliseconds': 500,
    'ProfilingParameters': {
        'DataloaderProfilingConfig': '{
            "StartTimeInSecSinceEpoch": 12345567789, 
            "DurationInSeconds": 10, 
            "MetricsRegex": ".*"
        }',
        'DetailedProfilingConfig': '{
            "StartTimeInSecSinceEpoch": 12345567789, 
            "DurationInSeconds": 10
        }',
        'PythonProfilingConfig': '{
            "StartTimeInSecSinceEpoch": 12345567789, 
            "DurationInSeconds": 10, 
            "ProfilerName": "cprofile",  # Available options: cprofile, pyinstrument
            "cProfileTimer": "total_time"  # Include only when using cprofile. Available options: cpu, off_cpu, total_time
        }',
        'LocalPath': '/opt/ml/output/profiler/' # Optional. Local path for profiling outputs
    }
}
```

------

**メトリクスをプロファイリングするためのデバッガールールを有効にするには**

次のサンプルコードは、`ProfilerReport` ルールの設定方法を示しています。

```
ProfilerRuleConfigurations=[ 
    {
        'RuleConfigurationName': 'ProfilerReport',
        'RuleEvaluatorImage': '895741380848.dkr.ecr.us-west-2.amazonaws.com/sagemaker-debugger-rules:latest',
        'RuleParameters': {
            'rule_to_invoke': 'ProfilerReport',
            'CPUBottleneck_cpu_threshold': '90',
            'IOBottleneck_threshold': '90'
        }
    }
]
```

デバッガールールを使用するために利用可能な Docker イメージの完全なリストを見つけるには、「[Debugger ルールの Docker イメージ](debugger-reference.md#debugger-docker-images-rules)」を参照してください。`RuleParameters` のキーバリューのペアを見つけるには、「[デバッガーの組み込みルールのリスト](debugger-built-in-rules.md)」を参照してください。

## `UpdateTrainingJob` API オペレーションを使ってデバッガープロファイリング設定を更新する
<a name="debugger-updatetrainingjob-api.Boto3"></a>

デバッガープロファイリング設定は、 AWS Boto3 SageMaker AI クライアントの [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.update_training_job](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.update_training_job)関数を使用して、トレーニングジョブの実行中に更新できます。新しい [ProfilerConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProfilerConfig.html) および [ProfilerRuleConfiguration](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProfilerRuleConfiguration.html) オブジェクトを設定し、`TrainingJobName` パラメータにトレーニングジョブ名を指定します。

```
ProfilerConfig={ 
    'DisableProfiler': boolean,
    'ProfilingIntervalInMilliseconds': number,
    'ProfilingParameters': { 
        'string' : 'string' 
    }
},
ProfilerRuleConfigurations=[ 
    { 
        'RuleConfigurationName': 'string',
        'RuleEvaluatorImage': 'string',
        'RuleParameters': { 
            'string' : 'string' 
        }
    }
],
TrainingJobName='your-training-job-name-YYYY-MM-DD-HH-MM-SS-SSS'
```

## CreateTrainingJob API オペレーションにデバッガーカスタムルール設定を追加する
<a name="debugger-custom-rules-api.Boto3"></a>

カスタムルールは、[DebugHookConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DebugHookConfig.html) オブジェクトと [ DebugRuleConfiguration](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DebugRuleConfiguration.html) オブジェクトを使用して AWS Boto3 SageMaker AI クライアントの [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_training_job](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_training_job)関数を使用してトレーニングジョブ用に設定できます。次のコードサンプルは、この SageMaker API オペレーションを使用して、*smdebug* ライブラリを使って記述されたカスタム `ImproperActivation` ルールを設定する方法を示しています。この例では、カスタムルールを *custom\$1rules.py* ファイルに記述し、Amazon S3 バケットにアップロード済みであることを前提としています。例では、カスタムルールを実行するために使用できる構築済み Docker イメージを提供しています。これらについては、「[カスタムルール評価用の Amazon SageMaker Debugger イメージの URI](debugger-reference.md#debuger-custom-rule-registry-ids)」を参照してください。`RuleEvaluatorImage` パラメータで、ビルド済み Docker イメージの URL レジストリアドレスを指定します。

```
DebugHookConfig={
    'S3OutputPath': 's3://<default-bucket>/<training-job-name>/debug-output',
    'CollectionConfigurations': [
        {
            'CollectionName': 'relu_activations',
            'CollectionParameters': {
                'include_regex': 'relu',
                'save_interval': '500',
                'end_step': '5000'
            }
        }
    ]
},
DebugRulesConfigurations=[
    {
        'RuleConfigurationName': 'improper_activation_job',
        'RuleEvaluatorImage': '552407032007.dkr.ecr.ap-south-1.amazonaws.com/sagemaker-debugger-rule-evaluator:latest',
        'InstanceType': 'ml.c4.xlarge',
        'VolumeSizeInGB': 400,
        'RuleParameters': {
           'source_s3_uri': 's3://bucket/custom_rules.py',
           'rule_to_invoke': 'ImproperActivation',
           'collection_names': 'relu_activations'
        }
    }
]
```

デバッガールールを使用するために利用可能な Docker イメージの完全なリストを見つけるには、「[Debugger ルールの Docker イメージ](debugger-reference.md#debugger-docker-images-rules)」を参照してください。`RuleParameters` のキーバリューのペアを見つけるには、「[デバッガーの組み込みルールのリスト](debugger-built-in-rules.md)」を参照してください。

# Amazon SageMaker Debugger リファレンス
<a name="debugger-reference"></a>

Amazon SageMaker Debugger の使用に関する詳細情報とリファレンスについては、以下のトピックを参照してください。

**Topics**
+ [Amazon SageMaker Debugger API](#debugger-apis)
+ [Debugger ルールの Docker イメージ](#debugger-docker-images-rules)
+ [Amazon SageMaker Debugger の例外](#debugger-exceptions)
+ [Amazon SageMaker Debugger でサポートされている分散トレーニング](#debugger-considerations)

## Amazon SageMaker Debugger API
<a name="debugger-apis"></a>

Amazon SageMaker デバッガーには、モデルトレーニングのモニタリングと分析の実装に使用される API オペレーションが数か所に用意されています。

Amazon SageMaker Debugger は、オープンソースの [`sagemaker-debugger` Python SDK](https://github.com/awslabs/sagemaker-debugger/tree/master/smdebug) も提供します。これは、組み込みルールの設定、カスタムルールの定義、トレーニングジョブから出力テンソルデータを収集するためのフックの登録に使用されます。

[Amazon SageMaker AI Python SDK](https://sagemaker.readthedocs.io/en/stable/) は、機械学習の実験に焦点を当てた高レベルの SDK です。SDK を使って、`SMDebug` Python ライブラリを使って定義された組み込みまたはカスタムルールをデプロイし、SageMaker AI 推定器を使ったこれらのテンソルをモニタリングおよび分析できます。

デバッガーは、Amazon SageMaker API にオペレーションとタイプを追加しました。これにより、プラットフォームがモデルのトレーニング時にデバッガーを使用し、入出力の設定を管理できるようになります。
+ [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) と [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateTrainingJob.html) は、次のデバッガー API を使って、テンソルコレクション、ルール、ルールイメージ、プロファイリングオプションを設定します。
  + [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CollectionConfiguration.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CollectionConfiguration.html)
  + [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DebugHookConfig.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DebugHookConfig.html)
  + [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DebugRuleConfiguration.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DebugRuleConfiguration.html)
  + [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TensorBoardOutputConfig.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TensorBoardOutputConfig.html)
  + [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProfilerConfig.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProfilerConfig.html)
  + [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProfilerRuleConfiguration.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProfilerRuleConfiguration.html)
+ [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeTrainingJob.html) は、次のデバッガー設定やルール評価ステータスなど、トレーニングジョブの詳細な説明を示します。
  + [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DebugHookConfig.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DebugHookConfig.html)
  + [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DebugRuleConfiguration.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DebugRuleConfiguration.html)
  + [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DebugRuleEvaluationStatus.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DebugRuleEvaluationStatus.html)
  + [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProfilerConfig.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProfilerConfig.html)
  + [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProfilerRuleConfiguration.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProfilerRuleConfiguration.html)
  + [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProfilerRuleEvaluationStatus.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProfilerRuleEvaluationStatus.html)

ルール設定 API オペレーションは、モデルトレーニングを分析するときに SageMaker Processing の機能を使用します。SageMaker Processing の詳細については、「[SageMaker Processing によるデータ変換ワークロード](processing-job.md)」を参照してください。

## Debugger ルールの Docker イメージ
<a name="debugger-docker-images-rules"></a>

Amazon SageMaker AI では、ルール用の 2 セットの Docker イメージが提供されます。1 つは SageMaker AI によって提供されるルール (組み込みルール) を評価するためのセットで、もう 1 つは Python のソースファイルで提供されるカスタムルールを評価するためのセットです。

[Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) を使用する場合は、デバッガー Docker イメージを手動で取得して `ConfigureTrainingJob` API を設定しなくても、SageMaker AI の高レベルのデバッガー API オペレーションを SageMaker AI 推定器 API オペレーションと共に簡単に使用できます。

SageMaker Python SDK を使用していない場合は、関連する構築済みコンテナベースイメージをデバッガールールのために取得する必要があります。Amazon SageMaker デバッガーは、組み込みおよびカスタムルール用に構築済みの Docker イメージを提供し、イメージは Amazon Elastic Container Registry (Amazon ECR) に保存されます。Amazon ECR リポジトリからイメージをプルする (またはイメージをリポジトリにプッシュする) には、`CreateTrainingJob` API を使ってイメージのフルネームレジストリ URL を使用します。SageMaker AI は、デバッガールールコンテナのイメージレジストリのアドレスに次の URL パターンを使用します。

```
<account_id>.dkr.ecr.<Region>.amazonaws.com/<ECR repository name>:<tag>
```

各 AWS リージョンのアカウント ID、Amazon ECR リポジトリ名、タグ値については、以下のトピックを参照してください。

**Topics**
+ [組み込みルール評価用の Amazon SageMaker Debugger イメージの URL](#debuger-built-in-registry-ids)
+ [カスタムルール評価用の Amazon SageMaker Debugger イメージの URI](#debuger-custom-rule-registry-ids)

### 組み込みルール評価用の Amazon SageMaker Debugger イメージの URL
<a name="debuger-built-in-registry-ids"></a>

Amazon SageMaker デバッガーの組み込みルールを提供するイメージのレジストリ URL のコンポーネントには、次の値を使用します。アカウント ID については、次の表を参照してください。

**ECR リポジトリ名**: sagemaker-debugger-rules 

**タグ**: latest 

**完全なレジストリ URL の例**: 

`904829902805.dkr.ecr.ap-south-1.amazonaws.com/sagemaker-debugger-rules:latest`

 AWS リージョン別の組み込みルールコンテナイメージIDs 


| リージョン | account\$1id | 
| --- | --- | 
| af-south-1 |  314341159256  | 
| ap-east-1 |  199566480951  | 
| ap-northeast-1 |  430734990657   | 
| ap-northeast-2 |  578805364391  | 
| ap-south-1 |  904829902805  | 
| ap-southeast-1 |  972752614525  | 
| ap-southeast-2 |  184798709955  | 
| ca-central-1 |  519511493484  | 
| cn-north-1 |  618459771430  | 
| cn-northwest-1 |  658757709296  | 
| eu-central-1 |  482524230118  | 
| eu-north-1 |  314864569078  | 
| eu-south-1 |  563282790590  | 
| eu-west-1 |  929884845733  | 
| eu-west-2 |  250201462417  | 
| eu-west-3 |  447278800020  | 
| me-south-1 |  986000313247  | 
| sa-east-1 |  818342061345  | 
| us-east-1 |  503895931360  | 
| us-east-2 |  915447279597  | 
| us-west-1 |  685455198987  | 
| us-west-2 |  895741380848  | 
| us-gov-west-1 |  515509971035  | 

### カスタムルール評価用の Amazon SageMaker Debugger イメージの URI
<a name="debuger-custom-rule-registry-ids"></a>

Amazon SageMaker デバッガーのカスタムルールエバリュエーターを提供するイメージのレジストリ URL のコンポーネントには、次の値を使用します。アカウント ID については、次の表を参照してください。

**ECR リポジトリ名**: sagemaker-debugger-rule-evaluator 

**タグ**: latest 

**完全なレジストリ URL の例**: 

`552407032007.dkr.ecr.ap-south-1.amazonaws.com/sagemaker-debugger-rule-evaluator:latest`

 AWS リージョン別のカスタムルールコンテナイメージIDs 


| リージョン | account\$1id | 
| --- | --- | 
| af-south-1 |  515950693465  | 
| ap-east-1 |  645844755771  | 
| ap-northeast-1 |  670969264625   | 
| ap-northeast-2 |  326368420253  | 
| ap-south-1 |  552407032007  | 
| ap-southeast-1 |  631532610101  | 
| ap-southeast-2 |  445670767460  | 
| ca-central-1 |  105842248657  | 
| cn-north-1 |  617202126805  | 
| cn-northwest-1 |  658559488188  | 
| eu-central-1 |  691764027602  | 
| eu-north-1 |  091235270104  | 
| eu-south-1 |  335033873580  | 
| eu-west-1 |  606966180310  | 
| eu-west-2 |  074613877050  | 
| eu-west-3 |  224335253976  | 
| me-south-1 |  050406412588  | 
| sa-east-1 |  466516958431  | 
| us-east-1 |  864354269164  | 
| us-east-2 |  840043622174  | 
| us-west-1 |  952348334681  | 
| us-west-2 |  759209512951  | 
| us-gov-west-1 |  515361955729  | 

## Amazon SageMaker Debugger の例外
<a name="debugger-exceptions"></a>

Amazon SageMaker Debugger は、ルールの実行に必要なテンソルをすべてのステップで得られるわけではないことを認識の上設計されています。そのため、いくつかの例外を発生させ、テンソルの欠落時に生じることを制御できるようにします。これらの例外は、[smdebug.exceptions モジュール](https://github.com/awslabs/sagemaker-debugger/blob/master/smdebug/exceptions.py)で利用可能です。次のようにインポートできます。

```
from smdebug.exceptions import *
```

利用可能な例外は次のとおりです。
+ `TensorUnavailableForStep` – リクエストされたテンソルはこのステップで使用できません。これは、このステップがフックによってまったく保存されないか、ステップによって保存されたテンソルに、リクエストされたテンソルが含まれていないことを意味します。この例外が表示された場合、このテンソルは将来このステップで利用できないことを意味します。テンソルがステップに対して縮小版を保存している場合は、それらを照会できることを通知します。
+ `TensorUnavailable` - このテンソルは保存されていないか、`smdebug` API によって保存されていません。これは、このテンソルは `smdebug` のどのステップに対しても決して見られないことを意味する。
+ `StepUnavailable` - このステップは保存されておらず、デバッガーにはこのステップからのデータがありません。
+ `StepNotYetAvailable` - このステップは `smdebug` によってまだ確認されていません。トレーニングがまだ進行中の場合は、将来利用可能になる可能性があります。デバッガーは、新しいデータが利用可能になった時点でそれを自動的にロードします。
+ `NoMoreData` - トレーニング終了時に発生します。これが表示されると、これ以上保存するステップもテンソルもないことがわかります。
+ `IndexReaderException` - インデックスリーダーが有効ではありません。
+ `InvalidWorker` - 無効なワーカーが呼び出されました。
+ `RuleEvaluationConditionMet` - ステップでのルールの評価により、条件が満たされました。
+ `InsufficientInformationForRuleInvocation` - ルールを起動するための情報が不足しています。

## Amazon SageMaker Debugger でサポートされている分散トレーニング
<a name="debugger-considerations"></a>

次のリストは、深層学習フレームワークやさまざまな分散トレーニングオプションを使ったトレーニングジョブでデバッガーを使用する場合の有効範囲と考慮事項を示しています。
+ **Horovod**

  Horovod でのトレーニングジョブへのデバッガー使用の有効範囲    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/debugger-reference.html)
+ **SageMaker AI 分散データ並列**

  SageMaker AI 分散データ並列でのトレーニングジョブへのデバッガー使用の有効範囲    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/debugger-reference.html)

  \$1 デバッガーは、TensorFlow 2.x のフレームワークプロファイリングをサポートしていません。

  \$1\$1 SageMaker AI 分散データ並列は、Keras の実装の TensorFlow 2.x をサポートしていません。
+ **SageMaker AI 分散モデル並列** - デバッガーは SageMaker AI 分散モデル並列トレーニングをサポートしていません。
+ **SageMaker AI チェックポイントを使用した分散トレーニング** - 分散トレーニングオプションと SageMaker AI チェックポイントの両方が有効になっている場合、トレーニングジョブにデバッガーを使用することはできません。次のようなエラーが表示されることがあります。

  ```
  SMDebug Does Not Currently Support Distributed Training Jobs With Checkpointing Enabled
  ```

  分散トレーニングオプションを使用したトレーニングジョブにデバッガーを使うには、SageMaker AI のチェックポイント機能を無効にし、トレーニングスクリプトに手動チェックポイント関数を追加する必要があります。分散トレーニングオプションとチェックポイントを使うデバッガーの使用の詳細については、「[SageMaker AI 分散データ並列を Amazon SageMaker Debugger およびチェックポイントと共に使う](distributed-troubleshooting-data-parallel.md#distributed-ts-data-parallel-debugger)」と「[チェックポイントを保存する](distributed-troubleshooting-model-parallel.md#distributed-ts-model-parallel-checkpoints)」を参照してください。
+ **パラメータサーバー** - デバッガーは、パラメータサーバーベースの分散トレーニングをサポートしていません。
+ SageMaker AI 分散データ並列の `AllReduced` オペレーションや [Horovod オペレーション](https://horovod.readthedocs.io/en/stable/timeline_include.html)など、分散トレーニングフレームワークオペレーションのプロファイリングは使用できません。