使用率閲覧者

This tool is currently only available in nightly builds.

目標

このツールの目的は、TPU システムのパフォーマンスの概要を提供し、パフォーマンス アナリストがパフォーマンスの問題が発生している可能性のあるシステムの部分を特定できるようにすることです。

チップレベルの使用率を可視化する

このツールを使用するには、左側の [Drawer] で [Utilization Viewer] ツールを探します。このツールには、TPU チップの 2 つの Tensor ノードの実行ユニット(上部の 2 つのグラフ)と DMA パス(下部の 2 つのグラフ)の使用率を示す 4 つの棒グラフが表示されます。

ユニットの使用率

  • バーにカーソルを合わせると、使用率(達成値と(理論上の)ピーク値)の詳細を示すツールチップが表示されます。バーに表示される使用率は、「達成」額を「ピーク」額で割って求められます。達成量とピーク量は、実行ユニット使用率の場合は命令の単位で、帯域幅使用率の場合はバイトの単位で表されます。

  • 実行ユニットの使用率は、プロファイリング期間内にユニットがビジー状態だったサイクルの割合です。

    次のテンソルコア実行ユニットの使用率が表示されます。

    • スカラー ユニット: count_s0_instructioncount_s1_instruction の合計として計算されます。つまり、スカラー ユニットのスループットはサイクルあたり 2 つの命令であるため、スカラー命令の数をサイクルの数の 2 倍で割った値です。
    • ベクトル ALU: count_v0_instructioncount_v1_instruction の合計(ベクトル命令の数)を、サイクル数の 2 倍で割った値として計算されます。これは、ベクトル ALU のスループットが 1 サイクルあたり 2 つの命令であるためです。
    • ベクトル ストア: count_vector_store として計算されます。つまり、ベクトル ストアのスループットはサイクルあたり 1 命令であるため、ベクトル ストアの数をサイクル数で割った値です。
    • ベクトル読み込み: ベクトル読み込みのスループットはサイクルあたり 1 命令であるため、count_vector_load(ベクトル読み込みの数 / サイクル数)として計算されます。
    • 行列ユニット(MXU): MXU のスループットは 8 サイクルあたり 1 命令であるため、count_matmul をサイクル数の 1/8 で割った値として計算されます。
    • 転置ユニット(XU): XU のスループットは 8 サイクルあたり 1 命令であるため、count_transpose をサイクル数の 1/8 で割った値として計算されます。
    • 削減と置換ユニット(RPU): RPU スループットは 8 サイクルあたり 1 命令であるため、count_rpu_instruction をサイクル数の 1/8 で割った値として計算されます。

    次の図は、実行ユニットを示すテンソルコアのブロック図です。

    flowchart LR
    classDef redBox fill:#c96665,stroke:#000,stroke-width:2px,color:#000,font-weight:bold;
    classDef whiteBox fill:#fff,stroke:#000,stroke-width:2px,color:#000,font-weight:bold;
    classDef invisible fill:none,stroke:none;
    
    classDef container fill:#f9f9f9,stroke:#666,stroke-width:3px,stroke-dasharray: 10 5,color:#666,font-size:20px;
    
    subgraph TensorCore [TensorCore]
        direction LR
    
        subgraph LeftCol [ ]
            direction TB
            CS["Core<br>Sequencer<br>(CS)"]:::redBox
            VPU["Vector<br>Programmable<br>Unit<br>(VPU)"]:::whiteBox
    
            CS --> VPU
        end
    
        subgraph RightCol [ ]
            direction TB
            MXU["Matrix Unit<br>(MXU)"]:::whiteBox
            XU["Transpose Unit<br>(XU)"]:::whiteBox
            RPU["Reduction and<br>Permutation<br>Unit<br>(RPU)"]:::whiteBox
        end
    
        VPU <==> MXU
        VPU <==> XU
        VPU <==> RPU
    end
    
    class TensorCore container
    class LeftCol,RightCol invisible
    

    これらの各実行ユニットの詳細については、TPU アーキテクチャをご覧ください。

  • DMA パスの使用率は、プロファイリング期間中に使用された帯域幅の割合(バイト/サイクル)です。これは NF_CTRL カウンタから取得されます。

    次の図は、DMA の送信元 / 送信先を表す 7 つのノードと、Tensor ノード内の 14 個の DMA パスを示しています。図の「BMem to VMem」と「Bmem to ICI」のパスは、実際には単一のカウンタによって累積された共有パスであり、ツールでは「BMem to ICI/VMem」と表示されます。ICI に送信される DMA はリモート HBM または VMEM への DMA であり、HIB から/への DMA はホストメモリから/への DMA です。

    flowchart TD
      HIB[HIB]
      HBM[HBM]
      IMem[IMem]
      SMem[SMem]
      BMem[BMem]
      VMem[VMem]
      ICI[ICI]
    
      HIB --> HBM
      HBM --> HIB
    
      subgraph Memory_Units [ ]
          direction LR
          style Memory_Units fill:none,stroke:none
          IMem
          SMem
          BMem
          VMem
      end
    
      HBM --> IMem
      HBM --> SMem
      HBM --> BMem
      HBM --> VMem
    
      BMem --> VMem
      BMem --> ICI
      VMem --> ICI
      ICI --> VMem
    
      ICI --> HBM
      VMem --> HBM
      BMem --> HBM
      SMem --> HBM
    
      HBM --> ICI