

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

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

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