

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

# Amazon SageMaker Studio Classic で AWS コンピューティングリソース使用率をモニタリングする
<a name="debugger-profile-training-jobs"></a>

トレーニングジョブのコンピューティングリソース使用率を追跡するには、Amazon SageMaker Debugger が提供するモニタリングツールを使用します。

SageMaker Python SDK を使用して SageMaker AI で実行するトレーニングジョブについて、Debugger は CPU 使用率、GPU 使用率、GPU メモリ使用率、ネットワーク、I/O 待機時間などの基本的なリソース使用率メトリクスを 500 ミリ秒ごとに収集します。トレーニングジョブのリソース使用率メトリクスのダッシュボードを表示するには、[SageMaker Studio Experiments の SageMaker Debugger UI](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-on-studio.html) を使用します。

深層学習オペレーションとステップはミリ秒間隔で実行される場合があります。1 秒間隔でメトリクスを収集する Amazon CloudWatch メトリクスと比較して、Debugger では 100 ミリ秒 (0.1 秒) 間隔までのリソース使用率メトリクスを細かく指定できるため、オペレーションまたはステップレベルでメトリクスを詳しく調べることができます。

メトリクスの収集間隔を変更したい場合は、トレーニングジョブランチャーにプロファイリング設定のパラメータを追加できます。例えば、SageMaker AI Python SDK を使用している場合は、推定器オブジェクトを作成するときに `profiler_config` パラメータを渡す必要があります。リソース使用率メトリクスの収集間隔を調整する方法については、「[SageMaker AI Python SDK の SageMaker Debugger Python モジュールを使用して SageMaker AI 推定器オブジェクトを設定するためのコードテンプレート](debugger-configuration-for-profiling.md#debugger-configuration-structure-profiler)」および「[システムリソース使用率の基本的なプロファイリング設定を行う](debugger-configure-system-monitoring.md)」を参照してください。

さらに、SageMaker Debugger が提供する「組み込みのプロファイリングルール」と呼ばれる問題検出ツールを追加できます。**組み込みのプロファイリングルールは、リソース使用率メトリクスに照らして分析を行い、計算パフォーマンスの問題を検出します。詳細については、「[Amazon SageMaker Debugger によって管理される組み込みプロファイラールールを使用する](use-debugger-built-in-profiler-rules.md)」を参照してください。ルール分析の結果は、[SageMaker Studio Experiments の SageMaker Debugger UI](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-on-studio.html) または [SageMaker Debugger プロファイリングレポート](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-profiling-report.html)から受け取ることができます。SageMaker Python SDK を使って、カスタムプロファイリングルールを作成することもできます。

SageMaker Debugger が提供するモニタリング機能の詳細については、以下のトピックを参照してください。

**Topics**
+ [Amazon SageMaker Debugger Python モジュールを使用した基本的なプロファイリング用パラメータを用いた推定器の設定](debugger-configuration-for-profiling.md)
+ [Amazon SageMaker Debugger によって管理される組み込みプロファイラールールを使用する](use-debugger-built-in-profiler-rules.md)
+ [Debugger の組み込みプロファイラールールのリスト](debugger-built-in-profiler-rules.md)
+ [Amazon SageMaker Studio Classic Experiments の Amazon SageMaker Debugger UI](debugger-on-studio.md)
+ [SageMaker Debugger インタラクティブレポート](debugger-profiling-report.md)
+ [Debugger Python クライアントライブラリを使用してデータを分析する](debugger-analyze-data.md)

# Amazon SageMaker Debugger Python モジュールを使用した基本的なプロファイリング用パラメータを用いた推定器の設定
<a name="debugger-configuration-for-profiling"></a>

デフォルトでは、SageMaker Debugger の基本プロファイリングはデフォルトでオンになっており、[Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) を使用して送信されたすべての SageMaker トレーニングジョブの CPU 使用率、GPU 使用率、GPU メモリ使用率、ネットワーク、I/O 待機時間などのリソース使用率のメトリクスをモニタリングします。SageMaker Debugger は、これらのリソース使用率のメトリクスを 500 ミリ秒ごとに収集します。基本的なリソース使用率を追跡するために、コード、トレーニングスクリプト、またはジョブランチャーに追加の変更を加える必要はありません。基本プロファイリングのメトリクス収集間隔を変更する場合は、SageMaker Python SDK、または AWS Command Line Interface (CLI) を使用して SageMaker トレーニングジョブランチャーを作成するときに AWS SDK for Python (Boto3)、デバッガー固有のパラメータを指定できます。このガイドでは、[Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) を使用してプロファイリングオプションを変更する方法に焦点を当てています。このページでは、この推定器オブジェクトを設定するための参照テンプレートを提供します。

SageMaker Studio でトレーニングジョブのリソース使用率メトリクスダッシュボードにアクセスする場合は、[Amazon SageMaker Studio Classic Experiments の Amazon SageMaker Debugger UI](debugger-on-studio.md) に移動することができます。

システムリソースの使用率の問題を自動的に検出するルールをアクティブ化する場合は、ルールをアクティブ化する `rules` パラメータを推定器オブジェクトに追加できます。

**重要**  
最新の SageMaker Debugger の機能を使うには、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)
```

## SageMaker AI Python SDK の SageMaker Debugger Python モジュールを使用して SageMaker AI 推定器オブジェクトを設定するためのコードテンプレート
<a name="debugger-configuration-structure-profiler"></a>

基本的なプロファイリング設定 (`profiler_config`) を調整するか、プロファイラールール (`rules`) を追加するには、タブの 1 つを選択して SageMaker AI 推定器を設定するためのテンプレートを取得します。以降のページでは、2 つのパラメータの設定方法について詳細を示します。

**注記**  
次のコード例は、直接実行できません。次のセクションに進み、各パラメータの設定方法について説明します。

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

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

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

profiler_config=ProfilerConfig(...)
rules=[
    ProfilerRule.sagemaker(rule_configs.BuiltInRule())
]

estimator=PyTorch(
    entry_point="directory/to/your_training_script.py",
    role=sagemaker.get_execution_role(),
    base_job_name="debugger-profiling-demo",
    instance_count=1,
    instance_type="ml.p3.2xlarge",
    framework_version="1.12.0",
    py_version="py37",
    
    # SageMaker Debugger parameters
    profiler_config=profiler_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 ProfilerConfig, ProfilerRule, rule_configs

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

profiler_config=ProfilerConfig(...)
rules=[
    ProfilerRule.sagemaker(rule_configs.BuiltInRule())
]

estimator=TensorFlow(
    entry_point="directory/to/your_training_script.py",
    role=sagemaker.get_execution_role(),
    base_job_name="debugger-profiling-demo",
    instance_count=1,
    instance_type="ml.p3.2xlarge",
    framework_version="2.8.0",
    py_version="py37",
    
    # SageMaker Debugger parameters
    profiler_config=profiler_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 ProfilerConfig, ProfilerRule, rule_configs

profiler_config=ProfilerConfig(...)
rules=[
    ProfilerRule.sagemaker(rule_configs.BuiltInRule())
]

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

estimator.fit(wait=False)
```

**注記**  
MXNet の場合、`profiler_config` パラメータを設定するときは、システムモニタリング用にのみ設定できます。MXNet では、フレームワークメトリクスのプロファイリングはサポートされていません。

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

```
# An example of constructing a SageMaker AI XGBoost estimator
import sagemaker
from sagemaker.xgboost.estimator import XGBoost
from sagemaker.debugger import ProfilerConfig, ProfilerRule, rule_configs

profiler_config=ProfilerConfig(...)
rules=[
    ProfilerRule.sagemaker(rule_configs.BuiltInRule())
]

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

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

estimator.fit(wait=False)
```

**注記**  
XGBoost の場合、`profiler_config` パラメータを設定するときは、システムモニタリング用にのみ設定できます。XGBoost では、フレームワークメトリクスのプロファイリングはサポートされていません。

------
#### [ 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 ProfilerConfig, DebuggerHookConfig, Rule, ProfilerRule, rule_configs

profiler_config=ProfilerConfig(...)
rules=[
    ProfilerRule.sagemaker(rule_configs.BuiltInRule())
]

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
    profiler_config=profiler_config,
    rules=rules
)

estimator.fit(wait=False)
```

------

次に、パラメータについて簡単に説明します。
+ `profiler_config` - トレーニングジョブからシステムメトリクスとフレームワークメトリクスを収集し、セキュアな S3 バケット URI またはローカルマシンに保存するようにデバッガーを設定します。システムメトリクスを収集する頻度を設定できます。`profiler_config` パラメータの設定方法については、「[システムリソース使用率の基本的なプロファイリング設定を行う](debugger-configure-system-monitoring.md)」および「[フレームワークプロファイリング用の推定器設定](debugger-configure-framework-profiling.md)」を参照してください。
+ `rules` - 並列で実行する SageMaker Debugger の組み込みルールをアクティブ化するには、このパラメータを設定します。トレーニングジョブがこの S3 バケットに対するアクセス権を持っていることを確認してください。ルールは処理中のコンテナで実行され、トレーニングジョブを自動的に分析して計算上および運用上のパフォーマンスの問題を検索します。[ProfilerReport](debugger-built-in-profiler-rules.md#profiler-report) ルールは、組み込みのプロファイリングルールをすべて実行し、プロファイリング結果をセキュリティで保護された S3 バケットにレポートとして保存する、最も統合されたルールです。`rules` パラメータの設定方法については、「[Amazon SageMaker Debugger によって管理される組み込みプロファイラールールを使用する](use-debugger-built-in-profiler-rules.md)」を参照してください。

**注記**  
デバッガーは、デフォルトの S3 バケットのサブフォルダに出力データを安全に保存します。例えば、デフォルトの S3 バケット URI の形式は、`s3://sagemaker-<region>-<12digit_account_id>/<base-job-name>/<debugger-subfolders>/` です。デバッガーによって作成されるサブフォルダは、`debug-output`、`profiler-output`、`rule-output` の 3 つです。[SageMaker AI 推定器クラスメソッド](debugger-estimator-classmethods.md)を使用してデフォルトの S3 バケット URI を取得することもできます。

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

**Topics**
+ [SageMaker AI Python SDK の SageMaker Debugger Python モジュールを使用して SageMaker AI 推定器オブジェクトを設定するためのコードテンプレート](#debugger-configuration-structure-profiler)
+ [システムリソース使用率の基本的なプロファイリング設定を行う](debugger-configure-system-monitoring.md)
+ [フレームワークプロファイリング用の推定器設定](debugger-configure-framework-profiling.md)
+ [トレーニングジョブ実行中にデバッガーシステムのモニタリングとフレームワークプロファイリングの設定を更新する](debugger-update-monitoring-profiling.md)
+ [Debugger をオフにする](debugger-turn-off-profiling.md)

# システムリソース使用率の基本的なプロファイリング設定を行う
<a name="debugger-configure-system-monitoring"></a>

使用率のメトリクスを収集する時間間隔を調整するには、SageMaker AI フレームワークまたは汎用推定器を構築するなかで任意に、`ProfilerConfig` API オペレーションを使用してパラメータオブジェクトを作成します 。

**注記**  
デフォルトでは、すべての SageMaker トレーニングジョブについて、Debugger はシステムモニタリングのために Amazon EC2 インスタンスから 500 ミリ秒ごとにリソース使用率メトリクスを収集し、SageMaker AI 推定器に Debugger 固有のパラメータを指定することはありません。  
デバッガーは、システムメトリクスをデフォルトの S3 バケットに保存します。デフォルトの S3 バケット URI の形式は、`s3://sagemaker-<region>-<12digit_account_id>/<training-job-name>/profiler-output/` です。

次のコードの例は、システムのモニタリング時間間隔を 1000 ミリ秒として `profiler_config` パラメータを設定する方法を示しています。

```
from sagemaker.debugger import ProfilerConfig

profiler_config=ProfilerConfig(
    system_monitor_interval_millis=1000
)
```
+  `system_monitor_interval_millis` (int) – システムメトリクスを記録するためのモニタリング間隔をミリ秒単位で指定します。使用できる値は、100、200、500、1000 (1 秒)、5000 (5 秒)、60000 (1 分) ミリ秒です。デフォルト値は 500 ミリ秒です。

システムモニタリングの進行状況を確認するには、「[Amazon SageMaker Debugger インサイトダッシュボードを開く](debugger-on-studio-insights.md)」を参照してください。

# フレームワークプロファイリング用の推定器設定
<a name="debugger-configure-framework-profiling"></a>

**警告**  
[Amazon SageMaker Profiler](train-use-sagemaker-profiler.md) に置き換わったので、SageMaker AI Debugger は TensorFlow 2.11 と PyTorch 2.0 以降のフレームワークプロファイリング機能を廃止します。以前のバージョンのフレームワークと SDK でも、次のようにこの機能を引き続き使用できます。  
SageMaker Python SDK <= v2.130.0
PyTorch >= v1.6.0、< v2.0
TensorFlow >= v2.3.1、< v2.11
[2023 年 3 月 16 日](debugger-release-notes.md#debugger-release-notes-20230315) も参照してください。

デバッガーフレームワークプロファイリングを有効にするには、推定器を構築するときに `framework_profile_params` パラメータを設定します。デバッガーフレームワークプロファイリングは、初期化段階のデータ、データローダープロセス、深層学習フレームワークとトレーニングスクリプトの Python 演算子、ステップ内およびステップ間の詳細なプロファイリングなどのフレームワークメトリクスを、cProfile または Pyinstrument オプションを使って収集します。`FrameworkProfile` クラスを使用すると、カスタムフレームワークのプロファイリングオプションを設定できます。

**注記**  
デバッガーフレームワークのプロファイリングを始める前に、モデルの構築に使用されるフレームワークがフレームワークプロファイリングのためにデバッガーでサポートされていることを確認してください。詳細については、「[サポート対象のフレームワークとアルゴリズム](debugger-supported-frameworks.md)」を参照してください。  
デバッガーは、フレームワークメトリクスをデフォルトの S3 バケットに保存します。デフォルトの S3 バケット URI の形式は、`s3://sagemaker-<region>-<12digit_account_id>/<training-job-name>/profiler-output/` です。

**Topics**
+ [デフォルトのフレームワークプロファイリング](debugger-configure-framework-profiling-basic.md)
+ [ターゲットステップまたはターゲット時間範囲のデフォルトのシステムモニタリングとカスタマイズされたフレームワークプロファイリング](debugger-configure-framework-profiling-range.md)
+ [デフォルトのシステムモニタリングとさまざまなプロファイリングオプションでカスタマイズしたフレームワークプロファイリング](debugger-configure-framework-profiling-options.md)

# デフォルトのフレームワークプロファイリング
<a name="debugger-configure-framework-profiling-basic"></a>

Debugger フレームワークのデフォルトプロファイリングには、詳細プロファイリング、データローダープロファイリング、Python プロファイリングのオプションがあります。次のサンプルコードは、デフォルトのシステムモニタリングとデフォルトのフレームワークプロファイリングを開始するための最も簡単な `profiler_config` パラメータ設定です。次のサンプルコードの `FrameworkProfile` クラスは、トレーニングジョブの開始時にデフォルトのフレームワークプロファイリングを開始します。

```
from sagemaker.debugger import ProfilerConfig, FrameworkProfile
    
profiler_config=ProfilerConfig(
    framework_profile_params=FrameworkProfile()
)
```

この `profiler_config` パラメータ設定を使用して、デバッガーはモニタリングとプロファイリングのデフォルト設定を呼び出します。デバッガーは 500 ミリ秒ごとにシステムメトリクスをモニタリングし、5 番目のステップを詳細なプロファイリングオプションで、7 番目のステップをデータローダープロファイリングオプションで、9、10、11 番目のステップを Python プロファイリングオプションでプロファイリングします。

使用可能なプロファイリング設定オプション、デフォルトのパラメータ設定、それらの設定方法の例については、[Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) の「[デフォルトのシステムモニタリングとさまざまなプロファイリングオプションでカスタマイズしたフレームワークプロファイリング](debugger-configure-framework-profiling-options.md)」と「[SageMaker デバッガー API - FrameworkProfile](https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html#sagemaker.debugger.FrameworkProfile)」を参照してください。

システムモニタリング間隔を変更し、デフォルトのフレームワークプロファイリングを有効にするには、`framework_profile_params` パラメータを使用して `system_monitor_interval_millis` パラメータを明示的に指定できます。例えば、1000 ミリ秒ごとにモニタリングし、デフォルトのフレームワークプロファイリングを有効にするには、次のサンプルコードを使用します。

```
from sagemaker.debugger import ProfilerConfig, FrameworkProfile
    
profiler_config=ProfilerConfig(
    system_monitor_interval_millis=1000,
    framework_profile_params=FrameworkProfile()
)
```

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

# ターゲットステップまたはターゲット時間範囲のデフォルトのシステムモニタリングとカスタマイズされたフレームワークプロファイリング
<a name="debugger-configure-framework-profiling-range"></a>

トレーニングジョブをプロファイリングするためにターゲットステップまたはターゲット時間間隔を指定する場合は、`FrameworkProfile` クラスのパラメータを指定する必要があります。次のコード例は、システムモニタリングと共にプロファイリングのターゲット範囲を指定する方法を示しています。
+ **ターゲットステップ範囲の場合**

  次の設定例では、デバッガーはトレーニングジョブ全体を 500 ミリ秒ごとにモニタリングし (デフォルトのモニタリング)、ステップ 5 からステップ 15 まで (10 ステップ分) のターゲットステップ範囲をプロファイリングします。

  ```
  from sagemaker.debugger import ProfilerConfig, FrameworkProfile
      
  profiler_config=ProfilerConfig(
      framework_profile_params=FrameworkProfile(start_step=5, num_steps=10)
  )
  ```

  次の設定例では、デバッガーはトレーニングジョブ全体を 1000 ミリ秒ごとにモニタリングし、ステップ 5 からステップ 15 まで (10 ステップ分) のターゲットステップ範囲をプロファイリングします。

  ```
  from sagemaker.debugger import ProfilerConfig, FrameworkProfile
      
  profiler_config=ProfilerConfig(
      system_monitor_interval_millis=1000,
      framework_profile_params=FrameworkProfile(start_step=5, num_steps=10)
  )
  ```
+ **ターゲット時間範囲の場合**

  次の設定例では、デバッガーはトレーニングジョブ全体を 500 ミリ秒ごとにモニタリングし (デフォルトのモニタリング)、現在の Unix 時間から 600 秒間のターゲット時間範囲をプロファイリングします。

  ```
  import time
  from sagemaker.debugger import ProfilerConfig, FrameworkProfile
  
  profiler_config=ProfilerConfig(
      framework_profile_params=FrameworkProfile(start_unix_time=int(time.time()), duration=600)
  )
  ```

  次の設定例では、デバッガーはトレーニングジョブ全体を 1000 ミリ秒ごとにモニタリングし、現在の Unix 時間から 600 秒間のターゲット時間範囲をプロファイリングします。

  ```
  import time
  from sagemaker.debugger import ProfilerConfig, FrameworkProfile
  
  profiler_config=ProfilerConfig(
      system_monitor_interval_millis=1000,
      framework_profile_params=FrameworkProfile(start_unix_time=int(time.time()), duration=600)
  )
  ```

  フレームワークプロファイリングは、ターゲットステップまたは時間範囲のすべてのプロファイリングオプションに対して実行されます。

  使用可能なプロファイリングオプションの詳細については、[Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) の「[SageMaker デバッガー API - FrameworkProfile](https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html#sagemaker.debugger.FrameworkProfile)」を参照してください。

  次のセクションでは、使用可能なプロファイリングオプションをスクリプト化する方法を示します。

# デフォルトのシステムモニタリングとさまざまなプロファイリングオプションでカスタマイズしたフレームワークプロファイリング
<a name="debugger-configure-framework-profiling-options"></a>

このセクションでは、サポートされているプロファイリング設定クラスと設定例について説明します。次のプロファイリング設定クラスを使って、フレームワークのプロファイリングオプションを管理できます。
+ [DetailedProfilingConfig](https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html#sagemaker.debugger.DetailedProfilingConfig) - ネイティブフレームワークプロファイラー (TensorFlow プロファイラーと PyTorch プロファイラー) を使ってフレームワークオペレーションをプロファイリングするターゲットステップまたは時間範囲を指定します。例えば、TensorFlow を使う場合、デバッガーフックによって TensorFlow プロファイラーが TensorFlow 固有のフレームワークメトリクスを収集できるようになります。詳細なプロファイリングによって、トレーニングジョブのステップの前 (最初のステップの前)、ステップ内、ステップ間で、すべてのフレームワーク演算子をプロファイリングできます。
**注記**  
詳細なプロファイリングにより、GPU メモリ消費量が大幅に増加する場合があります。詳細なプロファイリングを数ステップ以上で有効にすることはお勧めしません。
+ [DataloaderProfilingConfig](https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html#sagemaker.debugger.DataloaderProfilingConfig) - 深層学習フレームワークのデータローダープロセスをプロファイリングするターゲットステップまたは時間範囲を指定します。デバッガーは、フレームワークのすべてのデータローダーイベントを収集します。
**注記**  
データローダープロファイリングは、データローダーから情報を収集する間、トレーニングパフォーマンスを低下させる場合があります。データローダープロファイリングを数ステップ以上で有効にすることはお勧めしません。  
デバッガーは、 AWS Deep Learning Containers に対してのみ、データローダープロセスに注釈を付けるように事前設定されています。デバッガーは、他のカスタムまたは外部トレーニングコンテナからのデータローダープロセスをプロファイリングできません。
+ [PythonProfilingConfig](https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html#sagemaker.debugger.PythonProfilingConfig) - Python 関数をプロファイリングするターゲットステップまたは時間範囲を指定します。また、cProfile と Pyinstrument という 2 つの Python プロファイラーから選択することもできます。
  + *cProfile* - 標準の Python プロファイラー。cProfile は、トレーニング中に呼び出されたすべての Python 演算子の情報を収集します。cProfile を使うと、デバッガーは各関数呼び出しに対する累積の時間とアノテーションを節約して、Python 関数に関する完全な詳細情報を提供できます。例えば、深層学習では、最も頻繁に呼び出される関数は、畳み込みフィルターとバックワードパス演算子と考えられますが、cProfile はそれらすべてをプロファイリングします。cProfile オプションでは、合計時間、CPU 時間、オフ CPU 時間といったタイマーオプションをさらに選択できます。プロセッサ (CPU と GPU の両方) で実行されるすべての関数呼び出しを CPU 時間内にプロファイリングできますが、オフ CPU 時間オプションを使って I/O またはネットワークのボトルネックを特定することもできます。デフォルトは合計時間で、デバッガーは CPU 時間とオフ CPU 時間の両方をプロファイリングします。cProfile を使うと、プロファイルデータを分析するときに、すべての関数にドリルダウンできます。
  + *Pyinstrument* - Pyinstrument は、サンプリングに基づいて動作するオーバーヘッドの低い Python プロファイラーです。Pyinstrument オプションを使うと、デバッガーはプロファイリングイベントをミリ秒ごとにサンプリングします。Pyinstrument は CPU 時間ではなく実際の経過時間を測定するため、プロファイリングノイズを減らし (累積的に速くなる無関係な関数呼び出しを除外し)、モデルをトレーニングするために実際にコンピューティング集約型である (累積的に遅くなる) 演算子をキャプチャするには、cProfile オプションよりも Pyinstrument オプションが適しています。Pyinstrument を使うと、関数呼び出しのツリーが見え、速度低下の構造と根本原因をよりよく理解できます。
**注記**  
Python プロファイリングを有効にすると、全体的なトレーニング時間が遅くなる場合があります。cProfile は、呼び出しのたびに最も頻繁に呼び出される Python 演算子をプロファイリングするため、呼び出し数に対してプロファイリングの処理時間が増加します。Pyinstrument の場合、サンプリングメカニズムにより、時間に対して累積プロファイリング時間が増えます。

次の設定例では、指定した値でさまざまなプロファイリングオプションを使用した場合の完全な構造を示しています。

```
import time
from sagemaker.debugger import (ProfilerConfig, 
                                FrameworkProfile, 
                                DetailedProfilingConfig, 
                                DataloaderProfilingConfig, 
                                PythonProfilingConfig,
                                PythonProfiler, cProfileTimer)

profiler_config=ProfilerConfig(
    system_monitor_interval_millis=500,
    framework_profile_params=FrameworkProfile(
        detailed_profiling_config=DetailedProfilingConfig(
            start_step=5, 
            num_steps=1
        ),
        dataloader_profiling_config=DataloaderProfilingConfig(
            start_step=7, 
            num_steps=1
        ),
        python_profiling_config=PythonProfilingConfig(
            start_step=9, 
            num_steps=1, 
            python_profiler=PythonProfiler.CPROFILE, 
            cprofile_timer=cProfileTimer.TOTAL_TIME
        )
    )
)
```

使用可能なプロファイリングオプションの詳細については、[Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) の「[DetailedProfilingConfig](https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html#sagemaker.debugger.DetailedProfilingConfig)」、「[DataloaderProfilingConfig](https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html#sagemaker.debugger.DataloaderProfilingConfig)」、「[PythonProfilingConfig](https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html#sagemaker.debugger.PythonProfilingConfig)」を参照してください。

# トレーニングジョブ実行中にデバッガーシステムのモニタリングとフレームワークプロファイリングの設定を更新する
<a name="debugger-update-monitoring-profiling"></a>

現在実行中のトレーニングジョブの Debugger のモニタリング設定をアクティブ化または更新する場合は、次の SageMaker AI 推定器拡張メソッドを使用します。
+ 実行中のトレーニングジョブに対して Debugger システムモニタリングをアクティブ化し、Debugger プロファイリングレポートを受け取るには、次を使用します。

  ```
  estimator.enable_default_profiling()
  ```

  `enable_default_profiling` メソッドを使用すると、デバッガーはデフォルトのシステムモニタリングと `ProfileReport` 組み込みルールを開始し、それによりトレーニングジョブの最後に包括的なプロファイリングレポートが生成されます。このメソッドは、現在のトレーニングジョブが、デバッガーのモニタリングとプロファイリングの両方なしに、実行されている場合にのみ呼び出すことができます。

  詳細については、[Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) の「[estimator.enable\$1default\$1profiling](https://sagemaker.readthedocs.io/en/stable/api/training/estimators.html#sagemaker.estimator.Estimator.enable_default_profiling)」を参照してください。
+ システムモニタリング設定を更新するには、次を使用します。

  ```
  estimator.update_profiler(
      system_monitor_interval_millis=500
  )
  ```

  詳細については、[Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable/api/training/estimators.html#sagemaker.estimator.Estimator.update_profiler) の「[estimator.update\$1profiler](https://sagemaker.readthedocs.io/en/stable)」を参照してください。

# Debugger をオフにする
<a name="debugger-turn-off-profiling"></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) クラスメソッドを参照してください。

# Amazon SageMaker Debugger によって管理される組み込みプロファイラールールを使用する
<a name="use-debugger-built-in-profiler-rules"></a>

Amazon SageMaker Debugger の組み込みプロファイラールールは、モデルのトレーニング中に収集されたシステムメトリクスとフレームワークオペレーションを分析します。Debugger には、トレーニング用のコンピューティングリソースとオペレーションを監視し、異常を検出するためのルールを設定するのに役立つ `ProfilerRule` API オペレーションが用意されています。例えば、プロファイリングルールは、CPU のボトルネック、過度の I/O 待機時間、GPU ワーカー間のワークロードの不均衡、コンピュートリソースの未使用などの計算上の問題があるかどうかを検出するのに役立ちます。使用可能な組み込みプロファイリングルールの完全なリストについては、「[Debugger の組み込みプロファイラールールのリスト](debugger-built-in-profiler-rules.md)」を参照してください。次のトピックでは、Debugger の組み込みルールをデフォルトのパラメータ設定とカスタムのパラメータ値で使用する方法を紹介します。

**注記**  
組み込みルールは Amazon SageMaker の処理コンテナに用意され、SageMaker Debugger によって追加料金なしで完全に管理されます。請求の詳細については、「[Amazon SageMaker の料金](https://aws.amazon.com/sagemaker/pricing/)」のページを参照してください。

**Topics**
+ [SageMaker Debugger の組み込みプロファイラールールをデフォルトのパラメータ設定で使用する](#debugger-built-in-profiler-rules-configuration)
+ [Debugger の組み込みプロファイラールールをカスタムパラメータ値で使用する](#debugger-built-in-profiler-rules-configuration-param-change)

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

SageMaker Debugger の組み込みルールを推定器に追加するには、`rules` リストオブジェクトを設定する必要があります。次のサンプルコードは、SageMaker Debugger の組み込みルールをリストする基本構造を示しています。

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

rules=[
    ProfilerRule.sagemaker(rule_configs.BuiltInProfilerRuleName_1()),
    ProfilerRule.sagemaker(rule_configs.BuiltInProfilerRuleName_2()),
    ...
    ProfilerRule.sagemaker(rule_configs.BuiltInProfilerRuleName_n()),
    ... # You can also append more debugging rules in the Rule.sagemaker(rule_configs.*()) format.
]

estimator=Estimator(
    ...
    rules=rules
)
```

組み込みルールの完全なリストについては、「[Debugger の組み込みプロファイラールールのリスト](debugger-built-in-profiler-rules.md)」を参照してください。

プロファイリングルールを使用してトレーニングジョブの計算パフォーマンスと進行状況を調べるには、SageMaker Debugger の [https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-built-in-profiler-rules.html#profiler-report](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-built-in-profiler-rules.html#profiler-report) ルールを追加します。このルールは [Debugger ProfilerRule](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-built-in-profiler-rules.html#debugger-built-in-profiler-rules-ProfilerRule) `ProfilerRule` ファミリーに含まれるすべての組み込みルールを有効にします。さらに、このルールは集約されたプロファイリングレポートを生成します。詳細については、「[SageMaker Debugger を使用して生成されたプロファイリングレポート](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-profiling-report.html)」を参照してください。次のコードを使用して、プロファイリングレポートルールをトレーニング推定器に追加できます。

```
from sagemaker.debugger import Rule, rule_configs

rules=[
    ProfilerRule.sagemaker(rule_configs.ProfilerReport())
]
```

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

## Debugger の組み込みプロファイラールールをカスタムパラメータ値で使用する
<a name="debugger-built-in-profiler-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 の組み込みプロファイラールールのリスト](debugger-built-in-profiler-rules.md) にリストされている組み込みルールのデフォルトのキーバリューを調整するためのものです。

デバッガールールクラス、メソッド、パラメータの詳細については、[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=[
    ProfilerRule.sagemaker(
        base_config=rule_configs.BuiltInProfilerRuleName(),
        rule_parameters={
                "key": "value"
        }
    )
]
```

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

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

# Debugger の組み込みプロファイラールールのリスト
<a name="debugger-built-in-profiler-rules"></a>

Amazon SageMaker Debugger が提供する Debugger の組み込みルールを使って、モデルのトレーニング中に収集されたメトリクスを分析します。Debugger の組み込みルールは、パフォーマンスの高いトレーニングジョブの実行を成功させるために不可欠なさまざまな共通条件をモニタリングします。組み込みプロファイラールールは、[Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) または低レベルの SageMaker API オペレーションを使って呼び出せます。組み込みルールの使用に追加料金はかかりません。請求の詳細については、「[Amazon SageMaker の料金](https://aws.amazon.com/sagemaker/pricing/)」のページを参照してください。

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

**重要**  
新しいデバッガー機能を使うには、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-profiler-rules-ProfilerRule"></a>

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

プロファイリングレポートを生成するための Debugger 組み込みルール


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

ハードウェアシステムのリソース使用率 (システムメトリクス)をプロファイリングするための Debugger 組み込みルール


| 有効範囲 | 組み込みルール | 
| --- | --- | 
| SageMaker トレーニングジョブの一般的なシステムモニタリングルール |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/debugger-built-in-profiler-rules.html)  | 

フレームワークメトリクスをプロファイリングするための Debugger 組み込みルール


| 有効範囲 | 組み込みルール | 
| --- | --- | 
| 深層学習フレームワークのプロファイリングルール (TensorFlow と PyTorch) |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/debugger-built-in-profiler-rules.html)  | 

**警告**  
[Amazon SageMaker Profiler](train-use-sagemaker-profiler.md) に置き換わったので、SageMaker AI Debugger は TensorFlow 2.11 と PyTorch 2.0 以降のフレームワークプロファイリング機能を廃止します。以前のバージョンのフレームワークと SDK でも、次のようにこの機能を引き続き使用できます。  
SageMaker Python SDK <= v2.130.0
PyTorch >= v1.6.0、< v2.0
TensorFlow >= v2.3.1、< v2.11
[2023 年 3 月 16 日](debugger-release-notes.md#debugger-release-notes-20230315) も参照してください。

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

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

rules = [
    ProfilerRule.sagemaker(rule_configs.BuiltInRuleName_1()),
    ProfilerRule.sagemaker(rule_configs.BuiltInRuleName_2()),
    ...
    ProfilerRule.sagemaker(rule_configs.BuiltInRuleName_n())
]
```

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

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

rules = [
    ProfilerRule.sagemaker(
        base_config=rule_configs.BuiltInRuleName(),
        rule_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)」を参照してください。

## ProfilerReport
<a name="profiler-report"></a>

ProfilerReport ルールは、モニタリングとプロファイリングのすべての組み込みルールを呼び出します。個々のルールがトリガーされると、プロファイリングレポートが作成され、更新されます。トレーニングジョブの実行中またはトレーニングジョブの完了後に、包括的なプロファイリングレポートをダウンロードできます。ルールパラメータ値を調整することで、組み込みのモニタリングルールとプロファイリングルールの感度をカスタマイズできます。次のサンプルコードは、ProfilerReport ルールを使って組み込みルールパラメータを調整するための基本的な形式を示しています。

```
rules=[
    ProfilerRule.sagemaker(
        rule_configs.ProfilerReport(
            <BuiltInRuleName>_<parameter_name> = value
        )
    )  
]
```

次のサンプルコードに示すように、カスタマイズしたパラメータを使用せずにこの ProfilerReport ルールをトリガーすると、ProfilerReport ルールは、デフォルトのパラメータ値を使って、モニタリングおよびプロファイリングのすべての組み込みルールをトリガーします。

```
rules=[ProfilerRule.sagemaker(rule_configs.ProfilerReport())]
```

次のサンプルコードは、CPUBottleNeck ルールの `cpu_threshold` パラメータと IOBottleNeck ルールの `threshold` パラメータの指定と調整の方法を示しています。

```
rules=[
    ProfilerRule.sagemaker(
        rule_configs.ProfilerReport(
            CPUBottleneck_cpu_threshold = 90,
            IOBottleneck_threshold = 90
        )
    )  
]
```

プロファイラーレポートの内容を確認するには、「[SageMaker Debugger Profiling Report](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-profiling-report.html)」を参照してください。また、このルールはすべてのプロファイリングルールを有効にするため、[SageMaker Studio Experiments の SageMaker Debugger UI](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-on-studio.html) を使用してルール分析ステータスを確認することもできます。

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


| Parameter Name | 説明 | 
| --- | --- | 
| base\$1trial | 基本トライアルトレーニングジョブ名。このパラメータは、Amazon SageMaker デバッガーによって現在のトレーニングジョブに自動的に設定されます。 **必須** 有効な値: 文字列  | 
| <BuiltInRuleName>\$1<parameter\$1name> |  他の組み込みのモニタリングルールおよびプロファイリングルールのしきい値を調整するためのカスタマイズ可能なパラメータ。 **オプション** デフォルト値: `None`  | 

## BatchSize
<a name="batch-size-rule"></a>

BatchSize ルールは、バッチサイズが小さいために GPU が十分に利用されていないか検出するのに役立ちます。この問題を検出するために、このルールは平均 CPU 使用率、GPU 使用率、GPU メモリ使用率をモニタリングします。CPU、GPU、GPU メモリの使用率が平均的に低い場合は、トレーニングジョブをより小さなインスタンスタイプで実行できるか、より大きなバッチサイズで実行できることを示している可能性があります。この分析は、メモリを過剰に割り当てるフレームワークでは機能しません。ただし、バッチサイズを大きくすると、各反復でデータの前処理時間がより多く必要になるため、処理やデータロードのボトルネックが発生する可能性があります。

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


| Parameter Name | 説明 | 
| --- | --- | 
| base\$1trial | 基本トライアルトレーニングジョブ名。このパラメータは、Amazon SageMaker デバッガーによって現在のトレーニングジョブに自動的に設定されます。 **必須** 有効な値: 文字列  | 
| cpu\$1threshold\$1p95 |  CPU 使用率の 95 番目の分位数のしきい値をパーセント単位で定義します。 **オプション** 有効な値: 整数 デフォルト値: `70` (パーセント)  | 
| gpu\$1threshold\$1p95 |  GPU 使用率の 95 番目の分位数のしきい値をパーセント単位で定義します。 **オプション** 有効な値: 整数 デフォルト値: `70` (パーセント)  | 
| gpu\$1memory\$1threshold\$1p95 | GPU メモリ使用率の 95 番目の分位数のしきい値をパーセント単位で定義します。 **オプション** 有効な値: 整数 デフォルト値: `70` (パーセント)  | 
| patience | ルールが評価を開始するまでにスキップするデータポイントの数を定義します。通常、トレーニングジョブの最初の数ステップでは大量のデータ処理が表示されるため、ルールを抑え気味に保ち、このパラメータで指定するプロファイリングデータの特定の数を使ってルールがすぐに呼び出されないようにします。 **オプション** 有効な値: 整数 デフォルト値: `100`  | 
| window |  分位数を計算するためのウィンドウサイズ。 **オプション** 有効な値: 整数 デフォルト値: `500`  | 
| scan\$1interval\$1us |  タイムラインファイルがスキャンされる時間間隔。 **オプション** 有効な値: 整数 デフォルト値: `60000000` (マイクロ秒)  | 

## CPUBottleneck
<a name="cpu-bottleneck"></a>

CPUBottleneck ルールは、CPU のボトルネックのために GPU が十分に利用されていないか検出するのに役立ちます。CPU のボトルネックの数が事前定義されたしきい値を超えた場合、ルールは true を返します。

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


| Parameter Name | 説明 | 
| --- | --- | 
| base\$1trial | 基本トライアルトレーニングジョブ名。このパラメータは、Amazon SageMaker デバッガーによって現在のトレーニングジョブに自動的に設定されます。 **必須** 有効な値: 文字列  | 
| threshold |  合計トレーニング時間に対するボトルネック時間の割合のしきい値を定義します。この割合がしきい値パラメータに指定されたパーセンテージを超えた場合、ルールはルールのステータスを true に切り替えます。 **オプション** 有効な値: 整数 デフォルト値: `50` (パーセント)  | 
| gpu\$1threshold |  低 GPU 使用率を定義するしきい値。 **オプション** 有効な値: 整数 デフォルト値: `10` (パーセント)  | 
| cpu\$1threshold | 高 CPU 使用率を定義するしきい値。 **オプション** 有効な値: 整数 デフォルト値: `90` (パーセント)  | 
| patience | ルールが評価を開始するまでにスキップするデータポイントの数を定義します。通常、トレーニングジョブの最初の数ステップでは大量のデータ処理が表示されるため、ルールを抑え気味に保ち、このパラメータで指定するプロファイリングデータの特定の数を使ってルールがすぐに呼び出されないようにします。 **オプション** 有効な値: 整数 デフォルト値: `100`  | 
| scan\$1interval\$1us | タイムラインファイルがスキャンされる時間間隔。 **オプション** 有効な値: 整数 デフォルト値: `60000000` (マイクロ秒)  | 

## GPUMemoryIncrease
<a name="gpu-memory-increase"></a>

GPUMemoryIncrease ルールは、GPU のメモリ使用量の大幅な増加を検出するのに役立ちます。

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


| Parameter Name | 説明 | 
| --- | --- | 
| base\$1trial | 基本トライアルトレーニングジョブ名。このパラメータは、Amazon SageMaker デバッガーによって現在のトレーニングジョブに自動的に設定されます。 **必須** 有効な値: 文字列  | 
| increase |  絶対メモリ増加のしきい値を定義します。 **オプション** 有効な値: 整数 デフォルト値: `10` (パーセント)  | 
| patience |  ルールが評価を開始するまでにスキップするデータポイントの数を定義します。通常、トレーニングジョブの最初の数ステップでは大量のデータ処理が表示されるため、ルールを抑え気味に保ち、このパラメータで指定するプロファイリングデータの特定の数を使ってルールがすぐに呼び出されないようにします。 **オプション** 有効な値: 整数 デフォルト値: `100`  | 
| window |  分位数を計算するためのウィンドウサイズ。 **オプション** 有効な値: 整数 デフォルト値: `500`  | 
| scan\$1interval\$1us |  タイムラインファイルがスキャンされる時間間隔。 **オプション** 有効な値: 整数 デフォルト値: `60000000` (マイクロ秒)  | 

## IOBottleneck
<a name="io-bottleneck"></a>

このルールは、データ I/O のボトルネックのために GPU が十分に利用されていないか検出するのに役立ちます。IO のボトルネックの数が事前定義されたしきい値を超えた場合、ルールは true を返します。

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


| Parameter Name | 説明 | 
| --- | --- | 
| base\$1trial | 基本トライアルトレーニングジョブ名。このパラメータは、Amazon SageMaker デバッガーによって現在のトレーニングジョブに自動的に設定されます。 **必須** 有効な値: 文字列  | 
| threshold | ルールが true を返すときのしきい値を定義します。**オプション**有効な値: 整数デフォルト値: `50` (パーセント) | 
| gpu\$1threshold |  GPU が十分に利用されていないと見なされるタイミングを定義するしきい値。 **オプション** 有効な値: 整数 デフォルト値: `70` (パーセント)  | 
| io\$1threshold | 高 IO 待機時間を定義するしきい値。**オプション**有効な値: 整数デフォルト値: `50` (パーセント) | 
| patience | ルールが評価を開始するまでにスキップするデータポイントの数を定義します。通常、トレーニングジョブの最初の数ステップでは大量のデータ処理が表示されるため、ルールを抑え気味に保ち、このパラメータで指定するプロファイリングデータの特定の数を使ってルールがすぐに呼び出されないようにします。**オプション**有効な値: 整数デフォルト値: `1000` | 
| scan\$1interval\$1us |  タイムラインファイルがスキャンされる時間間隔。 **オプション** 有効な値: 整数 デフォルト値: `60000000` (マイクロ秒)  | 

## LoadBalancing
<a name="load-balancing"></a>

LoadBalancing ルールは、複数の GPU 間のワークロードバランスの問題を検出するのに役立ちます。

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


| Parameter Name | 説明 | 
| --- | --- | 
| base\$1trial | 基本トライアルトレーニングジョブ名。このパラメータは、Amazon SageMaker デバッガーによって現在のトレーニングジョブに自動的に設定されます。 **必須** 有効な値: 文字列  | 
| threshold |  ワークロードのパーセンテージを定義します。 **オプション** 有効な値: 整数 デフォルト値: `0.5` (単位なしの割合)  | 
| patience |  ルールが評価を開始するまでにスキップするデータポイントの数を定義します。通常、トレーニングジョブの最初の数ステップでは大量のデータ処理が表示されるため、ルールを抑え気味に保ち、このパラメータで指定するプロファイリングデータの特定の数を使ってルールがすぐに呼び出されないようにします。 **オプション** 有効な値: 整数 デフォルト値: `10`  | 
| scan\$1interval\$1us |  タイムラインファイルがスキャンされる時間間隔。 **オプション** 有効な値: 整数 デフォルト値: `60000000` (マイクロ秒)  | 

## LowGPUUtilization
<a name="low-gpu-utilization"></a>

LowGPUUtilization ルールは、GPU の使用率が低い、または変動による影響を受けていないか検出するのに役立ちます。これは、各ワーカーの GPU ごとにチェックされます。95 番目の分位数が低使用率を示す threshold\$1p95 を下回ると、ルールは true を返します。95 番目の分位数が threshold\$1p95 を上回り、5 番目の分位数が変動を示す threshold\$1p5 を下回ると、ルールは true を返します。

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


| Parameter Name | 説明 | 
| --- | --- | 
| base\$1trial | 基本トライアルトレーニングジョブ名。このパラメータは、Amazon SageMaker デバッガーによって現在のトレーニングジョブに自動的に設定されます。 **必須** 有効な値: 文字列  | 
| threshold\$1p95 |  これを下回ると GPU が十分に利用されていないと見なされる 95 番目の分位数のしきい値。 **オプション** 有効な値: 整数 デフォルト値: `70` (パーセント)  | 
| threshold\$1p5 | 5 番目の分位数のしきい値。デフォルトは 10 パーセントです。**オプション**有効な値: 整数デフォルト値: `10` (パーセント) | 
| patience |  ルールが評価を開始するまでにスキップするデータポイントの数を定義します。通常、トレーニングジョブの最初の数ステップでは大量のデータ処理が表示されるため、ルールを抑え気味に保ち、このパラメータで指定するプロファイリングデータの特定の数を使ってルールがすぐに呼び出されないようにします。 **オプション** 有効な値: 整数 デフォルト値: `1000`  | 
| window |  分位数を計算するためのウィンドウサイズ。 **オプション** 有効な値: 整数 デフォルト値: `500`  | 
| scan\$1interval\$1us |  タイムラインファイルがスキャンされる時間間隔。 **オプション** 有効な値: 整数 デフォルト値: `60000000` (マイクロ秒)  | 

## OverallSystemUsage
<a name="overall-system-usage"></a>

OverallSystemUsage ルールは、ワーカーノードごとの全体的なシステム使用量を測定します。このルールは現在、ノードごとの値を集約し、そのパーセンタイルを計算するだけです。

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


| Parameter Name | 説明 | 
| --- | --- | 
| base\$1trial | 基本トライアルトレーニングジョブ名。このパラメータは、Amazon SageMaker デバッガーによって現在のトレーニングジョブに自動的に設定されます。 **必須** 有効な値: 文字列  | 
| scan\$1interval\$1us |  タイムラインファイルをスキャンする時間間隔。 **オプション** 有効な値: 整数 デフォルト値: `60000000` (マイクロ秒)  | 

## MaxInitializationTime
<a name="max-initialization-time"></a>

MaxInitializationTime ルールは、トレーニングの初期化に時間がかかりすぎていないか検出するのに役立ちます。ルールは、最初のステップが利用可能になるまで待機します。

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


| Parameter Name | 説明 | 
| --- | --- | 
| base\$1trial | 基本トライアルトレーニングジョブ名。このパラメータは、Amazon SageMaker デバッガーによって現在のトレーニングジョブに自動的に設定されます。 **必須** 有効な値: 文字列  | 
| threshold |  最初のステップが使用可能になるまでの待機時間のしきい値を分単位で定義します。 **オプション** 有効な値: 整数 デフォルト値: `20` (分)  | 
| scan\$1interval\$1us |  タイムラインファイルがスキャンされる時間間隔。 **オプション** 有効な値: 整数 デフォルト値: `60000000` (マイクロ秒)  | 

## OverallFrameworkMetrics
<a name="overall-framework-metrics"></a>

OverallFrameworkMetrics ルールは、フォワードパス、バックワードパス、データロードなど、フレームワークメトリクスにかかった時間を集約します。

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


| Parameter Name | 説明 | 
| --- | --- | 
| base\$1trial | 基本トライアルトレーニングジョブ名。このパラメータは、Amazon SageMaker デバッガーによって現在のトレーニングジョブに自動的に設定されます。 **必須** 有効な値: 文字列  | 
| scan\$1interval\$1us |  タイムラインファイルをスキャンする時間間隔。 **オプション** 有効な値: 整数 デフォルト値: `60000000` (マイクロ秒)  | 

## StepOutlier
<a name="step-outlier"></a>

StepOutlier ルールは、ステップ期間の外れ値を検出するのに役立ちます。このルールは、一定の時間範囲内のステップ期間にステップ期間全体の `stddev` シグマよりも大きな外れ値がある場合に `True` を返します。

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


| Parameter Name | 説明 | 
| --- | --- | 
| base\$1trial | 基本トライアルトレーニングジョブ名。このパラメータは、Amazon SageMaker デバッガーによって現在のトレーニングジョブに自動的に設定されます。 **必須** 有効な値: 文字列  | 
| stddev |  標準偏差を乗算する係数を定義します。例えば、デフォルトでステップ期間が標準偏差の 5 倍より大きいか小さい場合、ルールが呼び出されます。 **オプション** 有効な値: 整数 デフォルト値: `5` (分)  | 
| mode | ステップが保存され、ルールが実行されるモード。デフォルトでは、ルールは EVAL および TRAIN フェーズのステップで実行されます。**オプション**有効な値: 整数デフォルト値: `5` (分) | 
| n\$1outliers | ルールが true を返すまでに無視する外れ値の数**オプション**有効な値: 整数デフォルト値: `10` | 
| scan\$1interval\$1us |  タイムラインファイルがスキャンされる時間間隔。 **オプション** 有効な値: 整数 デフォルト値: `60000000` (マイクロ秒)  | 

# Amazon SageMaker Studio Classic Experiments の Amazon SageMaker Debugger UI
<a name="debugger-on-studio"></a>

Amazon SageMaker Studio Classic Experiments の Amazon SageMaker Debugger Insights ダッシュボードを使用して、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスでトレーニングジョブを実行している間に、モデルのパフォーマンスとシステムのボトルネックを分析します。デバッガーダッシュボードを使って、トレーニングジョブに関するインサイトを得て、モデルトレーニングのパフォーマンスと精度を向上させます。デフォルトでは、デバッガーはトレーニングジョブのシステムメトリクス (CPU、GPU、GPU メモリ、ネットワーク、データ I/O) を 500 ミリ秒ごとに、基本的な出力テンソル (損失と精度) を 500 反復ごとにモニタリングします。また、Studio Classic UI または [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) を使って、Debugger の設定パラメータ値をさらにカスタマイズし、保存間隔を調整することもできます。

**重要**  
既存の Studio Classic アプリケーションを使用している場合は、アプリケーションを削除して再起動すると、最新の Studio Classic 機能を使用できるようになります。Studio Classic 環境を再起動して更新する方法については、「[Update Amazon SageMaker AI Studio Classic](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-tasks-update.html)」を参照してください。

**Topics**
+ [Amazon SageMaker Debugger インサイトダッシュボードを開く](debugger-on-studio-insights.md)
+ [Amazon SageMaker Debugger Insights ダッシュボードコントローラー](debugger-on-studio-insights-controllers.md)
+ [Amazon SageMaker Debugger Insights ダッシュボードの詳細](debugger-on-studio-insights-walkthrough.md)
+ [Amazon SageMaker Debugger Insights インスタンスをシャットダウンする](debugger-on-studio-insights-close.md)

# Amazon SageMaker Debugger インサイトダッシュボードを開く
<a name="debugger-on-studio-insights"></a>

Studio Classic の SageMaker Debugger Insights ダッシュボードでは、Amazon EC2 インスタンスで実行されるトレーニングジョブのコンピューティングリソース使用率、リソース使用率、システムボトルネック情報をリアルタイムおよびトレーニング後に確認できます。

**注記**  
SageMaker Debugger Insights ダッシュボードは、`ml.m5.4xlarge` インスタンス上で Studio Classic アプリケーションを実行し、可視化データを処理してレンダリングします。各 [SageMaker Debugger Insights] タブは、1 つの Studio Classic カーネルセッションを実行します。複数の [SageMaker Debugger Insights] タブに対する複数のカーネルセッションが 1 つのインスタンスで実行されます。[SageMaker Debugger Insights] タブを閉じると、対応するカーネルセッションも閉じられます。Studio Classic アプリケーションはアクティブな状態を維持し、その分の `ml.m5.4xlarge` インスタンスの使用料が発生します。料金の詳細については、「[Amazon SageMaker の料金](https://aws.amazon.com/sagemaker/pricing/)」ページを参照してください。

**重要**  
SageMaker デバッガーインサイトダッシュボードの使用が終了したら、料金が発生しないように `ml.m5.4xlarge` インスタンスをシャットダウンする必要があります。インスタンスをシャットダウンする方法については、「[Amazon SageMaker Debugger Insights インスタンスをシャットダウンする](debugger-on-studio-insights-close.md)」を参照してください。

**SageMaker デバッガーインサイトダッシュボードを開く**

1. Studio の**[ホーム]** ページの左側のナビゲーションペインで **[実験]** を選択します。

1. **[Experiments]** ページでトレーニングジョブを検索します。トレーニングジョブに Experiments の実行が設定されている場合、そのジョブは **[Experiments]** タブに表示されます。Experiments の実行を設定していない場合、ジョブは **[Unassigned runs]** タブに表示されます。

1. トレーニングジョブ名のリンクを選択 (クリック) すると、ジョブの詳細が表示されます。

1. **[概要]** メニューで **[Debuggger]** を選択します。次の 2 つのセクションが表示されます。
   + **[Debugger ルール]** セクションでは、トレーニングジョブに関連するデバッガーの組み込みルールのステータスを参照できます。
   + **[Debugger insights]** セクションには、ダッシュボードで SageMaker Debugger Insights を開くためのリンクがあります。

1. **[SageMaker Debugger Insights]** セクションで、トレーニングジョブ名のリンクを選択して SageMaker デバッガーインサイトダッシュボードを開きます。これにより、**[Debug [your-training-job-name]]** ウィンドウが開きます。このウィンドウでは、デバッガーは Amazon EC2 インスタンス上のトレーニングジョブの計算性能の概要を表示し、コンピューティングリソースの使用率に関する問題を特定するのに役立ちます。

SageMaker Debugger の組み込み「[ProfilerReport](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-built-in-rules.html#profiler-report)」ルールを追加して、集約されたプロファイリングレポートをダウンロードすることもできます。詳細については、「[Configure Built-in Profiler Rules](https://docs.aws.amazon.com/sagemaker/latest/dg/use-debugger-built-in-profiler-rules.html)」および「[Profiling Report Generated Using SageMaker Debugger](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-profiling-report.html)」を参照してください。

# Amazon SageMaker Debugger Insights ダッシュボードコントローラー
<a name="debugger-on-studio-insights-controllers"></a>

Debugger のコントローラーには、モニタリングやプロファイリングのためのさまざまなコンポーネントがあります。このガイドでは、デバッガーコントローラーコンポーネントについて説明します。

**注記**  
SageMaker Debugger Insights ダッシュボードは、`ml.m5.4xlarge` インスタンス上で Studio Classic アプリケーションを実行し、可視化データを処理してレンダリングします。各 [SageMaker Debugger Insights] タブは、1 つの Studio Classic カーネルセッションを実行します。複数の [SageMaker Debugger Insights] タブに対する複数のカーネルセッションが 1 つのインスタンスで実行されます。[SageMaker Debugger Insights] タブを閉じると、対応するカーネルセッションも閉じられます。Studio Classic アプリケーションはアクティブな状態を維持し、その分の `ml.m5.4xlarge` インスタンスの使用料が発生します。料金の詳細については、「[Amazon SageMaker の料金](https://aws.amazon.com/sagemaker/pricing/)」ページを参照してください。

**重要**  
SageMaker Debugger Insights ダッシュボードの使用が終了したら、料金が発生しないように `ml.m5.4xlarge` インスタンスをシャットダウンします。インスタンスをシャットダウンする方法については、「[Amazon SageMaker Debugger Insights インスタンスをシャットダウンする](debugger-on-studio-insights-close.md)」を参照してください。

## SageMaker Debugger Insights コントローラー UI
<a name="debugger-on-studio-insights-controller"></a>

インサイトダッシュボードの左上隅にあるデバッガーコントローラーを使って、ダッシュボードの更新、システムメトリクスのモニタリングするためのデバッガー設定を構成または更新、トレーニングジョブの停止、デバッガープロファイリングレポートのダウンロードを行うことができます。

![\[SageMaker デバッガーインサイトダッシュボードコントローラー\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-studio-insights-refresh.png)

+ ダッシュボードを手動で更新する場合は、前のスクリーンショットに示すように、[更新] ボタン (左上隅の丸い矢印) を選択します。
+ SageMaker Python SDK を使用して開始されたすべての SageMaker トレーニングジョブでは、**[モニタリング]** トグルボタンがデフォルトでオンになっています。有効になっていない場合は、トグルボタンを使用してモニタリングを開始できます。モニタリング中、デバッガーは、リソース使用率のメトリクスのみ収集して、CPU のボトルネックや GPU の低使用率などのリソース使用率の問題を検出します。Debugger がモニタリングするリソース使用率の問題を網羅したリストについては、「[ハードウェアシステムのリソース使用率 (システムメトリクス)をプロファイリングするための Debugger 組み込みルール](debugger-built-in-profiler-rules.md#built-in-rules-monitoring)」を参照してください。
+ **[モニタリングの設定]** ボタンをクリックすると、ポップアップウィンドウが開き、データ収集の頻度やデータを保存する S3 パスを設定または更新できます。  
![\[Debugger のモニタリング設定を行うためのポップアップウィンドウ\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-studio-enable-profiling-2.png)

  以下のフィールドに値を指定できます。
  + **[S3 バケット URI]**: ベース S3 バケット URI を指定します。
  + **[モニタリングデータを収集する間隔]**: システムメトリックを収集する時間間隔を選択します。ドロップダウンリストから、モニタリング間隔を選択できます。利用可能な間隔は、100 ミリ秒、200 ミリ秒、500 ミリ秒 (デフォルト)、1 秒、5 秒、および 1 分です。
**注記**  
時間間隔を短くすると、リソース使用率メトリックの粒度が上がるため、スパイクや異常を高い時間分解能でキャプチャできます。ただし、解像度が高いほど、処理するシステムメトリクスのサイズが大きくなります。これにより、オーバーヘッドが増え、トレーニングや処理時間全体に影響を与える可能性があります。
+ **[トレーニングの停止]** ボタンを使用して、リソースの使用率に異常が見つかった場合にトレーニングジョブを停止することができます。
+ **[レポートをダウンロード]** ボタンを使用すると、SageMaker デバッガーの組み込み [ProfilerReport](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-built-in-rules.html#profiler-report) ルールを使用して、集約されたプロファイリングレポートをダウンロードできます。このボタンは、組み込みの [ProfilerReport](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-built-in-rules.html#profiler-report) ルールを推定器に追加すると有効になります。詳細については、「[Configure Built-in Profiler Rules](https://docs.aws.amazon.com/sagemaker/latest/dg/use-debugger-built-in-profiler-rules.html)」および「[Profiling Report Generated Using SageMaker Debugger](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-profiling-report.html)」を参照してください。

# Amazon SageMaker Debugger Insights ダッシュボードの詳細
<a name="debugger-on-studio-insights-walkthrough"></a>

SageMaker トレーニングジョブを開始すると、SageMaker Debugger は Amazon EC2 インスタンスのリソース使用率のモニタリングをデフォルトで開始します。インサイトダッシュボードでは、システム使用率、統計概要、および組み込みルール分析を追跡できます。このガイドでは、次のタブにある SageMaker デバッガーインサイトダッシュボードの内容について説明します。**[システムメトリクス]** タブおよび **[ルール]** タブ。

**注記**  
SageMaker Debugger Insights ダッシュボードは、`ml.m5.4xlarge` インスタンス上で Studio Classic アプリケーションを実行し、可視化データを処理してレンダリングします。各 [SageMaker Debugger Insights] タブは、1 つの Studio Classic カーネルセッションを実行します。複数の [SageMaker Debugger Insights] タブに対する複数のカーネルセッションが 1 つのインスタンスで実行されます。[SageMaker Debugger Insights] タブを閉じると、対応するカーネルセッションも閉じられます。Studio Classic アプリケーションはアクティブな状態を維持し、その分の `ml.m5.4xlarge` インスタンスの使用料が発生します。料金の詳細については、「[Amazon SageMaker の料金](https://aws.amazon.com/sagemaker/pricing/)」ページを参照してください。

**重要**  
SageMaker Debugger Insights ダッシュボードの使用が終了したら、料金が発生しないように `ml.m5.4xlarge` インスタンスをシャットダウンします。インスタンスをシャットダウンする方法については、「[Amazon SageMaker Debugger Insights インスタンスをシャットダウンする](debugger-on-studio-insights-close.md)」を参照してください。

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

**Topics**
+ [システムメトリクス](#debugger-insights-system-metrics-tab)
+ [Rules](#debugger-on-studio-insights-rules)

## システムメトリクス
<a name="debugger-insights-system-metrics-tab"></a>

**[システムメトリクス]** タブでは、サマリーテーブルと時系列プロットを使用してリソース利用率を把握できます。

### リソース使用率の要約
<a name="debugger-on-studio-insights-sys-resource-summary"></a>

この概要テーブルには、全ノード (algo-*n* と表記) のコンピューティングリソースの使用率メトリクスの統計が表示されます。リソース使用率メトリクスには、合計 CPU 使用率、合計 GPU 使用率、合計 CPU メモリ使用率、合計 GPU メモリ使用率、合計 I/O 待機時間、合計ネットワーク (バイト単位) が含まれます。表には、最小値と最大値、 p99、p90、p50 のパーセンタイルが表示されます。

![\[リソース使用率の要約テーブル\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-studio-insights-resource-util-summary.png)


### リソース使用率の時系列プロット
<a name="debugger-on-studio-insights-sys-controller"></a>

時系列グラフを使用すると、リソース使用率の詳細を確認し、各インスタンスがどの時間間隔で望ましくない使用率 (GPU 使用率の低下や高価なインスタンスの浪費の原因となる CPU ボトルネックなど) を示しているかを特定できます。

**時系列グラフコントローラーの UI**

次のスクリーンショットは、時系列グラフを調整するための UI コントローラーを示しています。

![\[\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-insights-graph-controller.png)

+ **[algo-1]**: このドロップダウンメニューを使用して、調べたいノードを選択します。
+ **[ズームイン]**: このボタンを使用すると、時系列グラフを拡大したり、短い時間間隔を表示したりできます。
+ **[ズームアウト]**: このボタンを使用すると、時系列グラフをズームアウトして、より広い時間間隔を表示できます。
+ **[左に移動]**: 時系列グラフをより前の時間間隔に移動します。
+ **[右に移動]**: 時系列グラフをより後の時間間隔に移動します。
+ **[タイムフレームの修正]**: このチェックボックスを使用すると、時系列グラフを固定または元に戻し、最初のデータポイントから最後のデータポイントまで全体が表示されます。

**CPU 使用率と I/O 待ち時間**

最初の 2 つのグラフは、時間経過に伴う CPU 使用率と I/O 待機時間を示しています。デフォルトでは、グラフには CPU コアに費やされた CPU 使用率と I/O 待機時間の平均が表示されます。ラベルを選択して 1 つ以上の CPU コアを選択すると、単一のチャートでグラフ化し、コア間の使用率を比較することができます。ドラッグしてズームイン/アウトして、特定の時間間隔を詳しく見ることができます。

![\[debugger-studio-insight-mockup\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-insights-node-cpu.png)


**GPU 使用率と GPU メモリ使用率**

次のグラフは、時間経過に伴う GPU 使用率と GPU メモリ使用率を示しています。デフォルトでは、グラフには時間経過に伴う平均使用率が表示されます。GPU コアラベルを選択して、各コアの使用率を確認できます。GPU コアの総数に対して使用率の平均をとると、ハードウェアシステムリソース全体の平均使用率がわかります。平均使用率を調べることで、Amazon EC2 インスタンスの全体的なシステムリソースの使用状況を確認できます。次の図は、8 つの GPU コアを持つ `ml.p3.16xlarge` インスタンスでのトレーニングジョブの例を示しています。トレーニングジョブが適切に分散され、すべての GPU を十分に活用しているかどうかをモニタリングできます。

![\[debugger-studio-insight-mockup\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-studio-insights-node-gpu.gif)


**時間経過に伴うシステム全体の使用率**

次のヒートマップは、2 次元プロットに投影された時間経過に伴う `ml.p3.16xlarge` インスタンスのシステム全体の使用率を示しています。各 CPU と GPU コアは縦軸にリストされ、使用率がカラースキームで経時的に記録されています。明るい色は使用率が低いことを表し、暗い色は使用率が高いことを表しています。プロットの右側にあるラベル付きカラーバーを参照して、どのカラーレベルがどの使用率に対応しているかがわかります。

![\[debugger-studio-insight-mockup\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-studio-insights-node-heatmap.png)


## Rules
<a name="debugger-on-studio-insights-rules"></a>

**[ルール]** タブは、トレーニングジョブのプロファイリングルール分析の概要を表示します。トレーニングジョブでプロファイリングルールが有効になっている場合、テキストは白いテキストで強調表示されます。非アクティブなルールはグレーのテキストで淡色表示されます。これらのルールを有効にするには、「[Amazon SageMaker Debugger によって管理される組み込みプロファイラールールを使用する](use-debugger-built-in-profiler-rules.md)」の手順に従ってください。

![\[SageMaker Debugger Insights ダッシュボードの [ルール] タブ\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-insights-rules.png)


# Amazon SageMaker Debugger Insights インスタンスをシャットダウンする
<a name="debugger-on-studio-insights-close"></a>

SageMaker Debugger Insights ダッシュボードを使用していない場合は、追加料金が発生しないように、実行しているインスタンスをシャットダウンする必要があります。

**Studio Classic で SageMaker Debugger Insights アプリケーションのインスタンスをシャットダウンするには**

![\[SageMaker Debugger Insights ダッシュボードインスタンスのシャットダウン方法を示すアニメーションスクリーンショット。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-studio-insights-shut-down.png)


1. Studio Classic で、**[実行中のインスタンスとカーネル]** アイコン (![\[Square icon with a white outline of a cloud on a dark blue background.\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/icons/Running_squid.png)) を選択します。

1. **[RUNNING APPS]** (実行中のアプリケーション) で、**sagemaker-debugger-1.0** アプリケーションを探します。アプリケーションの横にあるシャットダウンアイコン (![\[Power button icon with a circular shape and vertical line symbol.\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/icons/Shutdown_light.png)) を選択します。SageMaker Debugger Insights ダッシュボードは `ml.m5.4xlarge` インスタンスで実行されます。このインスタンスは、**sagemaker-debugger-1.0** アプリケーションをシャットダウンすると、**[RUNNING INSTANCES]** (実行中のインスタンス) からも消えます。

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

Debugger によって自動生成されたプロファイリングレポートを受け取ります。Debugger レポートは、トレーニングジョブに関するインサイトを提供し、モデルのパフォーマンスを向上させるための推奨事項を提案します。次のスクリーンショットは、デバッガープロファイリングレポートのコラージュを示しています。詳細については[SageMaker Debugger インタラクティブレポート](#debugger-profiling-report)を参照してください。

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

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

![\[デバッガートレーニングジョブの要約レポートの例\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-profile-report.jpg)


どの SageMaker トレーニングジョブについても、SageMaker Debugger [ProfilerReport](debugger-built-in-profiler-rules.md#profiler-report) ルールは、すべての[モニタリングとプロファイリングのルール](debugger-built-in-profiler-rules.md#built-in-rules-monitoring)を呼び出し、ルール分析を包括的なレポートに集約します。このガイドに従って、[Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) または S3 コンソールを使ってレポートをダウンロードし、プロファイリング結果から何を解釈できるかを学習します。

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

# SageMaker Debugger プロファイリングレポートをダウンロードする
<a name="debugger-profiling-report-download"></a>

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

**注記**  
SageMaker Debugger によって生成されたプロファイリングレポートを取得するには、SageMaker デバッガーが提供する組み込みの [ProfilerReport](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-built-in-rules.html#profiler-report) ルールを使用する必要があります。トレーニングジョブでルールを有効にするには、「[Configure Built-in Profiler Rules](https://docs.aws.amazon.com/sagemaker/latest/dg/use-debugger-built-in-profiler-rules.html)」を参照してください。

**ヒント**  
または、SageMaker Studio Debugger インサイトダッシュボードで、ワンクリックでレポートをダウンロードできます。レポートをダウンロードするために追加のスクリプトは必要ありません。Studio からレポートをダウンロードする方法については、「[Amazon SageMaker Debugger インサイトダッシュボードを開く](debugger-on-studio-insights.md)」を参照してください。

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

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

   ```
   estimator.output_path
   ```

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

   ```
   estimator.latest_training_job.job_name
   ```

1. デバッガープロファイリングレポートは、`<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
   ```

   これにより、`ProfilerReport-1234567890` という名前の自動生成されたフォルダにファイルの完全なリストが返されます。このフォルダ名は、`ProfilerReport` と、ProfilerReport ルールが開始されたときの Unix タイムスタンプに基づく一意の 10 桁のタグの組み合わせです。  
![\[ルール出力の例\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-rule-output-ls-example.png)

   `profiler-report.html` は、デバッガーによって自動生成されたプロファイリングレポートです。残りのファイルは、JSON に保存されている組み込みルール分析コンポーネントと、それらをレポートにまとめるための Jupyter ノートブックです。

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

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

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

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

------
#### [ Download using 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 バケットを調べます。  
![\[ルール出力の S3 バケット URI の例\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-report-download-s3console-0.png)

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

1. トレーニングジョブの S3 バケットには、デバッガーで収集されたトレーニングデータ用の 3 つのサブフォルダ (**debug-output/**、**profiler-output/**、**rule-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/** フォルダで、**ProfilerReport-1234567890** を選択し、**profiler-output/** フォルダを選択します。この **profiler-output/** フォルダには、**profiler-report.html** (html で自動生成されたプロファイリングレポート)、**profiler-report.ipynb** (レポートの生成に使用されるスクリプトを含む Jupyter ノートブック)、**profiler-report/** フォルダ (レポートのコンポーネントとして使用されるルール分析 JSON ファイルを含む) が含まれています。

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

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

------

**注記**  
デバッガー固有パラメータを設定せずにトレーニングジョブを開始した場合、デバッガーのパラメータがフレームワークメトリクスを保存するように設定されていないため、デバッガーはシステムモニタリングルールにのみ基づいてレポートを生成します。フレームワークメトリクスプロファイリングを有効にして、拡張デバッガープロファイリングレポートを受け取るには、SageMaker AI 推定器の構築または更新時に `profiler_config` パラメータを設定します。  
トレーニングジョブを始める前に `profiler_config` パラメータを設定する方法については、「[フレームワークプロファイリング用の推定器設定](debugger-configure-framework-profiling.md)」を参照してください。  
現在のトレーニングジョブを更新し、フレームワークメトリクスプロファイリングを有効にするには、「[デバッガーのフレームワークプロファイリング設定を更新する](debugger-update-monitoring-profiling.md)」を参照してください。

# デバッガープロファイリングレポートのチュートリアル
<a name="debugger-profiling-report-walkthrough"></a>

このセクションでは、デバッガープロファイリングレポートをセクション別に具体的に説明します。プロファイリングレポートは、モニタリングおよびプロファイリングのための組み込みルールに基づいて生成されます。レポートには、問題を見つけたルールについてのみ結果プロットが表示されます。

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

**Topics**
+ [トレーニングジョブの要約](#debugger-profiling-report-walkthrough-summary)
+ [システム使用統計](#debugger-profiling-report-walkthrough-system-usage)
+ [フレームワークメトリクスの要約](#debugger-profiling-report-walkthrough-framework-metrics)
+ [ルールの概要](#debugger-profiling-report-walkthrough-rules-summary)
+ [トレーニングループの分析 - ステップ期間](#debugger-profiling-report-walkthrough-step-durations)
+ [GPU 使用率分析](#debugger-profiling-report-walkthrough-gpu-utilization)
+ [バッチサイズ](#debugger-profiling-report-walkthrough-batch-size)
+ [CPU のボトルネック](#debugger-profiling-report-walkthrough-cpu-bottlenecks)
+ [I/O のボトルネック](#debugger-profiling-report-walkthrough-io-bottlenecks)
+ [マルチ GPU トレーニングでのロードバランシング](#debugger-profiling-report-walkthrough-workload-balancing)
+ [GPU メモリ分析](#debugger-profiling-report-walkthrough-gpu-memory)

## トレーニングジョブの要約
<a name="debugger-profiling-report-walkthrough-summary"></a>

レポートの冒頭に、デバッガーはトレーニングジョブの要約を記載します。このセクションには、さまざまなトレーニングフェーズの期間とタイムスタンプの概要が記載されています。

![\[デバッガープロファイリングレポートの例\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-profiling-report-summary.gif)


要約テーブルには次の情報が含まれます。
+ **start\$1time** - トレーニングジョブが開始された正確な時刻。
+ **end\$1time** - トレーニングジョブが終了した正確な時刻。
+ **job\$1duration\$1in\$1seconds** - **start\$1time** から **end\$1time** までの合計トレーニング時間。
+ **training\$1loop\$1start** - 最初のエポックの最初のステップが開始された正確な時刻。
+ **training\$1loop\$1end** - 最後のエポックの最後のステップが終了した正確な時刻。
+ **training\$1loop\$1duration\$1in\$1seconds** - トレーニングループの開始時刻とトレーニングループの終了時刻の間の合計時間。
+ **initialization\$1in\$1seconds** - トレーニングジョブの初期化に費やされた時間。初期化フェーズは、**start\$1time** から **training\$1loop\$1start** までの期間をカバーします。初期化時間は、トレーニングスクリプトのコンパイル、トレーニングスクリプトの開始、モデルの作成と初期化、EC2 インスタンスの開始、トレーニングデータのダウンロードに費やされます。
+ **finalization\$1in\$1seconds** - モデルトレーニングの終了、モデルアーティファクトの更新、EC2 インスタンスの終了など、トレーニングジョブの終了に費やされた時間。ファイナライズフェーズは、**training\$1loop\$1end** から **end\$1time** までの時間をカバーします。
+ **initialization (%)** - 合計の **job\$1duration\$1in\$1seconds** に対する**初期化**に費やされた時間の割合。
+ **training loop (%)** - 合計の **job\$1duration\$1in\$1seconds** に対する**トレーニングループ**に費やされた時間の割合。
+ **finalization (%)** - 合計の **job\$1duration\$1in\$1seconds** に対する**ファイナライズ**に費やされた時間の割合。

## システム使用統計
<a name="debugger-profiling-report-walkthrough-system-usage"></a>

このセクションでは、システム使用率統計の概要を確認できます。

![\[デバッガープロファイリングレポートの例\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-profiling-report-system-usage.png)


デバッガープロファイリングレポートには次の情報が含まれます。
+ **node** - ノードの名前をリストします。マルチノード (複数の EC2 インスタンス) で分散トレーニングを行う場合、ノード名は `algo-n` の形式になります。
+ **metric** - デバッガーによって収集されるシステムメトリクス (CPU、GPU、CPU メモリ、GPU メモリ、I/O、ネットワークメトリクス) 。
+ **unit** – システムメトリクスの単位。
+ **max** - 各システムメトリクスの最大値。
+ **p99** - 各システム使用率の 99 番目のパーセンタイル。
+ **p95** - 各システム使用率の 95 番目のパーセンタイル。
+ **p50** - 各システム使用率の 50 番目のパーセンタイル (中央値)。
+ **最小** - 各システムメトリクスの最小値。

## フレームワークメトリクスの要約
<a name="debugger-profiling-report-walkthrough-framework-metrics"></a>

このセクションでは、CPU と GPU におけるフレームワークオペレーションの内訳を次の円グラフに示します。

![\[デバッガープロファイリングレポートの例\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-profiling-report-framework-metrics-summary.gif)


各円グラフは、収集されたフレームワークメトリクスを次のようにさまざまな側面で分析します。
+ **TRAIN/EVAL フェーズと他のフェーズの比率** - 異なるトレーニングフェーズに費やされた時間の比率を示します。
+ **フォワードパスとバックパスの比率** - トレーニングループでフォワードパスとバックパスに費やされた時間の比率を示します。
+ **CPU/GPU 演算子の比率** - 畳み込み演算子など、CPU または GPU で実行される演算子に費やされた時間の比率を示します。
+ **フレームワークで記録された一般的なメトリクス** - データロード、フォワードパス、バックワードパスなど、主要なフレームワークメトリクスに費やされた時間の比率を示します。

### 概要: CPU 演算子
<a name="debugger-profiling-report-walkthrough-cpu-operators"></a>

このセクションには、CPU 演算子の詳細な情報が記載されています。表は、最も頻繁に呼び出される CPU 演算子に費やされた時間の割合と絶対累積時間を示しています。

![\[デバッガープロファイリングレポートの例\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-profiling-report-framework-cpu-operators.gif)


### 概要: GPU 演算子
<a name="debugger-profiling-report-walkthrough-gpu-operators"></a>

このセクションには、GPU 演算子の詳細な情報が記載されています。表は、最も頻繁に呼び出される GPU 演算子に費やされた時間の割合と絶対累積時間を示しています。

![\[デバッガープロファイリングレポートの例\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-profiling-report-framework-gpu-operators.gif)


## ルールの概要
<a name="debugger-profiling-report-walkthrough-rules-summary"></a>

このセクションにはデバッガーが、ルールの評価結果、分析、ルールの説明、提案のすべてをまとめます。

![\[デバッガープロファイリングレポートの例\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-profiling-report-rules-summary.png)


## トレーニングループの分析 - ステップ期間
<a name="debugger-profiling-report-walkthrough-step-durations"></a>

このセクションでは、各ノードの各 GPU コアにおけるステップ期間の詳細な統計を確認できます。デバッガーは、ステップ期間の平均値、最大値、p99、p95、p50、最小値を評価し、ステップの外れ値を評価します。次のヒストグラムは、さまざまなワーカーノードと GPU でキャプチャされたステップ期間を示しています。右側の凡例を選択すると、各ワーカーのヒストグラムを有効または無効にできます。ステップ期間の外れ値を生じさせている特定の GPU があるかどうかをチェックできます。

![\[デバッガープロファイリングレポートの例\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-profiling-report-framework-step-duration.gif)


## GPU 使用率分析
<a name="debugger-profiling-report-walkthrough-gpu-utilization"></a>

このセクションには、LowGPUUtilization ルールに基づく GPU コア使用率の詳細な統計が記載されています。また、トレーニングジョブが GPU を十分に活用しているかどうかを判断するために、GPU 使用率の統計、平均、p95、p5 を要約します。

## バッチサイズ
<a name="debugger-profiling-report-walkthrough-batch-size"></a>

このセクションには、合計 CPU 使用率、個々の GPU 使用率、GPU メモリフットプリントの詳細な統計が記載されています。BatchSize ルールは、GPU をより有効に活用するためにバッチサイズを変更する必要があるかどうかを判断します。バッチサイズが小さすぎて使用率が低くなったり、大きすぎて使用率が過大になりメモリ不足に陥ったりしていないかどうかをチェックできます。プロットにおきボックスは、中央値 (p50) から p25 および p75 までのパーセンタイル範囲 (それぞれ濃い紫と明るい黄色で塗りつぶされている) を示し、エラーバーは下限の 5 パーセンタイルと上限の 95 パーセンタイルを示します。

![\[デバッガープロファイリングレポートの例\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-profiling-report-batch-size.png)


## CPU のボトルネック
<a name="debugger-profiling-report-walkthrough-cpu-bottlenecks"></a>

このセクションでは、CPUBottleneck ルールがトレーニングジョブから検出した CPU のボトルネックをドリルダウンできます。このルールは、CPU 使用率が `cpu_threshold` (デフォルトでは 90%) を上回っているかどうかと、GPU 使用率が `gpu_threshold` (デフォルトでは 10%) を下回っているかどうかをチェックします。

![\[デバッガープロファイリングレポートの例\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-profiling-report-cpu-bottlenecks.png)


円グラフには次の情報が表示されます。
+ **CPU のボトルネックによる GPU 使用率の低下** - GPU 使用率がしきい値を上回るおよび下回るデータポイントの比率と、CPU のボトルネック基準に一致するデータポイントの比率を示します。
+ **TRAIN/EVAL フェーズと他のフェーズの比率** - 異なるトレーニングフェーズに費やされた時間の比率を示します。
+ **フォワードパスとバックパスの比率** - トレーニングループでフォワードパスとバックパスに費やされた時間の比率を示します。
+ **CPU/GPU 演算子の比率** - データローダープロセス、フォワードパス演算子、バックワードパス演算子など、Python 演算子によって GPU と CPU に費やされた時間の比率を示します。
+ **フレームワークに記録された一般的なメトリクス** - 主要なフレームワークメトリクスと、メトリクスに費やされた時間の比率を示します。

## I/O のボトルネック
<a name="debugger-profiling-report-walkthrough-io-bottlenecks"></a>

このセクションには、I/O のボトルネックの要約が示されます。このルールは、I/O 待機時間と GPU 使用率を評価し、I/O リクエストに費やされた時間が合計トレーニング時間のしきい値のパーセントを超えたかどうかをモニタリングします。これは、GPU がストレージからのデータの到着を待っている場合の I/O ボトルネックを示している可能性があります。

## マルチ GPU トレーニングでのロードバランシング
<a name="debugger-profiling-report-walkthrough-workload-balancing"></a>

このセクションでは、すべての GPU にわたるワークロードバランシングの問題を特定できます。

![\[デバッガープロファイリングレポートの例\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-profiling-report-workload-balancing.gif)


## GPU メモリ分析
<a name="debugger-profiling-report-walkthrough-gpu-memory"></a>

このセクションでは、GPUMemoryIncrease ルールによって収集された GPU メモリ使用率を分析できます。プロットにおきボックスは、中央値 (p50) から p25 および p75 までのパーセンタイル範囲 (それぞれ濃い紫と明るい黄色で塗りつぶされている) を示し、エラーバーは下限の 5 パーセンタイルと上限の 95 パーセンタイルを示します。

![\[デバッガープロファイリングレポートの例\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-profiling-report-gpu-memory-utilization.png)


# Amazon SageMaker Debugger の使用統計の収集をオプトアウトする
<a name="debugger-telemetry"></a>

すべての SageMaker トレーニングジョブについて、Amazon SageMaker デバッガーは、[ProfilerReport](debugger-built-in-profiler-rules.md#profiler-report) ルールを実行し、[SageMaker Debugger インタラクティブレポート](debugger-profiling-report.md) を自動生成します。`ProfilerReport` ルールは、対応する HTML ファイル (`profiler-report.html`) を生成する Jupyter ノートブックファイル (`profiler-report.ipynb`) を提供します。

デバッガーは、ユーザーが最終的な `profiler-report.html` ファイルを開くと、一意の `ProfilerReport` ルールの処理ジョブ ARN を収集するコードを Jupyter ノートブックに含めることによって、プロファイリングレポートの使用統計を収集します。

デバッガーは、ユーザーが最終的な HTML レポートを開いたかどうかに関する情報のみを収集します。トレーニングジョブ、トレーニングデータ、トレーニングスクリプト、処理ジョブ、ログ、プロファイリングレポート自体のコンテンツから情報を収集することは**ありません**。

次のいずれかのオプションを使って、使用統計の収集をオプトアウトできます。

## (推奨) オプション 1: トレーニングジョブの実行前にオプトアウトする
<a name="debugger-telemetry-profiler-report-opt-out-1"></a>

オプトアウトするには、次のデバッガー `ProfilerReport` ルール設定をトレーニングジョブリクエストに追加する必要があります。

------
#### [ SageMaker Python SDK ]

```
estimator=sagemaker.estimator.Estimator(
    ...

    rules=ProfilerRule.sagemaker(
        base_config=rule_configs.ProfilerReport()
        rule_parameters={"opt_out_telemetry": "True"}
    )
)
```

------
#### [ AWS CLI ]

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

------
#### [ AWS SDK for Python (Boto3) ]

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

------

## オプション 2: トレーニングジョブの完了後にオプトアウトする
<a name="debugger-telemetry-profiler-report-opt-out-2"></a>

トレーニングの完了後にオプトアウトするには、`profiler-report.ipynb` ファイルを変更する必要があります。

**注記**  
**オプション 1** がトレーニングジョブリクエストに追加されないまま自動生成された HTML レポートは、**オプション 2** でオプトアウトされた後でも、使用統計を報告します。

1. [SageMaker Debugger プロファイリングレポートをダウンロードする](debugger-profiling-report-download.md) ページのデバッガープロファイリングレポートファイルのダウンロード手順に従います。

1. `/ProfilerReport-1234567890/profiler-output` ディレクトリで、`profiler-report.ipynb` を開きます。

1. 次のサンプルコードに示すように、5 番目のコードセルの `setup_profiler_report()` 関数に **opt\$1out=True** を追加します。

   ```
   setup_profiler_report(processing_job_arn, opt_out=True)
   ```

1. コードセルを実行してオプトアウトを終了します。

# Debugger Python クライアントライブラリを使用してデータを分析する
<a name="debugger-analyze-data"></a>

トレーニングジョブの実行中または完了後に、[Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) と [SMDebug クライアントライブラリ](https://github.com/awslabs/sagemaker-debugger/)を使って、デバッガーによって収集されたトレーニングデータにアクセスできます。Debugger Python クライアントライブラリには、トレーニングジョブデータをドリルダウンできる分析および視覚化ツールが用意されています。

**ライブラリをインストールして分析ツールを使用するには (JupyterLab ノートブックまたは iPython カーネルで)**

```
! pip install -U smdebug
```

次のトピックでは、Debugger Python ツールを使用してデバッガーによって収集されたトレーニングデータを視覚化して分析する方法について具体的に説明します。

**システムおよびフレームワークのメトリクスを分析する**
+ [プロファイルデータにアクセスする](debugger-analyze-data-profiling.md)
+ [システムメトリクスとフレームワークメトリクスのデータをプロットする](debugger-access-data-profiling-default-plot.md)
+ [Pandas データ解析ツールを使用してプロファイリングデータにアクセスする](debugger-access-data-profiling-pandas-frame.md)
+ [Python プロファイリング統計データにアクセスする](debugger-access-data-python-profiling.md)
+ [複数のプロファイルトレースファイルのタイムラインをマージする](debugger-merge-timeline.md)
+ [データローダーをプロファイリングする](debugger-data-loading-time.md)

# プロファイルデータにアクセスする
<a name="debugger-analyze-data-profiling"></a>

SMDebug `TrainingJob` クラスは、システムおよびフレームワークのメトリクスが保存されている S3 バケットからデータを読み取ります。

**`TrainingJob` オブジェクトを設定し、トレーニングジョブのプロファイリングイベントファイルを取得するには**

```
from smdebug.profiler.analysis.notebook_utils.training_job import TrainingJob
tj = TrainingJob(training_job_name, region)
```

**ヒント**  
`training_job_name` と `region` パラメータを指定して、トレーニングジョブにログを記録する必要があります。トレーニングジョブの情報を指定するには、2 つの方法があります。  
SageMaker Python SDK を、推定器がトレーニングジョブに添付されている間に使用する。  

  ```
  import sagemaker
  training_job_name=estimator.latest_training_job.job_name
  region=sagemaker.Session().boto_region_name
  ```
文字列を直接渡す。  

  ```
  training_job_name="your-training-job-name-YYYY-MM-DD-HH-MM-SS-SSS"
  region="us-west-2"
  ```

**注記**  
デフォルトで、SageMaker デバッガーはシステムメトリクスを収集して、ハードウェアリソースの使用率とシステムのボトルネックをモニタリングします。次の関数を実行すると、フレームワークメトリクスが使用できないというエラーメッセージが表示されることがあります。フレームワークプロファイリングデータを取得し、フレームワークオペレーションに関するインサイトを得るには、フレームワークプロファイリングを有効にする必要があります。  
SageMaker Python SDK を使ってトレーニングジョブリクエストを操作する場合は、`framework_profile_params` を推定器の `profiler_config` 引数に渡します。詳細については、「[SageMaker デバッガーフレームワークプロファイリングを設定する](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-configure-framework-profiling.html)」を参照してください。
Studio Classic を使用している場合は、Debugger のインサイトダッシュボードの **[プロファイリング]** トグルボタンを使ってプロファイリングをオンにします。詳細については、「[SageMaker デバッガーインサイトダッシュボードコントローラー](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-on-studio-insights-controllers.html)」を参照してください。

**トレーニングジョブの説明とメトリクスデータが保存されている S3 バケット URI を取得するには**

```
tj.describe_training_job()
tj.get_config_and_profiler_s3_output_path()
```

**システムおよびフレームワークのメトリクスが S3 URI から利用可能かどうかをチェックするには**

```
tj.wait_for_sys_profiling_data_to_be_available()
tj.wait_for_framework_profiling_data_to_be_available()
```

**メトリクスデータが利用可能になった後にシステムおよびフレームワークのリーダーオブジェクトを作成するには**

```
system_metrics_reader = tj.get_systems_metrics_reader()
framework_metrics_reader = tj.get_framework_metrics_reader()
```

**最新のトレーニングイベントファイルを更新して取得するには**

リーダーオブジェクトには、最新のトレーニングイベントファイルを取得するための拡張メソッド `refresh_event_file_list()` があります。

```
system_metrics_reader.refresh_event_file_list()
framework_metrics_reader.refresh_event_file_list()
```

# システムメトリクスとフレームワークメトリクスのデータをプロットする
<a name="debugger-access-data-profiling-default-plot"></a>

次の視覚化クラスのためのシステムおよびアルゴリズムのメトリクスオブジェクトを使って、タイムライングラフとヒストグラムをプロットできます。

**注記**  
次の視覚化オブジェクトのプロットメソッドで絞り込まれたメトリクスのデータを視覚化するには、`select_dimensions` と `select_events` パラメータを指定します。例えば、`select_dimensions=["GPU"]` を指定すると、プロットメソッドは「GPU」キーワードを含むメトリクスをフィルターします。`select_events=["total"]` を指定すると、プロットメソッドはメトリクス名の末尾に「total」イベントタグを含むメトリクスをフィルターします。これらのパラメータを有効にしてキーワード文字列を与えると、視覚化クラスはフィルターされたメトリクスを含むグラフを返します。
+ `MetricsHistogram` クラス

  ```
  from smdebug.profiler.analysis.notebook_utils.metrics_histogram import MetricsHistogram
  
  metrics_histogram = MetricsHistogram(system_metrics_reader)
  metrics_histogram.plot(
      starttime=0, 
      endtime=system_metrics_reader.get_timestamp_of_latest_available_file(), 
      select_dimensions=["CPU", "GPU", "I/O"], # optional
      select_events=["total"]                  # optional
  )
  ```
+ `StepTimelineChart` クラス

  ```
  from smdebug.profiler.analysis.notebook_utils.step_timeline_chart import StepTimelineChart
  
  view_step_timeline_chart = StepTimelineChart(framework_metrics_reader)
  ```
+ `StepHistogram` クラス

  ```
  from smdebug.profiler.analysis.notebook_utils.step_histogram import StepHistogram
  
  step_histogram = StepHistogram(framework_metrics_reader)
  step_histogram.plot(
      starttime=step_histogram.last_timestamp - 5 * 1000 * 1000, 
      endtime=step_histogram.last_timestamp, 
      show_workers=True
  )
  ```
+ `TimelineCharts` クラス

  ```
  from smdebug.profiler.analysis.notebook_utils.timeline_charts import TimelineCharts
  
  view_timeline_charts = TimelineCharts(
      system_metrics_reader, 
      framework_metrics_reader,
      select_dimensions=["CPU", "GPU", "I/O"], # optional
      select_events=["total"]                  # optional 
  )
  
  view_timeline_charts.plot_detailed_profiler_data([700,710])
  ```
+ `Heatmap` クラス

  ```
  from smdebug.profiler.analysis.notebook_utils.heatmap import Heatmap
  
  view_heatmap = Heatmap(
      system_metrics_reader,
      framework_metrics_reader,
      select_dimensions=["CPU", "GPU", "I/O"], # optional
      select_events=["total"],                 # optional
      plot_height=450
  )
  ```

# Pandas データ解析ツールを使用してプロファイリングデータにアクセスする
<a name="debugger-access-data-profiling-pandas-frame"></a>

次の `PandasFrame` クラスは、収集されたプロファイリングデータを Pandas データフレームに変換するツールを提供します。

```
from smdebug.profiler.analysis.utils.profiler_data_to_pandas import PandasFrame
```

`PandasFrame` クラスは `tj` オブジェクトの S3 バケット出力パスを受け取り、そのメソッド `get_all_system_metrics()` `get_all_framework_metrics()` は、システムメトリクスとフレームワークメトリクスを Pandas データ形式で返します。

```
pf = PandasFrame(tj.profiler_s3_output_path)
system_metrics_df = pf.get_all_system_metrics()
framework_metrics_df = pf.get_all_framework_metrics(
    selected_framework_metrics=[
        'Step:ModeKeys.TRAIN', 
        'Step:ModeKeys.GLOBAL'
    ]
)
```

# Python プロファイリング統計データにアクセスする
<a name="debugger-access-data-python-profiling"></a>

Python プロファイリングは、トレーニングスクリプトおよび SageMaker AI 深層学習フレームワークに含まれる Python 関数と演算子に関連するフレームワークメトリクスを提供します。

<a name="debugger-access-data-python-profiling-modes"></a>**Python プロファイリングのトレーニングモードとフェーズ**

トレーニング中に特定の間隔をプロファイリングして、これらの間隔ごとに統計を分割するために、デバッガーにはモードとフェーズを設定するツールが用意されています。

トレーニングモードには、次の `PythonProfileModes` クラスを使用します。

```
from smdebug.profiler.python_profile_utils import PythonProfileModes
```

このクラスでは、次のオプションを使用できます。
+ `PythonProfileModes.TRAIN` - トレーニングフェーズでターゲットステップをプロファイリングする場合に使用します。このモードオプションは TensorFlow にのみ使用できます。
+ `PythonProfileModes.EVAL` - 評価フェーズでターゲットステップをプロファイリングする場合に使用します。このモードオプションは TensorFlow にのみ使用できます。
+ `PythonProfileModes.PREDICT` - 予測フェーズでターゲットステップをプロファイリングする場合に使用します。このモードオプションは TensorFlow にのみ使用できます。
+ `PythonProfileModes.GLOBAL` - 前の 3 つのフェーズを含むグローバルフェーズでターゲットステップをプロファイリングする場合に使用します。このモードオプションは PyTorch にのみ使用できます。
+ `PythonProfileModes.PRE_STEP_ZERO` - 最初のエポックの最初のトレーニングステップを開始する前に、初期化段階でターゲットステップをプロファイリングする場合に使用します。このフェーズには、最初のジョブ送信、EC2 インスタンスへのトレーニングスクリプトのアップロード、EC2 インスタンスの準備、入力データのダウンロードが含まれます。このモードオプションは、TensorFlow と PyTorch の両方に使用できます。
+ `PythonProfileModes.POST_HOOK_CLOSE` - トレーニングジョブが完了し、デバッガーフックが閉じられた後に、最終段階でターゲットステップをプロファイリングする場合に使用します。このフェーズには、トレーニングジョブがファイナライズし完了するまでのプロファイリングデータが含まれます。このモードオプションは、TensorFlow と PyTorch の両方に使用できます。

<a name="debugger-access-data-python-profiling-phases"></a>トレーニングトレーニングには、次の `StepPhase` クラスを使用します。

```
from smdebug.profiler.analysis.utils.python_profile_analysis_utils import StepPhase
```

このクラスでは、次のオプションを使用できます。
+ `StepPhase.START` - 初期化フェーズの開始点を指定するために使用します。
+ `StepPhase.STEP_START` - トレーニングフェーズの開始ステップを指定するために使用します。
+ `StepPhase.FORWARD_PASS_END` - フォワードパスが終了するステップを指定するために使用します。このオプションは PyTorch にのみ使用できます。
+ `StepPhase.STEP_END` - トレーニングフェーズの終了ステップを指定するために使用します。このオプションは TensorFlow にのみ使用できます。
+ `StepPhase.END` - ファイナライズ (ポストフッククローズ) フェーズの終了点を指定するために使用します。コールバックフックが閉じられていない場合、ファイナライズフェーズのプロファイリングは行われません。

**Python プロファイリング分析ツール**

デバッガーは、次の 2 つのプロファイリングツールで Python プロファイリングをサポートしています。
+ cProfile - 標準の Python プロファイラー。cProfile は、プロファイリングが有効な場合に、呼び出されたすべての関数について、CPU 時間に関するフレームワークメトリクスを収集します。
+ Pyinstrument - これは、ミリ秒ごとにプロファイリングイベントをサンプリングするオーバーヘッドの少ない Python プロファイラーです。

Python プロファイリングオプションと収集される内容の詳細については、「[デフォルトのシステムモニタリングとさまざまなプロファイリングオプションでカスタマイズしたフレームワークプロファイリング](debugger-configure-framework-profiling-options.md)」を参照してください。

Python プロファイリングデータを取得して分析するために、`PythonProfileAnalysis`、`cProfileAnalysis`、`PyinstrumentAnalysis` クラスの次のメソッドが用意されています。各関数は、デフォルトの S3 URI から最新のデータをロードします。

```
from smdebug.profiler.analysis.python_profile_analysis import PythonProfileAnalysis, cProfileAnalysis, PyinstrumentAnalysis
```

分析のために Python プロファイリングオブジェクトを設定するには、次のサンプルコードに示すように、cProfileAnalysis クラスまたは PyInstrumentAnalysis クラスを使用します。これは `cProfileAnalysis` オブジェクトを設定する方法を示しています。`PyinstrumentAnalysis` を使用する場合は、クラス名を置き換えてください。

```
python_analysis = cProfileAnalysis(
    local_profile_dir=tf_python_stats_dir, 
    s3_path=tj.profiler_s3_output_path
)
```

`cProfileAnalysis` と `PyinstrumentAnalysis` クラスでは、Python プロファイリング統計データを取得するために、次のメソッドを使用できます。
+ `python_analysis.fetch_python_profile_stats_by_time(start_time_since_epoch_in_secs, end_time_since_epoch_in_secs)` - 開始時刻と終了時刻を受け取り、開始時刻または終了時刻が所定の間隔と重なるステップ統計の関数統計を返します。
+ `python_analysis.fetch_python_profile_stats_by_step(start_step, end_step, mode, start_phase, end_phase)` - 開始ステップと終了ステップを受け取り、そのプロファイルされた `step` が `start_step <= step < end_step` を満たすすべてのステップ統計の関数統計を返します。
  + `start_step` および `end_step` (str) - Python プロファイリング統計データを取得するための開始ステップと終了ステップを指定します。
  + `mode` (str) - `PythonProfileModes` 列挙子クラスを使ってトレーニングジョブのモードを指定します。デフォルトは `PythonProfileModes.TRAIN` です。使用可能なオプションについては、「[Python プロファイリングのトレーニングモードとフェーズ](#debugger-access-data-python-profiling-modes)」セクションを参照してください。
  + `start_phase` (str) - `StepPhase` 列挙子クラスを使ってターゲットステップの開始フェーズを指定します。このパラメータを使うと、トレーニングの異なるフェーズ間のプロファイリングが可能になります。デフォルトは `StepPhase.STEP_START` です。使用可能なオプションについては、「[Python プロファイリングのトレーニングモードとフェーズ](#debugger-access-data-python-profiling-phases)」セクションを参照してください。
  + `end_phase` (str) - `StepPhase` 列挙子クラスを使ってターゲットステップの終了フェーズを指定します。このパラメータは、トレーニングの終了フェーズを設定します。使用可能なオプションは、`start_phase` パラメータの場合と同じです。デフォルトは `StepPhase.STEP_END` です。使用可能なオプションについては、「[Python プロファイリングのトレーニングモードとフェーズ](#debugger-access-data-python-profiling-phases)」セクションを参照してください。
+ `python_analysis.fetch_profile_stats_between_modes(start_mode, end_mode)` - 開始モードと終了モードの間の Python プロファイリングから統計を取得します。
+ `python_analysis.fetch_pre_step_zero_profile_stats()` - Python プロファイリングからステップ 0 までの統計を取得します。
+ `python_analysis.fetch_post_hook_close_profile_stats()` - フックが閉じた後に、Python プロファイリングから統計を取得します。
+ `python_analysis.list_profile_stats()` - Python プロファイリング統計の DataFrame を返します。各行には、プロファイリングの各インスタンスのメタデータと、対応する統計ファイル (ステップごとに 1 つ) が格納されています。
+ `python_analysis.list_available_node_ids()` - Python プロファイリング統計に使用可能なノード ID のリストを返します。

`cProfileAnalysis` クラス固有のメソッド:
+  `fetch_profile_stats_by_training_phase()` - 開始モードと終了モードのすべての組み合わせについて、Python プロファイリング統計を取得して集約します。例えば、詳細なプロファイリングが有効になっている間にトレーニングと検証フェーズを実行すると、その組み合わせは `(PRE_STEP_ZERO, TRAIN)`、`(TRAIN, TRAIN)`、`(TRAIN, EVAL)`、`(EVAL, EVAL)`、`(EVAL, POST_HOOK_CLOSE)` になります。これらの組み合わせに含まれるすべての統計ファイルが集約されます。
+  `fetch_profile_stats_by_job_phase()` - Python プロファイリング統計をジョブフェーズごとに取得して集約します。ジョブフェーズとは、`initialization` (ステップ 0 までのプロファイリング)、`training_loop` (トレーニングと検証)、`finalization` (フックを閉じた後のプロファイリング) です。

# 複数のプロファイルトレースファイルのタイムラインをマージする
<a name="debugger-merge-timeline"></a>

SMDebug クライアントライブラリは、デバッガーによって収集されたシステムメトリクス、フレームワークメトリクス、Python プロファイリングデータのタイムラインをマージするためのプロファイリング分析および視覚化のツールを提供します。

**ヒント**  
先に進む前に、このページの例全体で活用する TrainingJob オブジェクトを設定する必要があります。TrainingJob オブジェクトの設定の詳細については、「[プロファイルデータにアクセスする](debugger-analyze-data-profiling.md)」を参照してください。

`MergedTimeline` クラスは、さまざまなプロファイリング情報を 1 つのタイムラインに統合して関連付けるためのツールを提供します。デバッガーがトレーニングジョブのさまざまなフェーズからプロファイリングデータと注釈をキャプチャした後、トレースイベントの JSON ファイルがデフォルトの `tracefolder` ディレクトリに保存されます。
+ Python レイヤーの注釈の場合、トレースファイルは `*pythontimeline.json` に保存されます。
+ TensorFlow C\$1\$1 レイヤーの注釈の場合、トレースファイルは `*model_timeline.json` に保存されます。
+ TensorFlow プロファイラーは、イベントを `*trace.json.gz` ファイルに保存します。

**ヒント**  
すべての JSON トレースファイルを一覧表示する場合は、次の AWS CLI コマンドを使用します。  

```
! aws s3 ls {tj.profiler_s3_output_path} --recursive | grep '\.json$'
```

次のアニメーションスクリーンショットに示すように、さまざまなプロファイリングソースからキャプチャされたトレースイベントを 1 つのプロットに配置して整列することで、トレーニングジョブのさまざまなフェーズで発生するイベント全体の概要が得られます。

![\[マージされたタイムラインの例\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/debugger/debugger-merged-timeline.gif)


**ヒント**  
トレースアプリケーションでマージされたタイムラインをキーボードを使って操作するには、`W` キーでズームイン、`A` キーで左シフト、`S` キーでズームアウト、`D` キーで右にシフトします。

複数のイベントトレース JSON ファイルは、次の `MergedTimeline` API オペレーションと、`smdebug.profiler.analysis.utils.merge_timelines` モジュールのクラスメソッドを使って、1 つのトレースイベント JSON ファイルにマージできます。

```
from smdebug.profiler.analysis.utils.merge_timelines import MergedTimeline

combined_timeline = MergedTimeline(path, file_suffix_filter, output_directory)
combined_timeline.merge_timeline(start, end, unit)
```

`MergedTimeline` API オペレーションは、次のパラメータを渡します。
+ `path` (str) - システムおよびフレームワークのプロファイリングトレースファイルを含むルートフォルダ (`/profiler-output`) を指定します。SageMaker AI 推定器クラスメソッドまたは TrainingJob オブジェクトを使って、`profiler-output` を見つけることができます。例えば、`estimator.latest_job_profiler_artifacts_path()`、`tj.profiler_s3_output_path` です。
+ `file_suffix_filter` (list) - タイムラインをマージするファイルサフィックスフィルターのリストを指定します。使用可能なサフィックスフィルターは、`["model_timeline.json", "pythontimeline.json", "trace.json.gz"].` です。このパラメータを手動で指定しない場合、デフォルトですべてのトレースファイルがマージされます。
+ `output_directory` (str) - マージされたタイムライン JSON ファイルを保存するパスを指定します。デフォルトは、`path` パラメータに対して指定されたディレクトリです。

`merge_timeline()` クラスメソッドは、マージプロセスを実行するために次のパラメータを渡します。
+ `start` (int) - タイムラインのマージの開始時刻 (マイクロ秒単位および Unix 時間形式) または開始ステップを指定します。
+ `end` (int) - タイムラインのマージの終了時刻 (マイクロ秒単位および Unix 時間形式) または終了ステップを指定します。
+ `unit` (str) - `"time"` と `"step"` のどちらかを選択します。デフォルトは `"time"` です。

次のサンプルコードを使って、`merge_timeline()` メソッドを実行し、マージされた JSON ファイルをダウンロードします。
+ タイムラインを `"time"` 単位オプションでマージします。次のサンプルコードでは、Unix の開始時刻 (絶対ゼロ Unix 時間) と現在の Unix 時間の間で利用可能なすべてのトレースファイルをマージします。これは、トレーニング期間全体のタイムラインをマージできることを意味します。

  ```
  import time
  from smdebug.profiler.analysis.utils.merge_timelines import MergedTimeline
  from smdebug.profiler.profiler_constants import CONVERT_TO_MICROSECS
  
  combined_timeline = MergedTimeline(tj.profiler_s3_output_path, output_directory="./")
  combined_timeline.merge_timeline(0, int(time.time() * CONVERT_TO_MICROSECS))
  ```
+ タイムラインを `"step"` 単位オプションでマージします。次のサンプルコードでは、ステップ 3 とステップ 9 の間の使用可能なすべてのタイムラインをマージします。

  ```
  from smdebug.profiler.analysis.utils.merge_timelines import MergedTimeline
  
  combined_timeline = MergedTimeline(tj.profiler_s3_output_path, output_directory="./")
  combined_timeline.merge_timeline(3, 9, unit="step")
  ```

Chrome ブラウザの `chrome://tracing` で Chrome トレースアプリケーションを開き、JSON ファイルを開きます。出力を調べて、マージされたタイムラインをプロットできます。

# データローダーをプロファイリングする
<a name="debugger-data-loading-time"></a>

PyTorch では、`SingleProcessingDataLoaderIter` や `MultiProcessingDataLoaderIter` などのデータローダーのイテレーターは、データセット全体ですべての反復の開始時に開始されます。初期化フェーズ中、PyTorch は設定されたワーカー数に応じてワーカープロセスをオンにし、データと `pin_memory` スレッドを取得するためのデータキューを確立します。

PyTorch データローダープロファイリング分析ツールを使うには、次の `PT_dataloader_analysis` クラスをインポートします。

```
from smdebug.profiler.analysis.utils.pytorch_dataloader_analysis import PT_dataloader_analysis
```

「[Pandas データ解析ツールを使用してプロファイリングデータにアクセスする](debugger-access-data-profiling-pandas-frame.md)」セクションの Pandas フレームデータオブジェクトとして取得したプロファイリングデータを渡します。

```
pt_analysis = PT_dataloader_analysis(pf)
```

`pt_analysis` オブジェクトには、次の関数を使用できます。

SMDebug `S3SystemMetricsReader` クラスは、`s3_trial_path` パラメータに指定された S3 バケットからシステムメトリクスを読み取ります。
+ `pt_analysis.analyze_dataloaderIter_initialization()`

  分析は、これらの初期化の期間の中央値と最大値を出力します。外れ値がある場合 (つまり、期間が 2 \$1 中央値より大きい場合)、関数はこれらの期間の開始時刻と終了時刻を出力します。これらを使って、それらの時間間隔の間のシステムメトリクスを検査できます。

  次のリストは、このクラスメソッドからどのような分析が得られるかを示しています。
  + 初期化されたデータローダーイテレーターのタイプ。
  + イテレーターあたりのワーカー数。
  + イテレーターが pin\$1memory 有りで初期化されたか、無しで初期化されたかの検査。
  + トレーニング中にイテレーターが初期化された回数。
+ `pt_analysis.analyze_dataloaderWorkers()`

  次のリストは、このクラスメソッドからどのような分析が得られるかを示しています。
  + トレーニング全体でスピンオフされたワーカープロセスの数。
  + ワーカープロセスの期間の中央値と最大値。
  + 外れ値であるワーカープロセスの開始時刻と終了時刻。
+ `pt_analysis.analyze_dataloader_getnext()`

  次のリストは、このクラスメソッドからどのような分析が得られるかを示しています。
  + トレーニング中に実行された GetNext 呼び出しの数。
  + GetNext 呼び出しの期間の中央値と最大値 (マイクロ秒)。
  + 外れ値である GetNext 呼び出しの期間の開始時刻、終了時刻、期間、ワーカー ID。
+ `pt_analysis.analyze_batchtime(start_timestamp, end_timestamp, select_events=[".*"], select_dimensions=[".*"])`

  デバッガーは、すべての GetNext 呼び出しの開始時刻と終了時刻を収集します。トレーニングスクリプトが費やした時間を 1 つのバッチのデータで確認できます。指定した時間枠内で、トレーニングに直接貢献していない呼び出しを特定できます。これらの呼び出しは、精度の計算、デバッグやログ目的の損失の追加、デバッグ情報の出力などのオペレーションによるものである可能性があります。このようなオペレーションは、コンピューティング集約型であったり、時間がかかったりすることがあります。Python プロファイラー、システムメトリクス、フレームワークメトリクスを関連付けることで、このようなオペレーションを特定できます。

  次のリストは、このクラスメソッドからどのような分析が得られるかを示しています。
  + 各データバッチに費やされた時間 `BatchTime_in_seconds` を、現在の GetNext 呼び出しと後続の GetNext 呼び出しの開始時刻の差を求めることでプロファイリングします。
  + `BatchTime_in_seconds` の外れ値と、その外れ値の開始時刻と終了時刻を見つけます。
  + それらの `BatchTime_in_seconds` タイムスタンプ間のシステムおよびフレームワークのメトリクスを取得します。これにより、どこに時間が費やされたかがわかります。
+ `pt_analysis.plot_the_window()`

  開始タイムスタンプと終了タイムスタンプの間のタイムライングラフをプロットします。