

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

# 複数のプロファイルトレースファイルのタイムラインをマージする
<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 ファイルを開きます。出力を調べて、マージされたタイムラインをプロットできます。