

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

# 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) を参照してください。