

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

# SageMaker Profiler UI で視覚化されたプロファイル出力データの調査
<a name="profiler-explore-viz"></a>

このセクションでは、SageMaker Profiler UI について説明し、使用方法やインサイトを得るためのヒントを紹介します。

## プロファイルのロード
<a name="profiler-explore-viz-load"></a>

SageMaker Profiler UI を開くと、**[プロファイルのロード]** ページが開きます。**[ダッシュボード]** と **[タイムライン]** をロードして生成するには、以下の手順を実行します。<a name="profiler-explore-viz-load-procedure"></a>

**トレーニングジョブのプロファイルをロードするには**

1. **[トレーニングジョブのリスト]** セクションで、チェックボックスを使用してプロファイルをロードするトレーニングジョブを選択します。

1. **[ロード]** を選択します。ジョブ名は上部の **[ロードされたプロファイル]** セクションに表示されるはずです。

1. **[ジョブ名]** の左側にあるラジオボタンを選択して、**[ダッシュボード]** と **[タイムライン]** を生成します。ラジオボタンを選択すると、UI が自動的に **[ダッシュボード]** を開くことに注意してください。ジョブステータスとロードステータスがまだ進行中の状態で可視化を生成すると、SageMaker Profiler UI は、進行中のトレーニングジョブまたは部分的にロードされたプロファイルデータから収集された最新のプロファイルデータまでの **[ダッシュボード]** プロットと **[タイムライン]** を生成することにも注意してください。

**ヒント**  
一度にロードして視覚化できるプロファイルは 1 つです。別のプロファイルをロードするには、先にロードしたプロファイルをアンロードする必要があります。プロファイルをアンロードするには、**ロードされたプロファイル**セクションのプロファイルの右端にあるゴミ箱アイコンを使用します。

![\[\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/profiler/sagemaker-profiler-ui-load-data.png)


## ダッシュボード
<a name="profiler-explore-viz-overview"></a>

トレーニングジョブのロードと選択が完了すると、UI はデフォルトで以下のパネルを含む **[ダッシュボード]** ページを開きます。
+ **GPU アクティブ時間** — この円グラフは GPU のアクティブ時間と GPU のアイドル時間の割合を示しています。トレーニングジョブ全体を通して GPU がアイドルよりもアクティブであるかどうかを確認できます。GPU のアクティブ時間は使用率が 0% より大きいプロファイルデータポイントに基づくのに対し、GPU アイドル時間は使用率が 0% のプロファイルデータポイントです。
+ **経時的な GPU 使用率** — このタイムライングラフは、すべてのノードを 1 つのグラフに集約し、ノードごとの経時的な平均 GPU 使用率を示しています。特定の時間間隔で、GPU に不均衡なワークロード、使用率低下の問題、ボトルネック、アイドルの問題があるかどうかを確認できます。個々の GPU レベルおよび関連するカーネル実行における使用率を追跡するには、[タイムラインインターフェイス](#profiler-explore-viz-timeline) を使用してください。GPU アクティビティの収集は、トレーニングスクリプトにプロファイラースターター関数 `SMProf.start_profiling()` を追加したところから開始し、`SMProf.stop_profiling()` で停止することに注意してください。
+ **CPU アクティブ時間** — この円グラフは、CPU アクティブ時間と CPU アイドル時間の割合を示しています。トレーニングジョブ全体を通して、CPU がアイドルよりもアクティブであるかどうかを確認できます。CPU アクティブ時間は、使用率が 0% より大きいプロファイリングされたデータポイントに基づくのに対し、CPU アイドル時間は 0% の使用率でプロファイリングされたデータポイントです。
+ **経時的な CPU 使用率** — このタイムライングラフは、すべてのノードを 1 つのグラフに集約し、ノードごとの平均 CPU 使用率を経時的に示しています。特定の時間間隔で CPU がボトルネックになったり、使用率が低くなったりしていないかどうかを確認できます。個々の GPU 使用率とカーネル実行に合わせた CPU の使用率を追跡するには、[タイムラインインターフェイス](#profiler-explore-viz-timeline) を使用します。使用率メトリクスはジョブの初期化から開始することに注意してください。
+ **すべての GPU カーネルが費やした時間** — この円グラフには、トレーニングジョブ全体で操作されたすべての GPU カーネルが表示されます。デフォルトで、上位 15 の GPU カーネルが個別のセクターとして表示され、その他すべてのカーネルが 1 つのセクターとして表示されます。セクターにカーソルを合わせると、詳細情報が表示されます。値は GPU カーネルが動作した合計時間を秒単位で示し、割合はプロファイルの全時間に基づいています。
+ **上位 15 の GPU カーネルが費やした時間** — この円グラフには、トレーニングジョブ全体で操作されたすべての GPU カーネルが表示されます。上位 15 の GPU カーネルは個々のセクターとして表示されます。セクターにカーソルを合わせると、詳細情報が表示されます。値は GPU カーネルが動作した合計時間を秒単位で示し、割合はプロファイルの全時間に基づいています。
+ **すべての GPU カーネルの起動数** — この円グラフには、トレーニングジョブ全体で起動された各 GPU カーネルの起動数が表示されます。上位 15 の GPU カーネルを個別のセクターとして表示し、その他すべてのカーネルを 1 つのセクターとして表示します。セクターにカーソルを合わせると、詳細情報が表示されます。値は起動した GPU カーネルの総数を示し、割合はすべてのカーネルの総数に基づいています。
+ **上位 15 の GPU カーネルの起動回数** — この円グラフには、トレーニングジョブ全体で起動された各 GPU カーネルの数が表示されます。上位 15 の GPU カーネルが表示されます。セクターにカーソルを合わせると、詳細情報が表示されます。値は起動した GPU カーネルの総数を示し、割合はすべてのカーネルの総数に基づいています。
+ **ステップ時間分布** — このヒストグラムは GPU のステップ期間の分布を示しています。このプロットは、トレーニングスクリプトにステップアノテーターを追加した後にのみ生成されます。
+ **カーネル精度分布** — この円グラフは、FP32、FP16、INT32、INT8 などのさまざまなデータ型のカーネル実行に費やされた時間の割合を示しています。
+ **GPU アクティビティ分布** — この円グラフは、カーネルの実行、メモリ (`memcpy` と `memset`)、同期 (`sync`) などの GPU アクティビティに費やされた時間の割合を示しています。
+ **GPU メモリオペレーション分布** — この円グラフは GPU メモリ操作に費やされた時間の割合を示しています。これにより `memcopy` アクティビティが視覚化され、トレーニングジョブが特定のメモリオペレーションに過剰な時間を費やしているかどうかを特定するのに役立ちます。
+ **新しいヒストグラムの作成** — [ステップ 1: SageMaker Profiler Python モジュールを使用したトレーニングスクリプトの調整](profiler-prepare.md#profiler-prepare-training-script) の実行中に手動で注釈を付けたカスタムメトリクスの新しい図を作成します。新しいヒストグラムにカスタム注釈を追加する場合は、トレーニングスクリプトに追加した注釈の名前を選択または入力します。例えば、ステップ 1 のデモトレーニングスクリプトでは、`step`、`Forward`、`Backward`、`Optimize`、`Loss` がカスタム注釈です。新しいヒストグラムを作成する際、これらの注釈名はメトリクス選択のドロップダウンメニューに表示されるはずです。`Backward` を選択すると、UI はプロファイリングされた時間を通してバックワードパスに費やされた時間のヒストグラムを **[ダッシュボード]** に追加します。このタイプのヒストグラムは、異常に長い時間がかかり、ボトルネックの問題を引き起こしている外れ値があるかどうかを確認するのに役立ちます。

以下のスクリーンショットは、GPU と CPU のアクティブ時間の比率と、コンピューティングノードあたりの時間に対する GPU と CPU の平均使用率を示しています。

![\[\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/profiler/sagemaker-profiler-ui-dashboard-1.png)


次のスクリーンショットは、GPU カーネルの起動回数を比較し、実行に費やされた時間を測定するための円グラフの例を示しています。**すべての GPU カーネルが費やした時間**パネルと**すべての GPU カーネルの起動回数**パネルでは、k の入力フィールドに整数を指定して、プロットに表示する凡例の数を調整することもできます。例えば、10 を指定すると、プロットには実行回数が最も多いカーネルと起動数の多いカーネルの上位 10 がそれぞれ表示されます。

![\[\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/profiler/sagemaker-profiler-ui-dashboard-2.png)


次のスクリーンショットは、ステップ期間ヒストグラムの例と、カーネル精度分布、GPU アクティビティ分布、および GPU メモリオペレーション分布の円グラフを示しています。

![\[\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/profiler/sagemaker-profiler-ui-dashboard-3.png)


## タイムラインインターフェイス
<a name="profiler-explore-viz-timeline"></a>

CPU 上でスケジュールされ、GPU 上で実行されるオペレーションとカーネルのレベルでコンピューティングリソースの詳細ビューを取得するには、**タイムライン**インターフェイスを使用します。

マウス、`[w, a, s, d]` キー、またはキーボードの 4 つの矢印キーを使用して、タイムラインインターフェイスでズームインやズームアウトしたり、左右にパンしたりできます。

**ヒント**  
**[タイムライン]** インターフェイスを操作するためのキーボードショートカットのヒントについて詳しくは、左のペインで **[キーボードショートカット]** を選択してください。

タイムライントラックはツリー構造になっており、ホストレベルからデバイスレベルまでの情報を提供します。例えば、それぞれ `N` のインスタンスをそれぞれ 8 の GPU で実行する場合、各インスタンスのタイムライン構造は次のようになります。
+ **algo-inode** — これは SageMaker AI がプロビジョニングされたインスタンスにジョブを割り当てるためにタグ付けするものです。桁 inode はランダムに割り当てられます。例えば、4 つのインスタンスを使用する場合、このセクションは **algo-1** から **algo-4** に拡張されます。
  + **CPU** — このセクションでは、CPU の平均使用率とパフォーマンスカウンターを確認できます。
  + **GPU** — このセクションでは、GPU の平均使用率、個々の GPU 使用率、カーネルを確認できます。
    + **SUM 使用率** — インスタンスごとの GPU の平均使用率。
    + **HOST-0 PID-123** — 各プロセストラックに割り当てられる一意の名前。頭字語 PID はプロセス ID で、それに追加された番号はプロセスからのデータキャプチャ中に記録されるプロセス ID 番号です。このセクションには、プロセスの以下の情報が表示されます。
      + **GPU-inum\$1gpu の使用率** — inum\$1gpu 番目の GPU の経時的な使用率。
      + **GPU-inum\$1gpu デバイス** — カーネルは inum\$1gpu 番目の GPU デバイス上で実行されます。
        + **ストリーム icuda\$1stream** — カーネルが GPU デバイス上で実行されていることを示す CUDA ストリーム。CUDA ストリームの詳細については、NVIDIA が提供する「[CUDA C/C\$1\$1 Streams and Concurrency](https://developer.download.nvidia.com/CUDA/training/StreamsAndConcurrencyWebinar.pdf)」の PDF 形式のスライドを参照してください。
      + **GPU-inum\$1gpu ホスト** — カーネルは inum\$1gpu 番目の GPU ホストで起動します。

以下のスクリーンショットは、それぞれ 8 つの NVIDIA A100 Tensor Core GPU を搭載した `ml.p4d.24xlarge` インスタンスで実行されるトレーニングジョブのプロファイルの **[タイムライン]** を示しています。

以下はプロファイルのズームアウトビューで、`step_232` と `step_233` の間に次のデータバッチをフェッチするための断続的なデータローダーを含む 12 のステップが印刷されています。

![\[\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/profiler/sagemaker-profiler-ui-timeline-1.png)


CPU ごとに CPU 使用率や、CPU で実行される手順を示すパフォーマンスカウンター (`"clk_unhalted_ref.tsc"` や `"itlb_misses.miss_causes_a_walk"` など) を追跡できます。

GPU ごとに、ホストタイムラインとデバイスタイムラインを表示できます。カーネルの起動はホストタイムラインに、カーネルの実行はデバイスタイムラインに表示されます。GPU ホストタイムラインにトレーニングスクリプトを追加した場合は、注釈 (前方、後方、最適化など) も表示されます。

タイムラインビューでは、カーネルの起動と実行のペアを追跡することもできます。これにより、ホスト (CPU) でスケジュールされたカーネル起動が、対応する GPU デバイスでどのように実行されているかを理解できます。

**ヒント**  
`f` キーを押すと、選択したカーネルにズームインします。

次のスクリーンショットは、前のスクリーンショットから `step_233` と `step_234` にズームインしたビューです。次のスクリーンショットで選択されているタイムライン間隔は、GPU-0 デバイスで実行される `AllReduce` オペレーションであり、分散トレーニングに不可欠な通信と同期のステップです。スクリーンショットでは、GPU-0 ホストでのカーネル起動が、青緑色の矢印で示されている GPU-0 デバイスストリーム 1 で実行されているカーネルに接続されていることに注意してください。

![\[\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/profiler/sagemaker-profiler-ui-timeline-2.png)


また、前のスクリーンショットに示されているように、タイムライン間隔を選択すると UI の下部のペインに 2 つの情報タブが表示されます。**[現在の選択]** タブには、選択したカーネルの詳細と、ホストからの接続されたカーネルの起動が表示されます。各 GPU カーネルは常に CPU から呼び出されるため、接続方向は常にホスト (CPU) からデバイス (GPU) になります。**[接続]** タブには、選択したカーネルの起動と実行のペアが表示されます。どちらかを選択すると、**[タイムライン]** ビューの中央に移動できます。

次のスクリーンショットは、`AllReduce` オペレーションの起動と実行のペアをさらにズームインしています。

![\[\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/profiler/sagemaker-profiler-ui-timeline-3.png)


## 情報
<a name="profiler-expore-viz-information"></a>

**[情報]** では、インスタンスタイプ、ジョブ用にプロビジョニングされたコンピューティングリソースの Amazon リソースネーム (ARN)、ノード名、ハイパーパラメータなど、ロードされたトレーニングジョブに関する情報にアクセスできます。

## 設定
<a name="profiler-expore-viz-settings"></a>

SageMaker AI Profiler UI アプリケーションインスタンスは、デフォルトでアイドル時間が 2 時間経過するとシャットダウンするように設定されています。**[設定]** で、次の設定を使用して自動シャットダウンタイマーを調整します。
+ **アプリの自動シャットダウンを有効にする** — 指定したアイドル時間の経過後にアプリケーションを自動的にシャットダウンさせる場合は、**有効**を選択して設定します。自動シャットダウン機能をオフにするには、**[無効]** を選択します。
+ **自動シャットダウンのしきい値 (時間単位)** — **[アプリの自動シャットダウンを有効にする]** で **[有効]** を選択すると、アプリケーションが自動的にシャットダウンするまでのしきい値を時間単位で設定できます。デフォルトでは、2 に設定されています。