すべてのプロダクト
Search
ドキュメントセンター

Platform For AI:PerfTracker: オンラインパフォーマンス分析・診断ツール

最終更新日:Mar 01, 2026

PerfTracker は、大規模モデルトレーニングのパフォーマンス分析と診断を行うためのオンラインツールです。フルスタックのソフトウェアとハードウェアに対して高精度のオンラインモニタリングを実行します。ジョブでパフォーマンスの問題が発生した場合、PerfTracker は各ワーカーからすべての CUDA カーネル関数と Python 関数の実行レコードを、ハードウェアモニタリングのレコードとともに収集します。その後、分析レポートを生成し、パフォーマンス損失の原因を自動的に診断します。これには、低速ノードの特定、ボトルネック関数や実行時間が異常に長い関数の特定、ハング問題の検出などが含まれます。このトピックでは、PerfTracker の使用方法について説明します。

制限事項

現在、PerfTracker は PyTorch フレームワークジョブのみをサポートしています。

機能紹介

主な特徴

  • ジョブの実行レコードをオンラインで収集します。ジョブにパフォーマンスの問題がある場合、PerfTracker は各ワーカーのすべての関数の実行レコード (CUDA カーネル関数と Python 関数を含む) を収集します。また、GPU、NVLink、PCIe、DRAM などのハードウェアの高精度モニタリングデータを 100 マイクロ秒の粒度で収集します。

  • 関数レベルのパフォーマンス分析を実行します。PerfTracker は、高精度のハードウェアおよびソフトウェアのモニタリングデータを処理して、各関数のパフォーマンスレポートを生成します。低速ノードやボトルネック関数、実行時間が異常に長い関数など、パフォーマンス損失の原因を自動的に診断します。これにより、詳細な手動分析の基盤を提供し、パフォーマンスの最適化作業をガイドします。

ソリューション

  • オンライントレーニングジョブの詳細な関数実行レコードを収集します。このオンラインでの高粒度なデータ収集は、オフラインでの再現やプロファイリングと比較して、診断のリアルタイム性と精度を向上させます。

  • 複数ノードからの関数実行レコードに基づいた効率的なパフォーマンス分析アルゴリズムを使用します。PerfTracker は、通常は手動でのパフォーマンス分析の専門知識を必要とするタスクを自動化し、効率的なパフォーマンス分析と問題特定を可能にします。

仕組み

PerfTracker は、Collector と PerfDisplay で構成されます。Collector はユーザーのジョブコンテナー内で実行され、トレーニングジョブプロセスから独立しています。PerfDisplay は、ローカルマシンで開くことができる可視化ページを提供します。次の図は、PerfTracker のアーキテクチャを示しています。

image

  • PerfTracker Collector:フルスタック情報の高精度オンラインモニタリングを実行します。Torch profiler API と nsys を使用して、生のモニタリングデータを収集します。PerfTracker Collector は、次の種類のデータを収集できます。

    • ジョブ実行中のすべての関数の実行レコード。これには、計算カーネルや通信カーネルなどの CUDA カーネル関数、GPU にカーネルを起動する関数、GPU メモリ操作、Python 関数が含まれます。このデータは、コードレベルのパフォーマンス分析に使用され、プログラムの動作の完全なレコードを提供します。

    • GPU、NVLink、PCIe、DRAM などのさまざまなハードウェアメトリックのモニタリングデータを 100 マイクロ秒の精度で収集します。

    次の図は、収集されたデータの例を示しています。

    • CUDA カーネル関数と GPU メモリ操作

      image

    • Python 関数と GPU カーネル起動操作

      image

    • ハードウェアモニタリングデータ

      image

  • PerfDisplay: 収集されたデータを要約および分析して、パフォーマンス分析レポートと視覚的な出力を生成します。

使用方法

事前準備

  1. トレーニングコードを準備します。PerfTracker モジュールをインポートし、ステップをマークします。

    • トレーニングコードの先頭で PerfTracker モジュールをインポートします。以下はサンプルコードです。

      try:
          from c4d_perftracker_collector.PerfTracker import PerfTracker
          my_tracer = PerfTracker()
      except:
          my_tracer = None
    • トレーニングコードでステップをマークします。

      PerfTracker を使用するには、トレーニングコードでステップをマークする必要があります。tracer.step() が実行されるたびに、PerfTracker はそれを記録します。これにより、バックグラウンドプロセスがデータを収集する反復回数を制御できます。

      while iteration < args.train_iters:
      
          ...	# トレーニングコード
          if my_tracer is not None:
              my_tracer.step() # ステップをマーク

    以下は、インポートとステップのマーキングを含む簡単な training.py コードの例です。

    import torch
    import time
    import torch.distributed as dist
    import argparse
    try:
        from c4d_perftracker_collector.PerfTracker import PerfTracker
        my_tracer = PerfTracker()
    except:
        my_tracer = None
    
    dist.init_process_group("nccl")
    torch.cuda.set_device(dist.get_rank())
    # CUDA が利用可能か確認
    if torch.cuda.is_available():
        print("CUDA is available!")
        device = torch.device('cuda')  # デフォルトの CUDA デバイスを使用
    else:
        print("CUDA is not available.")
        device = torch.device('cpu')  # CUDA が利用できない場合は CPU を使用
    
    def matmul():
        matrix_a = torch.randn(1000, 1000)
        matrix_b = torch.randn(1000, 1000)
    
        # 行列を CUDA デバイスに移動
        matrix_a = matrix_a.to(device)
        matrix_b = matrix_b.to(device)
    
        # 行列の乗算を実行
        result = torch.matmul(matrix_a, matrix_b)
        result_cpu = result.to('cpu')
        print(result_cpu)
    
        del matrix_a, matrix_b, result
        torch.cuda.empty_cache()
    
    for i in range(1000):
        matmul()
        time.sleep(dist.get_rank())
        print("Epoch:", i)
        if my_tracer is not None:
            my_tracer.step()
        dist.barrier()
    
  2. 準備したトレーニングコードファイル (training.py) をストレージディレクトリにアップロードします。この例では、Object Storage Service (OSS) バケットを使用します。

トレーニングジョブの作成

  1. トレーニングジョブを作成する際に、PerfTracker をダウンロードしてインストールするための起動コマンドを追加します。その他の設定は通常のジョブと同じです。設定が完了したら、[OK] をクリックしてジョブを作成します。以下は一例です。

    パラメーター

    説明

    環境コンテキスト

    [イメージ設定]

    PyTorch 2.0 以降を選択します。この例では、easyanimate:1.1.5-pytorch2.2.0-gpu-py310-cu118-ubuntu22.04 を使用します。

    ストレージマウント

    [OSS] をクリックします。トレーニングコードファイルが保存されている OSS ディレクトリを選択します。[マウントパス]/mnt/data/ に設定します。

    起動コマンド

    # PerfTracker インストールパッケージをダウンロード
    wget -t 5 -w 2 -P /mnt/data https://network-research-lingjun-open-oss.oss-cn-hangzhou.aliyuncs.com/files/c4d_perftracker_collector-1.4.0-py3-none-any.whl
    # PerfTracker をインストール
    pip3 install /mnt/data/c4d_perftracker_collector-1.4.0-py3-none-any.whl
    # トレーニングコードを実行 (例: training.py)
    CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 torchrun --nproc_per_node=4 /mnt/data/training.py

    /mnt/data/ はデータセットのマウントパスです。ご利用のディレクトリに置き換えてください。

    説明

    大規模タスクの場合、高い同時実行性により起動時にインストールパッケージのダウンロードが遅くなることがあります。タスクを開始する前に、コマンドラインから PerfTracker インストールパッケージをストレージディレクトリにダウンロードしてください。

    リソース情報

    フレームワーク

    [pytorch] を選択します。

    ジョブ リソース

    リソース仕様を選択します。この例では ecs.gn6e-c12g1.12xlarge を使用します。

    截屏2025-12-11 10

  2. ジョブの実行中に、対象のジョブの名前をクリックします。[概要] タブの [インスタンス] セクションで、マスターインスタンスの [操作] 列にある [コンテナに入る] をクリックします。1764772196782-3b02a0dd-47c3-411e-a6fa-bc9fcdee0a17_copy

  3. 次のコマンドを実行して分析結果を保存します。これらの結果を使用して、パフォーマンス問題の原因を診断できます。

    • 方法 1:分析結果のみを保存し、生トレースは保存しません。

      c4d_perftracker --trigger-on --auto-analyze --output-dir /mnt/data/
    • 方法 2:CPFS や OSS など、十分なストレージ容量がある場合は、次のコマンドを使用できます。このコマンドは分析結果と生トレースの両方を保存するため、問題が診断された後に手動で確認できます。ワーカーのトレースファイルは通常数百メガバイトになることに注意してください。診断後に手動で削除できます。

      c4d_perftracker --trigger-on --auto-analyze --output-dir /mnt/data/ --save-raw-trace all

      /mnt/data/ パラメーターは、生トレースが保存されるディレクトリを指定します。これをデータセットのマウントディレクトリに設定できます。生トレースはデータセットに保存されます。

    分析結果が保存された後、PerfDisplay で分析レポートを表示できます。詳細については、次のセクションをご参照ください。PerfTracker は、パフォーマンス問題の根本原因を特定するのに役立つさまざまなパラメーターも提供しています。詳細については、付録をご参照ください。

分析結果の表示

  1. 分析モード のステップで説明されているように、分析結果を生成して保存します。コマンドが正常に実行されると、現在のディレクトリに <timestamp>/PerfDisplay フォルダが生成されます。1764772083905-4fc5f82f-02f3-4fd7-b445-9b2a8ab3c7fc

  2. PerfDisplay フォルダをデータソースのマウントディレクトリ /mnt/data にコピーします。次に、PerfDisplay ディレクトリをローカルマシンにダウンロードします。手順については、「ossutil コマンドラインインターフェイス 2.0」をご参照ください。ダウンロードする前にフォルダを圧縮できます。

    tar -cvf trace.tar PerfDisplay/
    mv trace.tar /mnt/data
  3. ローカルのターミナルで PerfDisplay フォルダに移動し、sudo python3 app.py コマンドを実行します (Linux では sudo コマンドは不要な場合があります)。次に、ブラウザで http://127.0.0.1:5000/ を開き、可視化ページでタスクのパフォーマンスレポートを表示します。

PerfTracker は、ジョブのパフォーマンスに影響を与えるすべての関数のパフォーマンスレポートを表示し、パフォーマンスに異常があるかどうかを示します。関数はカテゴリ別に表示されます。Web ページには、詳細なプロンプトと例を含む一連のオプションも用意されています。以下のセクションでは、レポートの内容について説明します。

GPU 計算関数

GPU Compute:
[2025-03-04 06:04:00,046 PerfTracker] (compute_functions.py 131) INFO: {
    "最小/中央値/最大 GPU 使用率 ([0,1] 内)": [
        0.27586059769318555,
        0.28605496203987174,
        0.2945494558115959
    ],
    "GPU 使用率が異常なワーカー": {},
    "主要なカーネル実行": {
        "void multi_tensor_apply_kernel<TensorListMetadata<4>, AdamFunctor<float, float, int>, float, float, float, float, float, float, adamMode_t, float>(long, int volatile*, TensorListMetadata<4>, AdamFunctor<float, float, int>, float, float, float, float, float, float, adamMode_t, float)320_1_1|512_1_1": {
            "実行ごとの中央コスト (ms)": 403.7,
            "ボトルネック比率 ([0,1] 内)": 0.01608086667957405
        },
        "sm80_xmma_gemm_f16f16_f16f32_f32_nn_n_tilesize160x128x32_stage4_warpsize2x2x1_tensor16x8x16_kernel7_16_1|128_1_1": {
            "実行ごとの中央コスト (ms)": 130.0,
            "ボトルネック比率 ([0,1] 内)": 0.015779752711771233
        },
        "ampere_fp16_s16816gemm_fp16_128x128_ldg8_f2f_stages_32x5_nt16_32_1|128_1_1": {
            "実行ごとの中央コスト (ms)": 132.60000000000002,
            "ボトルネック比率 ([0,1] 内)": 0.013880912782219888
        },
        "void (anonymous namespace)::indexing_backward_kernel<c10::Half, 4>(long const*, long const*, c10::Half const*, c10::Half*, long, long, long, long, bool)256_16_1|32_4_1": {
            "実行ごとの中央コスト (ms)": 1202.25,
            "ボトルネック比率 ([0,1] 内)": 0.012148757934008617
        },
        "ampere_fp16_s16816gemm_fp16_128x128_ldg8_f2f_stages_32x5_nt16_24_1|128_1_1": {
            "実行ごとの中央コスト (ms)": 105.6,
            "ボトルネック比率 ([0,1] 内)": 0.005656117080836238
        }
    },
    "潜在的な GPU 問題があるワーカー": [],
    "詳細レポート": {}
}

レポートの詳細:

  • "最小/中央値/最大 GPU 使用率 ([0,1] 内)": このジョブでは、すべてのワーカーにわたる GPU 使用率は最大 29.4%、最小 27.5%、中央値 28.6% です。

  • "workers with abnormal GPU utilization":このフィールドは空です。これは、GPU 使用率が著しい外れ値であるワーカーがないことを意味します。このフィールドが空でなければ、外れ値のワーカー ID とその GPU 使用率がリストされます。

  • "major_kernel_executions":総実行時間が最も長い GPU カーネルの実行詳細をリストします。これには、実行ごとの中央コストと、エンドツーエンドの総実行時間に対する割合であるボトルネック率が含まれます。

  • "潜在的な GPU 問題があるワーカー": GPU カーネル関数の実行が遅いワーカーの ID をリストします。このフィールドが空の場合、すべてのワーカーは正常に動作しています。

  • "詳細レポート": "潜在的な GPU 問題があるワーカー" が空でない場合に表示されます。どの特定のワーカーがどのカーネル関数を通常のワーカーよりもどれだけ遅く実行したかをリストします。

GPU メモリ操作関数

GPU memory operations:
[2025-03-04 06:04:00,048 PerfTracker] (gpu_mem.py 37) INFO: {
    "Memcpy DtoD (デバイス -> デバイス)": {
        "平均ボトルネック比率 ([0,1] 内)": 0.010486858246092,
        "異常なワーカー": {
            "job_x08j11173.cloud.sqa.na131_2_122482.json": 0.010614755325049817,
            "job_x08j11173.cloud.sqa.na131_8_122483.json": 0.0105935370201344,
            "job_x08j11173.cloud.sqa.na131_1_122484.json": 0.010571838319204434,
            "job_x08j11173.cloud.sqa.na131_0_122485.json": 0.010551186610995748,
            "job_x08j11173.cloud.sqa.na131_2_122487.json": 0.010408514784026183,
            "job_x08j11173.cloud.sqa.na131_5_122489.json": 0.010394903160689894,
            "job_x08j11173.cloud.sqa.na131_8_122486.json": 0.010387693451926115,
            "job_x08j11173.cloud.sqa.na131_9_122488.json": 0.010372437296709398
        }
    }
}

レポートの詳細:

  • "avg bottleneck ratio (in [0,1])":モニタリング期間中、このジョブの Memcpy DtoD 操作の平均ボトルネック率は 1.048% でした。

  • "abnormal_workers":Memcpy DtoD 関数の実行時間が 8 つのワーカーで異常に長くなりました。GPU メモリ操作関数の場合、ボトルネック率が 0.01 (1%) を超えると異常と見なされます。ボトルネック率は、計算と重複する時間を除いた実行時間です。

集合通信

Communication:
{
    "nvlink リング送信": {
        "ncclDevKernel_AllReduce_Sum_f16_RING_LL(ncclDevComm*, unsigned long, ncclWork*)": {
            "正常なワーカーの例": {
                "ワーカー": "job_x08j11173.cloud.sqa.na131_0_66930.json",
                "他のワーカーとの違い": 0,
                "特徴": {
                    "ボトルネック比率 ([0,1] 内)": 0.2743985289797289,
                    "平均スループット (%)": 73.75921390374332,
                    "スループット標準偏差 (%)": 11.384679144385027
                }
            },
            "異常なワーカー": []
        }
    },
    "nvlink リング受信": {
        "ncclDevKernel_AllReduce_Sum_f16_RING_LL(ncclDevComm*, unsigned long, ncclWork*)": {
            "正常なワーカーの例": {
                "ワーカー": "job_x08j11173.cloud.sqa.na131_3_66933.json",
                "他のワーカーとの違い": 2,
                "特徴": {
                    "ボトルネック比率 ([0,1] 内)": 0.27346865947352955,
                    "平均スループット (%)": 72.70337362637363,
                    "スループット標準偏差 (%)": 12.658093406593407
                }
            },
            "異常なワーカー": []
        }
    },
    "pcie sendrecv 送信": {
        "ncclDevKernel_SendRecv(ncclDevComm*, unsigned long, ncclWork*)": {
            "正常なワーカーの例": {
                "ワーカー": "job_x08j11173.cloud.sqa.na131_0_66930.json",
                "他のワーカーとの違い": 3,
                "特徴": {
                    "ボトルネック比率 ([0,1] 内)": 0.07248997985478658,
                    "平均スループット (%)": 46.667,
                    "スループット標準偏差 (%)": 14.636000000000001
                }
            },
            "異常なワーカー": []
        }
    },
    "pcie sendrecv 受信": {
        "ncclDevKernel_SendRecv(ncclDevComm*, unsigned long, ncclWork*)": {
            "正常なワーカーの例": {
                "ワーカー": "job_x08j11173.cloud.sqa.na131_7_66936.json",
                "他のワーカーとの違い": 1,
                "特徴": {
                    "ボトルネック比率 ([0,1] 内)": 0.0643436909425455,
                    "平均スループット (%)": 54.833333333333336,
                    "スループット標準偏差 (%)": 14.166666666666666
                }
            },
            "異常なワーカー": []
        }
    },
    "pcie リング送信": {
        "ncclDevKernel_AllReduce_Sum_f16_RING_LL(ncclDevComm*, unsigned long, ncclWork*)": {
            "正常なワーカーの例": {
                "ワーカー": "job_x08j11173.cloud.sqa.na131_0_66930.json",
                "他のワーカーとの違い": 0,
                "特徴": {
                    "ボトルネック比率 ([0,1] 内)": 0.2743985289797289,
                    "平均スループット (%)": 41.36698734177215,
                    "スループット標準偏差 (%)": 14.653768987341774
                }
            },
            "異常なワーカー": []
        }
    },
    "pcie リング受信": {
        "ncclDevKernel_AllReduce_Sum_f16_RING_LL(ncclDevComm*, unsigned long, ncclWork*)": {
            "正常なワーカーの例": {
                "ワーカー": "job_x08j11173.cloud.sqa.na131_0_66930.json",
                "他のワーカーとの違い": 0,
                "特徴": {
                    "ボトルネック比率 ([0,1] 内)": 0.2743985289797289,
                    "平均スループット (%)": 41.5311475409836,
                    "スループット標準偏差 (%)": 15.282721311475411
                }
            },
            "異常なワーカー": []
        }
    }
}

このレポートは、集合通信関数を通信タイプ別に分類し、各タイプのパフォーマンス分析を提供します。

  • "正常なワーカーの例": 関数の実行に関する通常のパフォーマンスパラメーターをリストします。これには、ボトルネック比率 (計算と重複する時間を除いたエンドツーエンドの時間に対する割合)、平均スループット、スループット標準偏差が含まれます。

  • "異常なワーカー": 空でない場合、このフィールドには、通信関数のパフォーマンスが異常なすべてのワーカーと、それに対応するパフォーマンスメトリックがリストされます。

CUDA ランタイム

CUDA Runtime:
[2025-03-04 06:04:00,047 PerfTracker] (cuda_runtimes.py 43) INFO: {
    "cudaLaunchKernel": {
        "平均ボトルネック比率 ([0,1] 内)": 0.039727736621541394,
        "平均実行時間 / モニタリング期間 ([0,1] 内)": 0.06956947111288565,
        "異常なワーカー": {
            "job_x08j11173.cloud.sqa.na131_5_122489.json": 0.05342638907019616,
            "job_x08j11173.cloud.sqa.na131_8_122483.json": 0.05125160206973098,
            "job_x08j11173.cloud.sqa.na131_2_122487.json": 0.04770049253555521,
            "job_x08j11173.cloud.sqa.na131_8_122486.json": 0.04358845044879828,
            "job_x08j11173.cloud.sqa.na131_0_122485.json": 0.042635952262081556,
            "job_x08j11173.cloud.sqa.na131_9_122488.json": 0.0354174573296689,
            "job_x08j11173.cloud.sqa.na131_1_122484.json": 0.023585242093250733,
            "job_x08j11173.cloud.sqa.na131_2_122482.json": 0.02021630716304934
        }
    }
}

レポートの詳細:

  • "avg bottleneck ratio (in [0,1])":モニタリング期間中、このジョブの cudaLaunchKernel の平均ボトルネック率は 3.97% でした。この値には、計算と重複する時間は含まれません。

  • "avg execution time / monitoring duration (in [0,1])":cudaLaunchKernel の平均実行時間は、総モニタリング期間の 6.95% でした。この値には、計算と重複する時間が含まれます。

  • "abnormal_workers":cudaLaunchKernel 関数の実行時間が 8 つのワーカーで異常に長くなりました。CUDA ランタイム関数の場合、ボトルネック率が 0.01 (1%) を超えると異常と見なされます。ボトルネック率は、計算と重複する時間を除いた実行時間です。

Python 関数

Python functions:
[2025-03-04 06:04:00,048 PerfTracker] (python_functions.py 43) INFO: {
    "pretrain_gpt.py: <module>|megatron/training.py: pretrain|megatron/training.py: train|megatron/training.py: train_step|megatron/core/pipeline_parallel/schedules.py: forward_backward_pipelining_without_interleaving|megatron/core/pipeline_parallel/schedules.py: backward_step|megatron/core/pipeline_parallel/schedules.py: custom_backward|<built-in method run_backward of torch._C._EngineBase object at 0x>": {
        "job_x08j11173.cloud.sqa.na131_2_122487.json": 0.16970858578301054,
        "job_x08j11173.cloud.sqa.na131_5_122489.json": 0.16821543761561655,
        "job_x08j11173.cloud.sqa.na131_0_122485.json": 0.16787961852913025,
        "job_x08j11173.cloud.sqa.na131_8_122483.json": 0.16769273336153187,
        "job_x08j11173.cloud.sqa.na131_8_122486.json": 0.14482595694389258,
        "job_x08j11173.cloud.sqa.na131_9_122488.json": 0.10359829140378449,
        "job_x08j11173.cloud.sqa.na131_1_122484.json": 0.06543764774209325,
        "job_x08j11173.cloud.sqa.na131_2_122482.json": 0.06217541348063737
    },
    "pretrain_gpt.py: <module>|megatron/training.py: pretrain|megatron/training.py: train|megatron/training.py: train_step|megatron/core/pipeline_parallel/schedules.py: forward_backward_pipelining_without_interleaving|megatron/core/pipeline_parallel/schedules.py: forward_step|pretrain_gpt.py: forward_step|nn.Module: DistributedDataParallel_0|torch/nn/modules/module.py: _call_impl|megatron/core/distributed/distributed_data_parallel.py: forward|nn.Module: Float16Module_0|torch/nn/modules/module.py: _call_impl|megatron/model/module.py: forward|nn.Module: GPTModel_0|torch/nn/modules/module.py: _call_impl|megatron/model/gpt_model.py: forward|nn.Module: TransformerLanguageModel_0|torch/nn/modules/module.py: _call_impl|megatron/model/language_model.py: forward|nn.Module: ParallelTransformer_0|torch/nn/modules/module.py: _call_impl|megatron/model/transformer.py: forward": {
        "job_x08j11173.cloud.sqa.na131_9_122488.json": 0.02471835416438489,
        "job_x08j11173.cloud.sqa.na131_0_122485.json": 0.02022024568555683,
        "job_x08j11173.cloud.sqa.na131_2_122482.json": 0.015394834126935101,
        "job_x08j11173.cloud.sqa.na131_2_122487.json": 0.011625367332189284
    },
    "pretrain_gpt.py: <module>|megatron/training.py: pretrain|megatron/training.py: train|megatron/training.py: train_step": {
        "job_x08j11173.cloud.sqa.na131_0_122485.json": 0.012272193902698852
    },
    "autograd::engine::evaluate_function: LinearWithGradAccumulationAndAsyncCommunicationBackward|LinearWithGradAccumulationAndAsyncCommunicationBackward|torch/autograd/function.py: apply|torch/cuda/amp/autocast_mode.py: decorate_bwd|megatron/core/tensor_parallel/layers.py: backward|<built-in method matmul of Tensor object at 0x>|aten::matmul|aten::mm": {
        "job_x08j11173.cloud.sqa.na131_2_122487.json": 0.014066713574814782,
        "job_x08j11173.cloud.sqa.na131_0_122485.json": 0.013168949365116213,
        "job_x08j11173.cloud.sqa.na131_8_122483.json": 0.013000378454189552,
        "job_x08j11173.cloud.sqa.na131_5_122489.json": 0.012500119397472594,
        "job_x08j11173.cloud.sqa.na131_8_122486.json": 0.012470581043494208
    },
    "autograd::engine::evaluate_function: FastLayerNormFNBackward|FastLayerNormFNBackward|torch/autograd/function.py: apply|apex/contrib/layer_norm/layer_norm.py: backward|<built-in method ln_bwd of PyCapsule object at 0x>": {
        "job_x08j11173.cloud.sqa.na131_0_122485.json": 0.010127612754279463
    },
    "pretrain_gpt.py: <module>|megatron/training.py: pretrain|megatron/training.py: train|megatron/training.py: train_step|megatron/core/pipeline_parallel/schedules.py: forward_backward_pipelining_without_interleaving": {
        "job_x08j11173.cloud.sqa.na131_2_122487.json": 0.01041679269251709
    },
    "autograd::engine::evaluate_function: torch::autograd::AccumulateGrad": {
        "job_x08j11173.cloud.sqa.na131_8_122486.json": 0.013633967050768714
    }
}

このレポートは、GPU 計算、通信、またはその他の操作と重複する時間を除いた実行時間が総時間の 1% を超えるすべての Python 関数をリストします。関数は名前でグループ化されています。各関数について、レポートは実行時間の割合が 1% を超えるすべてのワーカーと、それらのワーカーでの対応する割合をリストします。

付録

PerfTracker の追加パラメーター

PerfTracker の追加パラメーター

master-0 コンテナーにログインして、すべてのワーカーからデータを収集し、集計分析を実行します。

  • パラメーター

    • --steps:データを収集するステップ数を指定します。デフォルト値は 2 です。2 または 3 の値が推奨されます。

    • --wait:収集を開始する前に待機するステップ数を指定します。デフォルト値は 5 です。

    • --output-dir:可視化ページとトレースファイルが保存されるディレクトリです。デフォルト値は /tmp/perftracker/output です。このパラメーターを追加しない場合、分析レポートが生成された後、生のトレースファイルは削除されます。

    • --save-raw-trace:ワーカーの生トレースを保存するかどうかを指定します。各ワーカーは、数百 MB から 2〜3 GB のサイズのファイルに対応します。有効な値は none (保存しない)、master (ランク 0 ノードのみ保存)、または all (すべて保存) です。このパラメーターが指定されていない場合、デフォルト値は none です。

  • 使用例

    • すべてのデフォルトパラメーターを使用します。コマンドを実行すると、PerfTracker は 5 ステップ待機し、2 ステップ分のモニタリングトレースを収集し、パフォーマンスレポートを生成してから、生トレースを削除します。

      c4d_perftracker --trigger-on --auto-analyze
    • --wait パラメーターの値を指定します。PerfTracker は、収集ラウンドを開始する前に指定されたステップ数だけ待機します。

      c4d_perftracker --trigger-on --auto-analyze --wait 10
    • --steps パラメーターを 3 に設定します。PerfTracker は 3 ステップ分のデータを収集します。

      c4d_perftracker --trigger-on --auto-analyze --steps 3
    • コマンドラインに --save-raw-trace パラメーターが含まれている場合、トレースは自動的に保存されます。デフォルトのパスは /tmp/perftracker/output です。

      c4d_perftracker --trigger-on --auto-analyze --save-raw-trace all
    • /path/to/trace などの指定されたパスにマスターのトレースを自動的に保存します。

      c4d_perftracker --trigger-on --auto-analyze --save-raw-trace master --output-dir /path/to/trace
    • コマンドラインの --save-raw-trace パラメーターの値が all の場合、すべてのワーカーのトレースが保存されます。

      c4d_perftracker --trigger-on --auto-analyze --output-dir --save-raw-trace all
    • 混合パラメーター構成の例:

      c4d_perftracker --trigger-on --auto-analyze --wait 5 --steps 10 --output-dir /path/to/trace --save-raw-trace all

      このコマンドを実行すると、PerfTracker は 5 ステップ待機し、次の 10 ステップのデータ収集を開始します。すべてのワーカーのトレースは /path/to/trace ディレクトリに保存され、トレース分析レポートは AIMaster コンテナーに表示されます。

関連リファレンス

PerfTracker の原理に関する詳細については、「PerfTracker: Online Performance Troubleshooting for Large-scale Model Training in Production」をご参照ください。