Herramienta de Trace Viewer
Puedes usar el Visor de seguimiento para visualizar el cronograma de eventos que ocurrieron durante la sesión de generación de perfiles. Muestra las duraciones de las operaciones que ejecuta tu modelo en diferentes partes del sistema, como el host (CPU) y los aceleradores (GPU o TPU). Esto te permite comprender cómo tu modelo usa los recursos de hardware, identificar los cuellos de botella de rendimiento y optimizar tu modelo para una ejecución más rápida. La IU del visor de seguimiento se basa en la que se usa en chrome://tracing
y, por lo tanto, requiere que uses el navegador Chrome.
Plataformas compatibles
TPU: Compatible
GPU: Compatible
El Visualizador de seguimiento para GPUs agrupa los eventos en cronogramas por chip de GPU y las transmisiones dentro de él, mientras que, para las TPU, organiza los eventos en cronogramas por chip y núcleo de TPU. En cualquier caso, Trace Viewer también presenta eventos en cronogramas por subproceso para la CPU del host a la que están conectados los aceleradores.
Cómo interactuar con la línea de tiempo
El Visor de seguimiento proporciona varias herramientas y métodos para navegar y examinar el cronograma:
- Navegación: Puedes usar las siguientes combinaciones de teclas:
- W: Acercar.
- S: Alejar.
- A: Desplazarse a la izquierda.
- D: Desplazarse a la derecha
- Selector de herramientas: Puedes hacer clic en una herramienta del selector o usar la combinación de teclas correspondiente:
- Herramienta de selección (1 o !): Haz clic en un evento para seleccionarlo y ver sus detalles en el panel Detalles. Selecciona varios eventos con Ctrl + clic para ver un resumen.
- Herramienta de desplazamiento lateral (2 o @): Arrastra para mover el cronograma de forma horizontal o vertical.
- Herramienta de zoom (3 o #): Arrastra para acercar un área específica de la línea de tiempo.
- Herramienta de sincronización (4 o $): Arrastra para marcar un intervalo de tiempo. Se mostrará la duración del intervalo marcado. También puedes usar la tecla “m” para marcar una selección y determinar su duración total.
- Hacer zoom en eventos seleccionados (f): Selecciona uno o más eventos y presiona la tecla "f" para acercar rápidamente esa parte del cronograma. Esto es útil para enfocarse en un paso de entrenamiento específico.
Cuando se controla una gran cantidad de eventos de seguimiento, el visor de seguimiento funciona en modo de transmisión. Esto significa que carga datos a pedido a medida que desplazas y acercas el cronograma, de manera similar a como funcionan las aplicaciones de mapas. Si acercas la imagen más rápido de lo que se pueden cargar los datos, es posible que veas una representación de baja resolución de los datos hasta que se termine de cargar.
Componentes de la interfaz del visor de seguimiento
Estos son los componentes principales de la IU en el Visor de seguimiento:
- El eje de tiempo se extiende horizontalmente en la parte superior y muestra el tiempo en relación con el comienzo del seguimiento.
- Los cronogramas se organizan por secciones y segmentos, con etiquetas ubicadas en el eje vertical izquierdo. Cada sección representa un elemento de procesamiento (p.ej., un nodo de dispositivo o subprocesos de host) y se puede expandir o contraer. Dentro de cada sección, se encuentran los segmentos, que son cronogramas de actividades específicas.
- Los eventos son los bloques rectangulares de colores en los segmentos de la línea de tiempo que representan la duración de una operación o un metaevento, como un paso de entrenamiento. El color de los eventos no tiene un significado específico.
- El panel de detalles muestra información adicional sobre los eventos seleccionados en el panel de cronograma, como su nombre, hora de inicio y duración.
Secciones y segmentos típicos
El visor de seguimiento proporciona las siguientes secciones y segmentos.
- Una sección para cada nodo de TPU, con los siguientes segmentos:
- Módulo XLA: Es el programa XLA que se ejecuta.
- Operaciones de XLA: Muestra las operaciones de HLO de XLA que se ejecutaron en el núcleo de la TPU. Cada operación del framework de nivel superior (JAX, Tensorflow o PyTorch, por ejemplo) se traduce en una o varias operaciones de XLA, que luego se compilan para ejecutarse en la TPU. Cuando haces clic en una operación XLA, puedes ver vínculos a la operación en el visor de gráficos, junto con información adicional sobre la operación, como los tiempos de inicio y detención, la duración y el seguimiento de pila de origen (si el framework y el compilador lo ponen a disposición).
- XLA TraceMe: Son anotaciones especificadas por el usuario en su código que describen las unidades de trabajo lógicas de las que se desea hacer un seguimiento. Es posible que sigas viendo datos aquí, incluso si no agregaste ninguna anotación. Por lo general, XLA (p. ej., núcleos de barrera) o XProf (p. ej., entradas de seguimiento descartadas) los agregan.
- Paso: Muestra la duración de los pasos de entrenamiento que se ejecutan en ese núcleo de TPU, si se anotan de forma adecuada en el programa o framework del usuario.
- Operaciones de framework: Muestra las operaciones de framework (JAX, Tensorflow o PyTorch, por ejemplo) que se ejecutan en el núcleo de TPU, si se anotan de forma adecuada en el programa o framework del usuario.
- Alcance del nombre del framework: Para cada operación del framework, se muestra una visualización del seguimiento de pila. Para abreviar, este segmento solo aparece para un solo dispositivo.
- Código fuente: Es la ruta de acceso al código fuente que se ejecuta, si está disponible en el perfil.
- Unidad escalar: En el caso de las TPU, los eventos que se ejecutan en la unidad escalar se muestran si están presentes en el perfil.
- Marcas de sincronización de TensorCore: Mecanismo de sincronización en TPU, que se muestra si está presente en el perfil.
- Traslado del host: Son operaciones que mueven datos de forma asíncrona entre la memoria del host y la memoria del acelerador. Por lo general, hay operaciones de inicio y detención correspondientes que aparecen en la línea de operaciones de XLA que indican que el acelerador se está preparando para la transferencia de datos (p.ej., marcar las regiones de memoria de origen o destino como “en uso” durante la transferencia). Es posible que haya varias filas de descarga del host si hay varias operaciones de descarga que se ejecutan en paralelo, lo que requiere que el visor de seguimiento muestre varios eventos de forma simultánea.
- Una sección para cada nodo Sparsecore: Algunas generaciones de TPU (p.ej., TPU v5p y TPU v6e) están equipadas con una o más unidades de SparseCore, además de las unidades MXU de procesamiento intensivo. Los módulos, las operaciones y los TraceMes asociados con estos núcleos aparecerán en esta sección.
- Una sección para cada nodo de GPU, con los siguientes segmentos:
- Módulos de XLA, operaciones de Framework, alcance del nombre de Framework, pasos, código fuente. Todas son similares a las secciones de TPU.
- Un segmento por flujo, cuyo nombre también incluye información sobre los tipos de operaciones que se ejecutan en el flujo (Memcpy, Compute, etc.).
- XLA TraceMe no es compatible con las GPUs.
- Las operaciones de XLA aparecen en las secciones de GPU, pero, por el momento, no siempre son precisas, ya que se derivan de los datos de transmisión. Por lo tanto, no pueden dar cuenta por completo del modelo de ejecución de la GPU, en el que puede haber una asignación N:M de operaciones XLA a los kernels reales que se ejecutan en las diferentes transmisiones, y la programación dinámica de varias transmisiones en diferentes SM en el hardware.
- Una sección para cada componente (p.ej., un grupo de subprocesos) que se ejecuta en la CPU de la máquina anfitrión, con una pista por subproceso, en el caso de los grupos de subprocesos. También es aquí donde verás los seguimientos de Python si se habilitaron durante la recopilación de perfiles.
Ten en cuenta que solo las operaciones XLA para TPU y los datos de transmisión para GPUs se basan directamente en el perfil recopilado. Todas las demás líneas son "líneas derivadas", que incluyen información opcional de "banda lateral" proporcionada por el compilador, anotaciones opcionales del usuario o heurísticas aplicadas por XProf. Por lo tanto, es posible que estas líneas derivadas aparezcan o no en ciertos perfiles.
Otras funciones
- Puedes buscar nombres de eventos específicos con la barra de búsqueda “Buscar eventos…”. Actualmente, solo se realiza la búsqueda dentro del período visible en pantalla, en lugar del seguimiento completo.
- Eventos de flujo: Si habilitas esta opción haciendo clic en el botón "Eventos de flujo" en la barra superior, se agregarán visualizaciones que vincularán eventos en un subproceso o una línea a eventos en otra línea de subproceso. Por ejemplo, puede haber una flecha dibujada desde la operación en el host que pone en cola o inicia el trabajo para un acelerador hasta la operación en el acelerador que ejecuta ese trabajo. XProf determina estos vínculos a través de una combinación de anotaciones del usuario, heurísticas integradas y el procesamiento posterior de la información que recibe de diferentes componentes (p.ej., Controladores de CUPTI, IDs de inicio del kernel, información del entorno de ejecución de TPU, etcétera).
- Si haces clic en una operación XLA, se proporciona información adicional en el panel de detalles. Por ejemplo, vincula a la operación en la herramienta Graph Viewer. También puede proporcionar punteros al código fuente o al seguimiento de pila de Python, la operación del framework que causó que se generara esta operación de XLA, etcétera (si está presente en el perfil). También puede mostrar FLOPS (cantidad de operaciones de punto flotante que ejecuta la operación) y bytes a los que accede la operación. Esta información se adquiere de forma estática de XLA durante la compilación, en lugar de la información del tiempo de ejecución del perfil.