SageMaker Profiler UI で視覚化されたプロファイル出力データを調べる - Amazon SageMaker

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

SageMaker Profiler UI で視覚化されたプロファイル出力データを調べる

このセクションでは、 SageMaker Profiler UI を順を追って説明し、Profiler UI を使用してインサイトを得る方法のヒントを提供します。

プロファイルのロード

SageMaker Profiler UI を開くと、プロファイルのロードページが開きます。[ダッシュボード][タイムライン] をロードして生成するには、以下の手順を実行します。

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

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

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

ヒント

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

Profiler UI の Load SageMaker profile ページのスクリーンショット

ダッシュボード

トレーニングジョブのロードと選択が完了すると、UI はデフォルトで以下のパネルを含む [ダッシュボード] ページを開きます。

  • GPU アクティブ時間 – この円グラフは、GPUアクティブ時間とGPUアイドル時間の割合を示しています。トレーニングジョブ全体で、 GPUsがアイドル状態よりもアクティブかどうかを確認できます。GPU アクティブ時間は、使用率が 0% を超えるプロファイルデータポイントに基づいていますが、GPUアイドル時間は使用率が 0% のプロファイルデータポイントです。

  • GPU 時間の経過に伴う使用率 – このタイムライングラフは、ノードあたりの時間の経過に伴う平均GPU使用率を示し、すべてのノードを 1 つのグラフに集約します。特定の時間間隔で、 に不均衡なワークロード、使用率不足の問題、ボトルネック、またはアイドル状態の問題GPUsがあるかどうかを確認できます。個々のGPUレベルおよび関連するカーネル実行の使用率を追跡するには、 を使用しますタイムラインインターフェイス。GPU アクティビティコレクションは、トレーニングスクリプトSMProf.start_profiling()にプロファイラースターター関数を追加した場所から開始し、 で停止することに注意してくださいSMProf.stop_profiling()

  • CPU アクティブ時間 – この円グラフは、CPUアクティブ時間とCPUアイドル時間の割合を示しています。トレーニングジョブ全体で、 CPUsがアイドル状態よりもアクティブかどうかを確認できます。CPU アクティブ時間は、使用率が 0% を超えるプロファイル化されたデータポイントに基づいていますが、CPUアイドル時間は使用率が 0% のプロファイル化されたデータポイントです。

  • CPU 時間の経過に伴う使用率 – このタイムライングラフは、ノードあたりの時間の経過に伴う平均CPU使用率を示し、すべてのノードを 1 つのグラフに集約します。特定の時間間隔で CPUs がボトルネックになっているか、十分に活用されていないかを確認できます。個々の使用率とカーネル実行CPUsに合わせて のGPU使用率を追跡するには、 を使用しますタイムラインインターフェイス。使用率メトリクスはジョブの初期化から開始することに注意してください。

  • すべてのGPUカーネルが費やした時間 – この円グラフは、トレーニングジョブ全体で操作されたすべてのGPUカーネルを示しています。デフォルトでは、上位 15 GPU 個のカーネルが個々のセクターとして表示され、他のすべてのカーネルは 1 つのセクターに表示されます。セクターにカーソルを合わせると、詳細情報が表示されます。値は、運用されたGPUカーネルの合計時間を秒単位で示し、パーセンテージはプロファイルの全時間に基づいています。

  • 上位 15 個のGPUカーネルが費やした時間 — この円グラフには、トレーニングジョブ全体で操作されたすべてのGPUカーネルが表示されます。上位 15 GPU 個のカーネルを個々のセクターとして表示します。セクターにカーソルを合わせると、詳細情報が表示されます。値は、運用されたGPUカーネルの合計時間を秒単位で示し、パーセンテージはプロファイルの全時間に基づいています。

  • すべてのGPUカーネルの起動数 – この円グラフは、トレーニングジョブ全体で起動されたすべてのGPUカーネルのカウント数を示しています。これは、上位 15 GPU 個のカーネルを個々のセクターとして示し、1 つのセクターの他のすべてのカーネルを示します。セクターにカーソルを合わせると、詳細情報が表示されます。値は起動したGPUカーネルの合計数を示し、パーセンテージはすべてのカーネルの全数に基づいています。

  • 上位 15 個のGPUカーネルの起動数 – この円グラフは、トレーニングジョブ全体で起動されたすべてのカーネルの数を示しています。 GPU上位 15 GPU 個のカーネルを示します。セクターにカーソルを合わせると、詳細情報が表示されます。値は起動したGPUカーネルの合計数を示し、パーセンテージはすべてのカーネルの全数に基づいています。

  • ステップ時間の分布 – このヒストグラムは、 でのステップ期間の分布を示していますGPUs。このプロットは、トレーニングスクリプトにステップアノテーターを追加した後にのみ生成されます。

  • カーネル精度分布 – この円グラフは、FP32、、FP16、 INT32などのさまざまなデータ型でカーネルの実行に費やされた時間の割合を示していますINT8。

  • GPU アクティビティ分散 – この円グラフは、カーネルの実行、メモリ (memcpy および memset)、同期 () などのGPUアクティビティに費やされた時間の割合を示していますsync

  • GPU メモリオペレーションの分散 – この円グラフは、GPUメモリオペレーションに費やされた時間の割合を示しています。これにより memcopy アクティビティが視覚化され、トレーニングジョブが特定のメモリオペレーションに過剰な時間を費やしているかどうかを特定するのに役立ちます。

  • 新しいヒストグラムの作成ステップ 1: SageMaker Profiler Python モジュールを使用してトレーニングスクリプトを適応させる の実行中に手動で注釈を付けたカスタムメトリクスの新しい図を作成します。新しいヒストグラムにカスタム注釈を追加する場合は、トレーニングスクリプトに追加した注釈の名前を選択または入力します。例えば、ステップ 1 のデモトレーニングスクリプトでは、stepForwardBackwardOptimizeLoss がカスタム注釈です。新しいヒストグラムを作成する際、これらの注釈名はメトリクス選択用のドロップダウンメニューに表示されます。Backward を選択すると、UI はプロファイリングされた時間を通してバックワードパスに費やされた時間のヒストグラムを [ダッシュボード] に追加します。このタイプのヒストグラムは、異常に長い時間がかかり、ボトルネックの問題を引き起こしている外れ値があるかどうかを確認するのに役立ちます。

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

SageMaker Profiler UI の Dashboard ページのスクリーンショット

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

SageMaker Profiler UI の Dashboard ページのスクリーンショット

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

SageMaker Profiler UI の Dashboard ページのスクリーンショット

タイムラインインターフェイス

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

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

ヒント

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

タイムライントラックはツリー構造になっており、ホストレベルからデバイスレベルまでの情報を提供します。例えば、各Nインスタンスに 8 つの GPUsでインスタンスを実行する場合、各インスタンスのタイムライン構造は次のようになります。

  • algo-inode – これは、プロビジョニングされたインスタンスにジョブを割り当てる SageMaker タグです。桁 inode はランダムに割り当てられます。例えば、4 つのインスタンスを使用する場合、このセクションは algo-1 から algo-4 に拡張されます。

    • CPU – このセクションでは、平均CPU使用率とパフォーマンスカウンターを確認できます。

    • GPUs – このセクションでは、平均GPU使用率、個々のGPU使用率、カーネルを確認できます。

      • SUM 使用率 – インスタンスあたりの平均GPU使用率。

      • HOST-0 PID-123 – 各プロセストラックに割り当てられた一意の名前。頭字語PIDはプロセス ID で、それに付加される番号はプロセスからのデータキャプチャ中に記録されるプロセス ID 番号です。このセクションには、プロセスの以下の情報が表示されます。

        • GPU-inum_gpu 使用率 num_gpu- i 番目の使用率GPU。

        • GPU-inum_gpu デバイス – カーネルは i num_gpu番目のGPUデバイスで実行されます。

          • ストリーム icuda_stream – CUDA GPUデバイスでのカーネル実行を示すストリーム。CUDA ストリームの詳細については、PDF「」のCUDA「C/C++ Streams and Concurrency」を参照してくださいNVIDIA。

        • GPU-inum_gpu host – カーネルは i num_gpu番目のGPUホストで起動します。

次のいくつかのスクリーンショットは、GPUsそれぞれに 8 NVIDIA A100 Tensor Core を備えたml.p4d.24xlargeインスタンスで実行されるトレーニングジョブのプロファイルのタイムラインを示しています。

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

プロ SageMaker ファイラ UI のタイムラインページ。サンプルトレーニングジョブのプロファイルを視覚化します。

各 についてCPU、 "clk_unhalted_ref.tsc" や などのCPU使用率とパフォーマンスカウンターを追跡できます。これは"itlb_misses.miss_causes_a_walk"、 で実行される手順を示していますCPU。

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

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

ヒント

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

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

SageMaker Profiler UI のタイムラインページのスクリーンショット

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

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

SageMaker Profiler UI のタイムラインページのスクリーンショット

情報

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

設定

SageMaker Profiler UI アプリケーションインスタンスは、デフォルトで 2 時間のアイドル時間後にシャットダウンするように設定されています。[設定] で、次の設定を使用して自動シャットダウンタイマーを調整します。

  • アプリの自動シャットダウンを有効にする — 指定したアイドル時間の経過後にアプリケーションを自動的にシャットダウンさせる場合は、有効を選択して設定します。自動シャットダウン機能をオフにするには、[無効] を選択します。

  • 自動シャットダウンのしきい値 (時間単位)[アプリの自動シャットダウンを有効にする][有効] を選択すると、アプリケーションが自動的にシャットダウンするまでのしきい値を時間単位で設定できます。デフォルトでは、2 に設定されています。