Visualizador de uso

This tool is currently only available in nightly builds.

Objetivo

El objetivo de esta herramienta es proporcionar una vista general del rendimiento de un sistema de TPU y permitir que un analista de rendimiento detecte las partes del sistema que pueden tener problemas de rendimiento.

Visualización del uso a nivel del chip

Para usar la herramienta, busca "Visor de utilización" en el "Cajón" de la izquierda. La herramienta muestra 4 gráficos de barras que indican el uso de las unidades de ejecución (los 2 gráficos superiores) y las rutas de DMA (los 2 gráficos inferiores) para los 2 nodos de Tensor en un chip de TPU.

Utilización de unidades

  • Si colocas el cursor sobre una barra, se muestra un cuadro de información con detalles sobre el uso: cantidades "alcanzadas" y "máximas" (teóricas). El porcentaje de uso que se muestra en la barra se obtiene dividiendo la cantidad "alcanzada" por la cantidad "máxima". Las cantidades alcanzadas y máximas se expresan en unidades de instrucciones para el uso de la unidad de ejecución y en bytes para el uso del ancho de banda.

  • El uso de una unidad de ejecución es la fracción de ciclos en la que la unidad estuvo ocupada durante el período de generación de perfiles.

    Se muestra el uso de las siguientes unidades de ejecución de núcleos de tensor:

    • Unidad escalar: Se calcula como la suma de count_s0_instruction y count_s1_instruction, es decir, la cantidad de instrucciones escalares, dividida por el doble de la cantidad de ciclos, ya que el rendimiento de la unidad escalar es de 2 instrucciones por ciclo.
    • ALU vectoriales: Se calculan como la suma de count_v0_instruction y count_v1_instruction, es decir, la cantidad de instrucciones vectoriales, dividida por el doble de la cantidad de ciclos, ya que la capacidad de procesamiento de las ALU vectoriales es de 2 instrucciones por ciclo.
    • Almacenes de vectores: Se calcula como count_vector_store, es decir, la cantidad de almacenes de vectores dividida por la cantidad de ciclos, ya que el rendimiento del almacén de vectores es de 1 instrucción por ciclo.
    • Cargas vectoriales: Se calcula como count_vector_load, es decir, la cantidad de cargas vectoriales dividida por la cantidad de ciclos, ya que la capacidad de procesamiento de carga vectorial es de 1 instrucción por ciclo.
    • Unidad de matriz (MXU): Se calcula como count_matmul dividido por 1/8 del número de ciclos, ya que el rendimiento de la MXU es de 1 instrucción por cada 8 ciclos.
    • Unidad de transposición (XU): Se calcula como count_transpose dividido por 1/8 de la cantidad de ciclos, ya que la capacidad de procesamiento de la XU es de 1 instrucción por cada 8 ciclos.
    • Unidad de reducción y permutación (RPU): Se calcula como count_rpu_instruction dividido por 1/8 de la cantidad de ciclos, ya que la capacidad de procesamiento de la RPU es de 1 instrucción por 8 ciclos.

    En la siguiente figura, se muestra un diagrama de bloques del núcleo de tensor con las unidades de ejecución:

    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
    

    Para obtener más detalles sobre cada una de estas unidades de ejecución, consulta Arquitectura de TPU.

  • El uso de rutas de DMA es la fracción de ancho de banda (bytes/ciclo) que se usó durante el período de generación de perfiles. Se deriva de los contadores NF_CTRL.

    En la siguiente figura, se muestran 7 nodos que representan las fuentes o los destinos de los DMA y las 14 rutas de DMA en un nodo de tensor. En realidad, las rutas "BMem to VMem" y "Bmem to ICI" de la figura son una ruta compartida acumulada por un solo contador, que se muestra como "BMem to ICI/VMem" en la herramienta. Una DMA enviada al ICI es una DMA a una HBM o VMEM remota, mientras que una DMA desde o hacia el HIB es una DMA desde o hacia la memoria del host.

    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