Perfila tu modelo en nodos de Cloud TPU

.

El perfilado de tu modelo te permite optimizar el rendimiento del entrenamiento en Cloud TPU. Para generar un perfil de tu modelo, usa TensorBoard y el complemento de TensorBoard de Cloud TPU. Para obtener instrucciones de instalación, consulta las instrucciones de instalación de TensorBoard.

Para obtener más información sobre el uso de TensorBoard con uno de los frameworks compatibles, consulta los siguientes documentos:

Requisitos previos

TensorBoard se instala como parte de TensorFlow. TensorFlow se instala de forma predeterminada en los nodos de Cloud TPU. También puedes instalar TensorFlow de forma manual. De cualquier manera, es posible que se requieran algunas dependencias adicionales. Para instalarlos, ejecuta lo siguiente:

(vm)$ pip3 install --user -r /usr/share/models/official/requirements.txt

Instala el complemento de TensorBoard de Cloud TPU

Establece una conexión SSH en tu nodo TPU:

$ gcloud compute ssh your-vm --zone=your-zone

Ejecute los siguientes comandos:

  pip3 install --upgrade "cloud-tpu-profiler>=2.3.0"
  pip3 install --user --upgrade -U "tensorboard>=2.3"
  pip3 install --user --upgrade -U "tensorflow>=2.3"

Captura un perfil

Puedes capturar un perfil con la IU de TensorBoard o de manera programática.

Captura un perfil con TensorBoard

Cuando inicias TensorBoard, se inicia un servidor web. Cuando diriges tu navegador a la URL de TensorBoard, se muestra una página web. La página web te permite capturar un perfil de forma manual y ver sus datos.

Inicia el servidor de Profiler de TensorFlow

tf.profiler.experimental.server.start(6000)

Esto inicia el servidor del generador de perfiles de TensorFlow en tu VM de TPU.

Inicia la secuencia de comandos de entrenamiento

Ejecuta la secuencia de comandos de entrenamiento y espera a que veas un resultado que indique que el modelo se está entrenando de forma activa. El aspecto de esto depende de tu código y modelo. Busca un resultado como Epoch 1/100. Como alternativa, puedes navegar a la página de Cloud TPU en la consola de Google Cloud, seleccionar tu TPU y ver el gráfico de utilización de la CPU. Si bien esto no muestra el uso de la TPU, es una buena indicación de que la TPU está entrenando tu modelo.

Inicia el servidor de TensorBoard

Abre una nueva ventana de terminal y accede a tu VM de TPU con reenvío de puertos. Esto permite que tu navegador local se comunique con el servidor de TensorBoard que se ejecuta en tu VM de TPU.

 gcloud compute tpus execution-groups ssh your-vm --zone=us-central1-a --ssh-flag="-4 -L 9001:localhost:9001"
 

Ejecuta TensorBoard en la ventana de la terminal que acabas de abrir y especifica el directorio en el que TensorBoard puede escribir datos de perfilado con la marca --logdir. Por ejemplo:

TPU_LOAD_LIBRARY=0 tensorboard --logdir your-model-dir --port 9001

TensorBoard inicia un servidor web y muestra su URL:

Serving TensorBoard on localhost; to expose to the network, use a proxy or pass --bind_all
TensorBoard 2.3.0 at http://localhost:9001/ (Press CTRL+C to quit)

Abre un navegador web y ve a la URL que se muestra en el resultado de TensorBoard. Para asegurarte de que TensorBoard haya cargado completamente los datos de generación de perfiles, haz clic en el botón de recarga en la esquina superior derecha de la página de TensorBoard. De forma predeterminada, la página de TensorBoard aparece con la pestaña Escalares seleccionada.

imagen

Captura un perfil en los nodos de TPU

  1. Selecciona PERFIL en el menú desplegable que se encuentra en la parte superior de la pantalla.
  2. Selecciona el botón CAPTURE PROFILE.
  3. Selecciona el botón de selección Nombre de la TPU.
  4. Escribe el nombre de tu TPU
  5. Selecciona el botón CAPTURAR.

Captura un perfil de manera programática

La forma en que captures un perfil de forma programática depende del framework de AA que uses.

Si usas TensorFlow, inicias y detienes el generador de perfiles con tf.profiler.experimental.start() y tf.profiler.experimental.stop(), respectivamente. Para obtener más información, consulta la guía de rendimiento de TensorFlow.

Si usas JAX, usa jax.profiler.start_trace() y jax.profiler.stop_trace() para iniciar y detener el generador de perfiles, respectivamente. Para obtener más información, consulta Cómo generar perfiles de programas de JAX.

Problemas comunes de captura de perfiles

A veces, cuando intentas capturar un registro, es posible que veas mensajes como los siguientes:

No trace event is collected after xx attempt(s). Perhaps, you want to try again
(with more attempts?).Tip: increase number of attempts with --num_tracing_attempts.
Failed to capture profile: empty trace result

Esto puede ocurrir si la TPU no realiza cálculos de forma activa, si un paso de entrenamiento tarda demasiado o por otros motivos. Si ves este mensaje, prueba lo siguiente:

  • Intenta capturar un perfil después de que se ejecuten algunas épocas.
  • Intenta aumentar la duración de la generación de perfiles en el diálogo Capture Profile de TensorBoard. Es posible que un paso del entrenamiento esté demorando demasiado.
  • Asegúrate de que la VM y la TPU tengan la misma versión de TF.

Cómo ver datos de perfil con TensorBoard

La pestaña Perfil se muestra después de que hayas capturado algunos datos del modelo. Es posible que debas hacer clic en el botón para volver a cargar en la esquina superior derecha de la página de TensorBoard. Una vez que los datos están disponibles, si haces clic en la pestaña Perfil, se mostrará una selección de herramientas que te ayudarán a analizar el rendimiento:

Lector de seguimiento

El lector de seguimiento es una herramienta de análisis del rendimiento de Cloud TPU disponible en Perfil. La herramienta usa el visualizador de perfilado de eventos de seguimiento de Chrome, por lo que solo funciona en el navegador Chrome.

El lector de seguimiento muestra un cronograma que presenta la siguiente información:

  • Duración de las operaciones que ejecutó tu modelo de TensorFlow.
  • La parte del sistema (máquina host o TPU) que ejecutó una operación. Generalmente, la máquina host ejecuta operaciones de entrada, mientras realiza el procesamiento previo de los datos de entrenamiento y los transfiere a la TPU, a la vez que la TPU ejecuta el entrenamiento del modelo real.

El lector de seguimiento te permite identificar problemas de rendimiento en tu modelo y tomar medidas para resolverlos. Por ejemplo, en un nivel alto, puedes identificar si es la entrada o el entrenamiento del modelo lo que ocupa la mayor parte del tiempo. Si desglosas los datos, puedes identificar las operaciones de TensorFlow que más tardan en ejecutarse.

Observa que el lector de seguimiento tiene un límite de 1 millón de eventos por cada Cloud TPU. Si necesitas evaluar más eventos, usa el lector de seguimiento de transmisión en su lugar.

Interfaz del lector de seguimiento

Para abrir el lector de seguimiento, ve a TensorBoard y haz clic en la pestaña Perfil en la parte superior de la pantalla y eligetrace_viewer del menú desplegable Herramientas. Aparece el lector y muestra tu ejecución más reciente:

image

La pantalla contiene los siguientes elementos principales (señalados con números en la imagen):

  1. Menú desplegable de Runs (Ejecuciones). Contiene todas las ejecuciones para las que capturaste información de seguimiento. La vista predeterminada es tu ejecución más reciente, pero puedes abrir el menú desplegable para seleccionar otra ejecución.
  2. Menú desplegable de Herramientas (Tools). Selecciona diferentes herramientas de perfilado.
  3. Menú desplegable de Host. Selecciona un host que contiene un conjunto de Cloud TPU.
  4. Panel de cronograma. Muestra las operaciones que Cloud TPU y la máquina host ejecutaron en el tiempo.
  5. Panel de detalles. Muestra información adicional sobre las operaciones seleccionadas en el panel de cronograma.

Aquí puedes ver el panel de cronograma con más detalle:

image

El panel de cronograma contiene los siguientes elementos:

  1. Barra superior. Contiene varios controles auxiliares.
  2. Eje de tiempo. Muestra el tiempo en relación con el principio del seguimiento.
  3. Etiquetas de pista y sección. Cada sección contiene varias pistas y tiene un triángulo a la izquierda en el que puedes hacer clic a fin de expandir y contraer la sección. Hay una sección para cada elemento de procesamiento del sistema.
  4. Selector de herramientas. Contiene varios elementos para interactuar con el lector de seguimiento.
  5. Eventos. Estos muestran el tiempo durante el cual se ejecutó una operación o la duración de los metaeventos, como los pasos de entrenamiento.
  6. Barra de pestaña vertical. Esta barra no es útil en Cloud TPU. Forma parte del objetivo general de la herramienta de visualizador de seguimiento de Chrome que se usa para distintas tareas de análisis del rendimiento.

Secciones y pistas

El lector de seguimiento contiene las siguientes secciones:

  • Una sección para cada nodo de TPU, etiquetada con el número de chip TPU y del nodo TPU dentro del chip (por ejemplo, "Chip 2: TPU Core 1"). Cada sección de nodo TPU contiene los siguientes puntos:
    • Step (Paso). Muestra la duración de los pasos de entrenamiento que se estaban ejecutando en la TPU.
    • TensorFlow Ops (Operaciones de TensorFlow). Muestra las operaciones de TensorFlow que se ejecutaron en la TPU.
    • XLA Ops (Operaciones de XLA). Muestra las operaciones de XLA que se ejecutan en la TPU. (Cada operación se traduce en una o varias operaciones de XLA. El compilador de XLA traduce las operaciones de XLA en un código que se ejecuta en la TPU).
  • Una sección para los subprocesos que se ejecutan en la CPU de la máquina host, etiquetada como "Subprocesos del host". La sección contiene una pista por cada subproceso de CPU. Nota: Puedes ignorar la información que se muestra junto con las etiquetas de las secciones.

Selector de herramientas de cronograma

Puedes interactuar con la vista de cronograma mediante el selector de herramientas de cronograma en TensorBoard. Puedes hacer clic en una herramienta de cronograma o usar las siguientes combinaciones de teclas para activar y destacar una herramienta. A fin de mover el selector de herramientas de cronograma, haz clic en el área con puntos ubicada en la parte superior y, luego, arrastra el selector hacia donde quieras ubicarlo.

Usa las herramientas de cronograma como se indica a continuación:

Herramienta de selección
Haz clic en un evento para seleccionarlo o arrastra si quieres seleccionar varios eventos. Se mostrará información adicional acerca de los eventos seleccionados (nombre, hora de inicio y duración) en el panel de detalles.

Herramienta de desplazamiento lateral
Arrastra para desplazar la vista del cronograma de forma horizontal y vertical.

Herramienta de zoom
Arrastra hacia arriba para acercar o arrastra hacia abajo si quieres alejar a lo largo del eje horizontal (tiempo). La posición horizontal del cursor del mouse determina el centro alrededor del cual se aplica el zoom.

Nota: La herramienta de zoom tiene un error conocido que provoca que el zoom permanezca activo si sueltas el botón del mouse cuando el cursor está fuera de la vista de cronograma. Si esto sucede, haz un clic rápido en la vista de cronograma para dejar de aplicar el zoom.

Herramienta de sincronización
Arrastra de forma horizontal para marcar un intervalo de tiempo. La duración del intervalo aparece en el eje de tiempo. Para ajustar el intervalo, arrastra sus extremos. A fin de borrar el intervalo, haz clic en cualquier punto dentro de la vista de cronograma.

Observa que el intervalo queda marcado si seleccionas una de las otras herramientas.

Grafos

TensorBoard proporciona una variedad de visualizaciones, o grafos, de tu modelo y su rendimiento. Utiliza los grafos junto con el visualizador de seguimiento o el visualizador de seguimiento continuo para ajustar en detalle tus modelos y mejorar su rendimiento en Cloud TPU.

Grafo del modelo

El framework de modelado puede generar un gráfico a partir de tu modelo. Los datos del grafo se almacenan en el directorio MODEL_DIR en el bucket de almacenamiento que especificas con el parámetro --logdir. Puedes ver este grafo sin ejecutar capture_tpu_profile.

Para ver el grafo de un modelo, selecciona la pestaña Graphs (Grafos) en TensorBoard.

imagen

Un solo nodo en el grafo de estructura representa una sola operación.

Grafo de compatibilidad con TPU

La pestaña Graphs incluye un módulo verificador de compatibilidad que busca y muestra las operaciones que podrían causar problemas cuando se ejecuta un modelo.

A fin de visualizar el grafo de compatibilidad con TPU de un modelo, selecciona la pestaña Graphs (Grafos) en TensorBoard y, luego, selecciona la opción de TPU Compatibility (Compatibilidad con TPU). En el grafo, se presentan las operaciones compatibles (válidas) en verde y las incompatibles (no válidas) en rojo.

image

Un cierto nodo puede presentar ambos colores, cada uno como un porcentaje de las operaciones de compatibilidad con Cloud TPU de ese nodo. Consulta Interpretar los resultados de compatibilidad para ver un ejemplo.

El panel de resumen de compatibilidad que se muestra a la derecha del grafo representa el porcentaje de todas las operaciones compatibles con Cloud TPU, sus atributos y una lista de operaciones incompatibles con respecto a un nodo seleccionado.

Haz clic en cualquier operación del grafo para mostrar sus atributos en el panel de resumen.

imagen

Observa que el verificador de compatibilidad no evalúe las operaciones asignadas en específico a un dispositivo que no sea de TPU mediante la colocación manual del dispositivo. Además, el verificador no compila realmente el modelo para la ejecución, por lo que debes asegurarte de interpretar los resultados como una evaluación estimativa de la compatibilidad.

Interpreta los resultados de compatibilidad

Perfil

La pestaña Perfil se muestra después de que hayas capturado algunos datos del modelo. Es posible que debas hacer clic en el botón para volver a cargar en la esquina superior derecha de la página de TensorBoard. Una vez que los datos están disponibles, si haces clic en la pestaña Perfil, se mostrará una selección de herramientas que te ayudarán a analizar el rendimiento:

Página de descripción general del perfil

La página de descripción general (overview_page), disponible en Perfil, proporciona una vista de nivel superior sobre el rendimiento registrado por tu modelo durante una ejecución de captura. Allí se muestra una página de descripción general agregada de todas las TPU, así como un análisis general de la canalización de entrada. Existe una opción que permite seleccionar TPU individuales en el menú desplegable de Host.

En la página, se muestran los datos en los siguientes paneles:

image

  • Resumen de rendimiento (Performance summary)

    • Promedio de tiempo del paso: Es el promedio de tiempo del paso obtenido a partir de todos los pasos de la muestra.
    • Tiempo de inactividad del host: el porcentaje de tiempo que el host estuvo incactivo
    • Tiempo de inactividad de la TPU: El porcentaje de tiempo que la TPU estuvo inactiva
    • Uso de FLOPS: el porcentaje de uso de las unidades de la matriz de TPU
    • Uso de ancho de banda de memoria: Es el porcentaje de ancho de banda de memoria utilizado.
  • Grafo de tiempo del paso (Step-time graph). Muestra un grafo del tiempo del paso del dispositivo (en milisegundos) representativo de todos los pasos de la muestra. El área azul corresponde a la porción de tiempo del paso en que las TPU estuvieron inactivas a la espera de datos de entrada del host. En el área roja, se muestra cuánto tiempo Cloud TPU estuvo realmente en funcionamiento.

  • Las 10 operaciones principales de TensorFlow en TPU (Top 10 TensorFlow operations on TPU). Muestra las operaciones de TensorFlow que consumieron más tiempo.

    Cada fila muestra el tiempo propio de una operación (el porcentaje de tiempo que se tardó en completar todas las operaciones), tiempo acumulativo, categoría, nombre y la frecuencia de FLOPS que se alcanzó.

  • Entorno de ejecución (Run environment)

    • Cantidad de hosts utilizados
    • Tipo de TPU utilizado
    • Cantidad de núcleos de TPU
    • Tamaño del lote de entrenamiento
  • Recomendación para los siguientes pasos (Recommendation for next steps). Avisa cuando un modelo está vinculado a la entrada y cuando aparecen problemas con Cloud TPU. Sugiere las herramientas que puedes usar para ubicar cuellos de botella en el rendimiento.

Analizador de canalización de entrada

El analizador de la canalización de entrada proporciona información detallada acerca de tus resultados de rendimiento. La herramienta muestra los resultados de rendimiento del archivo input_pipeline.json que recopila la herramienta capture_tpu_profile.

La herramienta te avisa de forma inmediata si tu programa se encuentra vinculado a la entrada y puede ayudarte a entender el análisis del lado del dispositivo y del lado del host para depurar las etapas de la canalización que crean los cuellos de botella.

Consulta la guía sobre el rendimiento de la canalización de entrada para obtener más información acerca de la optimización del rendimiento de la canalización.

Canalización de entrada

Cuando un programa de TensorFlow lee datos de un archivo, comienza desde el principio del grafo de TensorFlow, de manera canalizada. El proceso de lectura se divide en múltiples etapas de procesamiento de datos conectadas en series, en las que la salida de una etapa es la entrada de la siguiente. Este sistema de lectura se denomina canalización de entrada.

Una canalización típica para leer registros de archivos tiene las siguientes etapas:

  1. Lectura de archivos
  2. Procesamiento previo de archivos (opcional)
  3. Transferencia de archivos desde la máquina host hasta el dispositivo

Una canalización de entrada ineficiente puede ralentizar tu aplicación considerablemente. Una aplicación se considera vinculada a la entrada cuando ocupa una parte significativa del tiempo en la canalización de entrada. Utiliza el analizador de la canalización de entrada para entender en qué puntos esta es ineficiente.

Panel de canalización de entrada

Para abrir el analizador de la canalización de entrada, selecciona Perfil y, luego, input_pipeline_analyzer del menú desplegable Herramientas.

El panel cuenta con tres secciones:

image

  1. Resumen (Summary). Resume la canalización de entrada general y también indica si tu aplicación está vinculada a la entrada y, en caso afirmativo, en qué medida.
  2. Análisis del lado del dispositivo (Device-side analysis). Muestra los resultados detallados del análisis del lado del dispositivo, incluidos el tiempo de paso del dispositivo y el intervalo en que el dispositivo esperó datos de entrada en todos los núcleos de cada paso.
  3. Análisis del lado del host (Host-side analysis). Muestra un análisis detallado del lado del host, incluido un desglose del tiempo de procesamiento de entrada en el host.
Resumen de la canalización de entrada

En la primera sección, se analiza si tu programa está destinado a la entrada. Para ello, se presenta el porcentaje de tiempo del dispositivo dedicado a esperar los datos de entrada del host. Si usas una canalización de entrada estándar que se ha instrumentado, la herramienta informa los puntos en los que se pasa la mayor parte del tiempo de procesamiento. Por ejemplo:

image

Análisis del lado del dispositivo

En la segunda sección, se detalla el análisis del lado del servidor y se proporciona información detallada sobre el tiempo que se dedicó en el dispositivo en comparación con el que se dedicó en el host y sobre cuánto tiempo del dispositivo se destinó a la espera de datos de entrada del host.

image

  1. Estadísticas de tiempo del paso del dispositivo. Informa el promedio, la desviación estándar y el rango (mínimo, máximo) de tiempo del paso del dispositivo.
  2. Duración del paso Muestra un grafo del tiempo del paso del dispositivo (en milisegundos) representativo de todos los pasos de la muestra. El área azul corresponde a la parte del tiempo del paso en que las Cloud TPU estuvieron inactivas a la espera de datos de entrada del host. En el área roja, se muestra cuánto tiempo Cloud TPU estuvo realmente en funcionamiento.
  3. Porcentaje de tiempo que se destinó a esperar datos de entrada. Informa el promedio, la desviación estándar y el rango (mínimo, máximo) de la fracción de tiempo destinada a la espera de los datos de entrada normalizados con respecto al tiempo del paso total del dispositivo.
  4. Rango de tiempo en los núcleos dedicado a esperar datos de entrada, por número de paso. Muestra un gráfico de línea que indica la cantidad de tiempo del dispositivo (expresado como un porcentaje del tiempo del paso total del dispositivo) que se destinó a esperar el procesamiento de los datos de entrada. Debido a que la fracción de tiempo varía de un núcleo al otro, también se traza el rango de fracciones de cada núcleo para cada paso. Dado que el tiempo que toma un paso se determina por el núcleo más lento, quieres que el rango sea lo más pequeño posible.
Análisis del lado del host

En la sección 3, se muestran los detalles del análisis del lado del host, con el tiempo de procesamiento de entrada (el tiempo que se empleó en las operaciones de la API de Dataset) en el host, dividido en varias categorías.

  • Ubicación de datos en cola para transferirlos al dispositivo (Enqueuing data to be transferred to device). El tiempo dedicado a ubicar datos en una cola de entrada antes de transferirlos al dispositivo.
  • Data preprocessing (Procesamiento previo de los datos). El tiempo dedicado a realizar operaciones de procesamiento previo, como la descompresión de imágenes.
  • Reading data from files in advance (Lectura de datos a partir de archivos con anticipación). El tiempo dedicado a leer archivos, incluidos el almacenamiento en caché, la recuperación previa y la intercalación.
  • Lectura de datos a partir de los archivos a pedido (Reading data from files on demand). El tiempo dedicado a leer datos de archivos sin contar el almacenamiento en caché, la recuperación previa ni la intercalación.
  • Otros casos de lectura o procesamiento de datos Tiempo dedicado a otras operaciones relacionadas con la entrada que no usan tf.data.

image

A fin de ver las estadísticas de las operaciones de entrada individuales y sus categorías desglosadas por tiempo de ejecución, expande la sección “Mostrar estadísticas de las operaciones de entrada (Show Input Op statistics)”.

Aparecerá una tabla de datos de origen como la que se muestra a continuación:

image

Cada entrada de la tabla contiene la siguiente información:

  1. Input Op (Operación de entrada). Muestra el nombre en TensorFlow de la operación de entrada.
  2. Count (Recuento). Muestra la cantidad total de instancias de la operación que se ejecutaron durante el tiempo de perfilado.
  3. Total Time (in ms) (Tiempo total [en ms]). Muestra la suma acumulativa del tiempo empleado en cada una de las instancias de operaciones.
  4. Porcentaje de tiempo total (Total Time %). Aquí se muestra el tiempo total que se empleó en una operación como una fracción del tiempo total que se empleó en el procesamiento de entrada.
  5. Tiempo propio total (en ms) (Total Self Time [in ms]). Muestra la suma acumulativa del tiempo propio empleado en cada una de esas instancias. El tiempo propio mide el tiempo empleado dentro del cuerpo de la función, sin contar el tiempo dedicado a la función a la que llama. Por ejemplo, Iterator::PaddedBatch::Filter llama a Iterator::PaddedBatch::Filter::ForeverRepeat::Map, por lo que su tiempo propio total se excluye del tiempo propio total de este último.
  6. Porcentaje de tiempo propio total (Total Self Time %). Aquí se muestra el tiempo propio total como una fracción del tiempo total que se dedicó al procesamiento de entradas.
  7. Category (Categoría). Muestra la categoría de procesamiento de la operación de entrada.

Perfil de operaciones

El perfil de operaciones es una herramienta de Cloud TPU que muestra las estadísticas de rendimiento de las operaciones de XLA que se ejecutaron durante un período de perfilado. El perfil de operaciones muestra lo siguiente:

  • Qué tan bien tu aplicación usa Cloud TPU, lo que se expresa como el porcentaje de tiempo empleado en las operaciones por categoría y la utilización de los FLOPS de TPU.
  • Las operaciones que más tiempo consumieron. Estas operaciones son objetivos de optimización potenciales.
  • Detalles de las operaciones individuales, incluidas la forma, el relleno y las expresiones que usan la operación.

Puedes utilizar el perfil de operaciones para encontrar buenos objetivos de optimización. Por ejemplo, si tu modelo solo logra el 5% de los FLOPS máximos de TPU, puedes usar la herramienta para identificar las operaciones de XLA que tardan más tiempo en ejecutarse y cuántos FLOPS de TPU consumen.

Usa el perfil de operaciones

Durante la recopilación de perfiles, capture_tpu_profile también crea un archivo op_profile.json que contiene las estadísticas de rendimiento de las operaciones de XLA.

Para ver los datos de op_profile en TensorBoard, haz clic en la pestaña Profile (Perfil) en la parte superior de la pantalla y, luego, selecciona op_profile en el menú desplegable de Tools (Herramientas). Verás una pantalla como la que se muestra a continuación:

image

  1. Sección de descripción general. Muestra la utilización de Cloud TPU y proporciona sugerencias de optimización.
  2. Panel de control. Contiene controles que te permiten establecer la cantidad de operaciones que se muestran en la tabla, qué operaciones se muestran y cómo se ordenan.
  3. Tabla de operaciones. Una tabla que muestra las principales categorías de operaciones de TensorFlow asociadas con las operaciones de XLA. Estas operaciones se ordenan por porcentaje de uso de Cloud TPU.
  4. Tarjetas de detalles de las operaciones. Muestran detalles acerca de las operaciones, que aparecen cuando te desplazas sobre una operación de la tabla. Incluyen la utilización de FLOPS, la expresión en la que se usó la operación y el diseño de la operación (ajuste).
Tabla de operaciones de XLA

La tabla de operaciones muestra las categorías de operaciones de XLA ordenadas del porcentaje de uso de Cloud TPU más alto al más bajo. Primero, la tabla muestra el porcentaje de tiempo empleado, el nombre de la categoría de la operación, el nombre de la operación de TensorFlow asociada y el porcentaje de uso de FLOPS de la categoría. Para mostrar (o también ocultar) las 10 operaciones de XLA que más tiempo consumieron en una categoría, haz clic en el triángulo ubicado junto al nombre de la categoría en la tabla.

image

  1. Time. Muestra el porcentaje total de tiempo empleado por todas las operaciones de la categoría. Puedes hacer clic para expandir la entrada y ver un desglose del tiempo empleado por cada operación individual.
  2. 10 operaciones que más consumieron. El interruptor ubicado junto al nombre de la categoría muestra/oculta las 10 operaciones que más tiempo consumieron en la categoría. Si se muestra una entrada de operación de fusión en la lista de operaciones, puedes expandirla con el fin de ver las operaciones que no son de fusión, sino relativas a los elementos.
  3. Operación de TensorFlow (TensorFlow Op). Aquí se muestra el nombre de la operación de TensorFlow asociada a la operación de XLA.
  4. FLOPS Aquí se muestra el uso de FLOPS, es decir, la cantidad de FLOPS expresada como un porcentaje de FLOPS máximos de Cloud TPU. Cuanto más alto sea el porcentaje de uso de FLOPS, más rápido se ejecutarán las operaciones. La celda de la tabla responde a un código de colores: el verde significa uso alto de FLOPS (deseado) y el rojo significa uso bajo de FLOPS (no deseado).
Tarjetas de detalles de la operación

Cuando te seleccionas entrada de la tabla, aparece una tarjeta a la izquierda de la pantalla. En ella se muestran detalles acerca de la operación de XLA o la categoría de operación. Una tarjeta típica luce como se muestra a continuación:

image

  • Nombre y Categoría. Muestra el nombre y la categoría de la operación de XLA destacada.
  • FLOPS utilization (Utilización de FLOPS). Aquí se muestra el uso de FLOPS como un porcentaje del total de FLOPS posible.
  • Expresión (Expression). Aquí se muestra la expresión de XLA que contiene la operación.
  • Memory Utilization (Uso de memoria). Muestra el porcentaje de uso máximo de memoria de tu programa.
  • Diseño (Layout) (Solo para operaciones convolucionales). Muestra la forma y el diseño de un tensor y señala si la forma del tensor se ajusta exactamente a las unidades de la matriz y cómo se rellena la matriz.
Interpreta los resultados

En el caso de las operaciones convolucionales, la utilización de FLOPS de TPU puede ser baja debido a uno de los siguientes motivos, o ambos:

  • relleno (uso parcial de las unidades de la matriz)
  • la operación convolucional depende de la memoria

En esta sección, se interpretan algunos números pertenecientes a otro modelo en que los FLOPS fueron bajos. En este ejemplo, fusión de salida y convolución dominaron el tiempo de ejecución, y existió una gran cantidad de operaciones de vector o escalares que tuvieron FLOPS muy bajos.

Una estrategia de optimización para este tipo de perfil podría ser transformar las operaciones de vector o escalares en operaciones convolucionales.

En el siguiente ejemplo, %convolution.399 muestra menos FLOPS y uso de memoria que %convolution.340 en el ejemplo anterior.

image

Examina el diseño y observa que el tamaño 16 del lote se rellena a 128, y el tamaño 3 del atributo, a 8, lo que indica que solo se usa el 5% de las unidades de la matriz. (El cálculo de esta instancia del porcentaje de uso es (((batch_time * num_of_features) / padding_size ) / num_of_cores). Compara los FLOPS de este ejemplo con %convolution.340 del ejemplo anterior, que se ajusta exactamente a la matriz.

Visor de pod

La herramienta visor de pod proporciona visualizaciones de rendimiento para cada núcleo de un pod y muestra el estado de los canales de comunicación en los núcleos de un pod. El visor de pod puede identificar y destacar potenciales cuellos de botella y áreas que necesitan optimización. La herramienta funciona para pods completos y todos los cortes de pod v2 y v3.

Para mostrar la herramienta visor de pod:

  1. Selecciona Perfil (Profile) en el botón de menú en la parte superior derecha de la ventana de TensorBoard.
  2. Haz clic en el menú Herramientas (Tools) en el lado izquierdo de la ventana y selecciona pod_viewer.

La interfaz de usuario del visor pod incluye lo siguiente:

  1. Un control deslizante de pasos, que te permite seleccionar qué paso deseas examinar.
  2. Un grafo de topología, que visualiza interactivamente tus núcleos de TPU en todo el sistema de TPU.
  3. Un gráfico de vínculos de comunicación, que visualiza los canales de envío y recepción (recv) en el grafo de topología.
  4. Un gráfico de barras de canales de latencia de envío y recepción. Cuando se coloca el cursor sobre una barra de este gráfico, se activan los vínculos de comunicación en el gráfico de vínculos de comunicación. Aparecerá una tarjeta de detalles del canal en la barra de la izquierda, que proporciona información detallada del canal, como el tamaño de los datos transferidos, la latencia y el ancho de banda.
  5. Un gráfico de desglose de pasos, que visualiza un desglose de un paso para todos los núcleos. Este gráfico se puede usar para rastrear los cuellos de botella del sistema y si un núcleo en particular ralentiza el sistema.

image

Control deslizante de pasos

Usa el control deslizante para seleccionar un paso. El resto de la herramienta muestra estadísticas, como el desglose de pasos y los vínculos de comunicación para ese paso.

Grafo de topología

El grafo de topología está organizado de forma jerárquica por host, chip y núcleo. Los rectángulos más pequeños son núcleos de TPU. Dos núcleos juntos indican un chip TPU y cuatro chips juntos indican un host.

image

El grafo de topología también es un mapa de calor, codificado por colores según el porcentaje de tiempo que toma en el paso seleccionado un desglose en particular (por ejemplo, el envío, ingreso, procesamiento de flops altos y demás). En la barra ubicada debajo del grafo de topología (que se muestra en el siguiente gráfico), se muestra una codificación de colores para el uso del núcleo y el chip. El color de los núcleos muestra el uso que va desde el amarillo hasta el azul. Para el cálculo de flops altos, los números más grandes (color más oscuro) indican más tiempo empleado en el cálculo. Para todos los demás desgloses, los números más pequeños (colores más claros) indican tiempos de espera más pequeños. Las áreas con problemas potenciales, o puntos de acceso, se indican cuando un núcleo es más oscuro que los otros.

Haz clic en el selector de menú desplegable junto al nombre del sistema (encerrado en un círculo del diagrama) para elegir el tipo particular de desglose que deseas examinar.

Desplaza el mouse sobre cualquiera de los rectángulos pequeños (núcleos simples) para visualizar información técnica sobre la posición del núcleo en el sistema, su ID global de chip y su nombre de host. La información técnica también incluye la duración de la categoría de desglose seleccionada, por ejemplo los flops altos, y su porcentaje de uso en un paso.

image

Canales de comunicación

Esta herramienta ayuda a visualizar los vínculos de envío y recepción si tu modelo los usa para la comunicación entre núcleos. Si tu modelo contiene operaciones de envío y recepción, puedes usar un selector de ID del canal para seleccionar un ID del canal. Un vínculo entre el núcleo de origen (src) y el núcleo de destino (dst) representa el canal de comunicación. Se procesa en el grafo de topología cuando se coloca el cursor del mouse sobre las barras del gráfico que muestra la latencia de los canales de envío y recepción.

image

En la barra de la izquierda aparece una ficha que te brinda más detalles sobre el canal de comunicación. Una ficha típica presenta este aspecto:

image

  1. Datos transferidos (Data Transferred), que muestra los datos transferidos por el canal de envío y recepción en memibytes (MiB).
  2. Latencia (Latency), que muestra la duración, en microsegundos, desde el inicio del evento de envío hasta el final del evento de recuperación.
  3. BW, que muestra la cantidad de datos transferidos en gibibites (GiB) desde el núcleo de origen al núcleo de destino en la duración del tiempo.
  4. Retardo de envío (Latency), que es la duración desde el comienzo de la recuperación hasta el inicio del envío en microsegundos. Si la operación de recuperación comienza después del comienzo de la operación de envío, el retraso es cero.
  5. Nombres de Hlo (Hlo Names), que muestran los nombres de las operaciones de hlo de XLA asociados con este canal. Estos nombres hlo están asociados con las estadísticas que se muestran en otras herramientas de TensorBoard, como op_profile y memory_viewer.

Gráfico de desglose de pasos

Este gráfico proporciona detalles para cada paso de entrenamiento o evaluación.

El eje x es el ID global de chip y el eje y es el tiempo en microsegundos. En este gráfico, puedes ver en dónde se usa el tiempo en un paso de entrenamiento en particular, dónde están los cuellos de botella y si existe un desequilibrio de carga en los chips.

image

Aparece una ficha en la barra de la izquierda que te brinda más detalles sobre el desglose por pasos. Una ficha típica presenta este aspecto:

image

Los campos de la ficha especifican lo siguiente:

  1. Cálculo de flops altos (High Flops Compute), que es el tiempo empleado en las operaciones (ops) de fusión de salida o convolución.
  2. Cálculo de los flops bajos (Low flops compute), que se calcula con la deducción de todos los demás desgloses de la duración total.
  3. Entrada (Infeed), que es el tiempo que la TPU pasa esperando al host.
  4. Salida (Outfeed), que es el tiempo que el host pasa esperando resultados del TPU.
  5. Sincronización AllReduce (AllReduce sync), que es la parte del tiempo invertido en las operaciones de CrossReplicaSum que esperan para sincronizarse con otros núcleos. Las operaciones CrossReplicaSum calculan la suma entre réplicas.
  6. Cálculo AllReduce (AllReduce compute), que es el tiempo de procesamiento real empleado en las operaciones CrossReplicaSum.
  7. Operaciones de envío de chip a chip (Chip to chip send ops), que es el tiempo empleado en las operaciones de envío.nodo de Cloud TPU
  8. Chip para chip de operaciones de recuperación (Chip to chip recv-done ops), que es el tiempo dedicado a las operaciones de recuperación.

Lector de seguimiento

El lector de seguimiento es una herramienta de análisis del rendimiento de Cloud TPU disponible en Perfil. La herramienta usa el visualizador de perfilado de eventos de seguimiento de Chrome, por lo que solo funciona en el navegador Chrome.

El lector de seguimiento muestra un cronograma que presenta la siguiente información:

  • Duración de las operaciones que ejecutó tu modelo de TensorFlow.
  • La parte del sistema (máquina host o TPU) que ejecutó una operación. Generalmente, la máquina host ejecuta operaciones de entrada, mientras realiza el procesamiento previo de los datos de entrenamiento y los transfiere a la TPU, a la vez que la TPU ejecuta el entrenamiento del modelo real.

El lector de seguimiento te permite identificar problemas de rendimiento en tu modelo y tomar medidas para resolverlos. Por ejemplo, en un nivel alto, puedes identificar si es la entrada o el entrenamiento del modelo lo que ocupa la mayor parte del tiempo. Si desglosas los datos, puedes identificar las operaciones de TensorFlow que más tardan en ejecutarse.

Observa que el lector de seguimiento tiene un límite de 1 millón de eventos por cada Cloud TPU. Si necesitas evaluar más eventos, usa el lector de seguimiento de transmisión en su lugar.

Interfaz del lector de seguimiento

Para abrir el lector de seguimiento, ve a TensorBoard y haz clic en la pestaña Perfil en la parte superior de la pantalla y eligetrace_viewer del menú desplegable Herramientas. Aparece el lector y muestra tu ejecución más reciente:

image

La pantalla contiene los siguientes elementos principales (señalados con números en la imagen):

  1. Menú desplegable de Runs (Ejecuciones). Contiene todas las ejecuciones para las que capturaste información de seguimiento. La vista predeterminada es tu ejecución más reciente, pero puedes abrir el menú desplegable para seleccionar otra ejecución.
  2. Menú desplegable de Herramientas (Tools). Selecciona diferentes herramientas de perfilado.
  3. Menú desplegable de Host. Selecciona un host que contiene un conjunto de Cloud TPU.
  4. Panel de cronograma. Muestra las operaciones que Cloud TPU y la máquina host ejecutaron en el tiempo.
  5. Panel de detalles. Muestra información adicional sobre las operaciones seleccionadas en el panel de cronograma.

Aquí puedes ver el panel de cronograma con más detalle:

image

El panel de cronograma contiene los siguientes elementos:

  1. Barra superior. Contiene varios controles auxiliares.
  2. Eje de tiempo. Muestra el tiempo en relación con el principio del seguimiento.
  3. Etiquetas de pista y sección. Cada sección contiene varias pistas y tiene un triángulo a la izquierda en el que puedes hacer clic a fin de expandir y contraer la sección. Hay una sección para cada elemento de procesamiento del sistema.
  4. Selector de herramientas. Contiene varios elementos para interactuar con el lector de seguimiento.
  5. Eventos. Estos muestran el tiempo durante el cual se ejecutó una operación o la duración de los metaeventos, como los pasos de entrenamiento.
  6. Barra de pestaña vertical. Esta barra no es útil en Cloud TPU. Forma parte del objetivo general de la herramienta de visualizador de seguimiento de Chrome que se usa para distintas tareas de análisis del rendimiento.
Secciones y pistas

El lector de seguimiento contiene las siguientes secciones:

  • Una sección para cada nodo de TPU, etiquetada con el número de chip TPU y del nodo TPU dentro del chip (por ejemplo, "Chip 2: TPU Core 1"). Cada sección de nodo TPU contiene los siguientes puntos:
    • Step (Paso). Muestra la duración de los pasos de entrenamiento que se estaban ejecutando en la TPU.
    • TensorFlow Ops (Operaciones de TensorFlow). Muestra las operaciones de TensorFlow que se ejecutaron en la TPU.
    • XLA Ops (Operaciones de XLA). Muestra las operaciones de XLA que se ejecutan en la TPU. (Cada operación se traduce en una o varias operaciones de XLA. El compilador de XLA traduce las operaciones de XLA en un código que se ejecuta en la TPU).
  • Una sección para los subprocesos que se ejecutan en la CPU de la máquina host, etiquetada como "Subprocesos del host". La sección contiene una pista por cada subproceso de CPU. Nota: Puedes ignorar la información que se muestra junto con las etiquetas de las secciones.
Selector de herramientas de cronograma

Puedes interactuar con la vista de cronograma mediante el selector de herramientas de cronograma en TensorBoard. Puedes hacer clic en una herramienta de cronograma o usar las siguientes combinaciones de teclas para activar y destacar una herramienta. A fin de mover el selector de herramientas de cronograma, haz clic en el área con puntos ubicada en la parte superior y, luego, arrastra el selector hacia donde quieras ubicarlo.

Usa las herramientas de cronograma como se indica a continuación:

Herramienta de selección
Haz clic en un evento para seleccionarlo o arrastra si quieres seleccionar varios eventos. Se mostrará información adicional acerca de los eventos seleccionados (nombre, hora de inicio y duración) en el panel de detalles.

Herramienta de desplazamiento lateral
Arrastra para desplazar la vista del cronograma de forma horizontal y vertical.

Herramienta de zoom
Arrastra hacia arriba para acercar o arrastra hacia abajo si quieres alejar a lo largo del eje horizontal (tiempo). La posición horizontal del cursor del mouse determina el centro alrededor del cual se aplica el zoom.

Nota: La herramienta de zoom tiene un error conocido que provoca que el zoom permanezca activo si sueltas el botón del mouse cuando el cursor está fuera de la vista de cronograma. Si esto sucede, haz un clic rápido en la vista de cronograma para dejar de aplicar el zoom.

Herramienta de sincronización
Arrastra de forma horizontal para marcar un intervalo de tiempo. La duración del intervalo aparece en el eje de tiempo. Para ajustar el intervalo, arrastra sus extremos. A fin de borrar el intervalo, haz clic en cualquier punto dentro de la vista de cronograma.

Observa que el intervalo queda marcado si seleccionas una de las otras herramientas.
Eventos

Los eventos dentro del cronograma se muestran en colores distintos, pero estos no tienen ningún significado específico.

Barra superior del cronograma

La barra superior del panel del cronograma contiene varios controles auxiliares:

image

  1. Mostrar metadatos. No se usa en las TPU.
  2. View Options (Opciones de vista). No se usa en las TPU.
  3. Cuadro de búsqueda. Ingresa texto para buscar todos los eventos cuyos nombres contengan este texto. Haz clic en los botones de flecha ubicados a la derecha del cuadro de búsqueda para navegar por los eventos coincidentes y seleccionar cada uno.
  4. Botón de consola. No se usa en las TPU.
  5. Botón de ayuda. Haz clic para mostrar un resumen de ayuda.
Combinaciones de teclas

A continuación, se detallan las combinaciones de teclas que puedes usar en el lector de seguimiento. Haz clic en el botón de ayuda (?) en la barra superior para ver más combinaciones de teclas.

    w Zoom in
    s Zoom out
    a Pan left
    d Pan right
    f Zoom to selected event(s)
    m Mark time interval for selected event(s)
    1 Activate selection tool
    2 Activate pan tool
    3 Activate zoom tool
    4 Activate timing tool

La tecla f puede ser muy útil. Selecciona un paso y presiona f para hacer zoom en este paso con rapidez.

Eventos característicos

A continuación, se describen algunos tipos de eventos que pueden resultar muy útiles cuando analizas el rendimiento de TPU.

image

  • InfeedDequeueTuple. Esta operación de TensorFlow se ejecuta en una TPU y recibe datos de entrada provenientes del host. Cuando la entrada tarda un tiempo considerable, puede significar que las operaciones de TensorFlow que realizan el procesamiento previo de los datos en la máquina host no pueden mantener el mismo ritmo que la frecuencia de consumo de datos de TPU. Puedes ver los eventos correspondientes en los seguimientos del host que se denominan InfeedEnqueueTuple. Para ver un análisis más detallado de la canalización de entrada, usa la herramienta Analizador de canalización de entrada.

  • CrossReplicaSum. Esta operación de TensorFlow se ejecuta en una TPU y procesa una suma de las réplicas. Debido a que cada réplica corresponde a un nodo TPU distinto, la operación debe esperar a que todos los nodos TPU terminen con un paso. Si esta operación tarda mucho tiempo, tal vez no signifique que la operación de suma en sí sea lenta, sino que hay un nodo TPU a la espera de que otro nodo TPU termine con una entrada de datos lenta.

image

  • Operaciones del conjunto de datos. El visualizador de seguimiento permite visualizar las operaciones del conjunto de datos que se realizan cuando los datos se cargan mediante la API del conjunto de datos. El Iterator::Filter::Batch::ForeverRepeat::Memory en el ejemplo está compilado y corresponde a la operación dataset.map() . Usa el lector de seguimiento para examinar las operaciones de carga a medida que trabajes con la depuración y la reducción de los cuellos de botella en la canalización de entrada.

image

  • Recuperación previa de subprocesos. El uso de dataset.prefetch() para almacenar datos de entrada en búfer puede evitar demoras esporádicas en el acceso a archivos que crean cuellos de botella en la canalización de entrada.
Problemas potenciales

A continuación, se detallan algunos problemas potenciales a los que debes prestar atención cuando uses el lector de seguimiento.

  • Límite de eventos mostrados. El lector de seguimiento muestra 1 millón de eventos como máximo. Si capturaste más eventos, solo se muestra el primer millón; los demás se descartan. Si deseas capturar más eventos de TPU, puedes usar la marca --include_dataset_ops=False para solicitar de forma explícita que capture_tpu_profile excluya las operaciones del conjunto de datos.
  • Eventos muy largos. Los eventos que comiencen antes de que la captura se inicie o que terminen después de que la captura finalice no son visibles en el lector de seguimiento. Por lo tanto, los eventos muy largos pueden perderse.
  • Cuándo iniciar la captura de seguimiento. Asegúrate de comenzar la captura de seguimiento después de verificar que Cloud TPU se esté ejecutando. Si la inicias antes, tal vez solo veas algunos pocos eventos, o ninguno, en el lector de seguimiento. Puedes aumentar el tiempo del perfil con la marca --duration_ms y puedes establecer reintentos automáticos con la marca --num_tracing_attempts . Por ejemplo:

      (vm)$ capture_tpu_profile --tpu=$TPU_NAME
        --logdir=${MODEL_DIR} --duration_ms=60000 --num_tracing_attempts=10
        

Visor de memoria

El lector de memoria te permite visualizar el pico de uso de memoria de tu programa y las tendencias de uso de memoria en todo el ciclo de vida del programa.

La IU del lector de memoria luce como se muestra a continuación:

image

  1. Menú desplegable de Host. Selecciona el host de TPU y los módulos del optimizador de alto nivel (HLO) de XLA que se visualizarán.
  2. Descripción general del uso de la memoria. Muestra la asignación de memoria máxima y el tamaño sin relleno.
  3. Gráfico del espacio de trabajo. Muestra el pico de uso de memoria y el trazado de las tendencias de uso de memoria en todo el ciclo de vida del programa. Si te desplazas sobre un búfer en uno de los gráficos de búferes, se agregará una anotación correspondiente al ciclo de vida del búfer y su tarjeta de detalles.
  4. Gráficos de búferes. Se trata de dos gráficos que muestran la asignación de los búferes en el momento de uso de memoria máximo, que se indica mediante la línea vertical en el trazado de espacio de trabajo. Si te desplazas sobre un búfer en uno de los gráficos, se mostrará la barra de ciclo de vida del búfer en el gráfico de espacio de trabajo y una tarjeta de detalles a la izquierda de la pantalla.
  5. Tarjeta de detalles de asignación del búfer. Muestra los detalles de asignación de un búfer.
Panel de descripción general del uso de la memoria

El panel de descripción del uso de la memoria (panel superior) muestra el nombre del módulo y la asignación de memoria máxima establecida cuando el tamaño total de la asignación de búfer alcanza el máximo. También se muestra el tamaño de la asignación máxima sin rellenar a los efectos de la comparación.

image

Gráfico del espacio de trabajo

Este gráfico muestra el pico de uso de memoria y el trazado de las tendencias de uso de memoria en todo el ciclo de vida del programa. La línea trazada desde la parte superior hasta la parte inferior del gráfico indica el pico de uso de memoria del programa. Este punto determina si un programa cabe o no dentro del espacio de memoria global disponible.

image

Cada punto de la línea superpuesta representa un "punto del programa" en el programa de HLO de XLA como lo programó el compilador. La línea proporciona una representación de los picos que conducen al uso máximo y se alejan de él.

Interacción con los elementos del gráfico de búferes

Cuando te desplazas sobre un búfer que se muestra en uno de los gráficos de búferes, en el gráfico de espacio de trabajo aparece una línea horizontal correspondiente al ciclo de vida del búfer. La línea horizontal es del mismo color que el búfer destacado.

image

El grosor de la línea horizontal indica el tamaño del búfer en relación con el pico de asignación de memoria. La longitud de la línea corresponde a la vida del búfer. Comienza en el momento del programa en que se asignó el espacio de búfer y termina en el punto en que se liberó el espacio.

Gráficos de búferes

Existen dos gráficos que muestran el desglose del uso de memoria en el punto de uso máximo (indicado por la línea vertical en el trazado que está por encima de los gráficos).

image

  • By Program Order (Por orden en el programa). Muestra los búferes de izquierda a derecha en el orden en que estuvieron activos durante la ejecución del programa. Los búferes que estuvieron activos por la mayor cantidad de tiempo se muestran en la parte izquierda del gráfico.

  • By Size (Por tamaño). Muestra los búferes que estuvieron activos durante la ejecución del programa ordenados de forma descendente según el tamaño. Los búferes que tuvieron el mayor impacto en el punto de uso máximo de memoria se muestran en la parte izquierda.

Tarjeta de detalles de asignación de búfer

Cuando te desplazas sobre un búfer que se muestra en uno de los gráficos de búferes, aparece una tarjeta de detalles de asignación de búfer (además de la línea de ciclo de vida que se muestra en el gráfico del espacio de trabajo). Una tarjeta de detalles típica luce como se muestra a continuación:

image

  1. Name. Nombre de la operación de XLA.
  2. Category (Categoría). Categoría de la operación.
  3. Size (Tamaño). Tamaño de la asignación del búfer (incluido el relleno).
  4. Unpadded size (Tamaño sin rellenar). Tamaño de la asignación del búfer sin rellenar.
  5. Expansion (Expansión). Magnitud relativa del tamaño del búfer relleno en comparación con el tamaño sin rellenar.
  6. Extra memory (Memoria adicional). Indica cuánta memoria adicional se usa para rellenar.
  7. Shape (Forma). Describe el rango, tamaño y tipo de datos del arreglo n-dimensional.
  8. TensorFlow op name (Nombre de la operación de TensorFlow). Muestra el nombre de la operación de TensorFlow asociada con la asignación del búfer.
  9. Allocation type (Tipo de asignación). Indica la categoría de asignación del búfer. Los distintos tipos son: Parámetro, Salida, Local del subproceso y Temporal (por ejemplo, la asignación de un búfer dentro de una fusión).
Errores de "falta de memoria"

Si ejecutas un modelo y encuentras un "error de falta de memoria", utiliza el siguiente comando para capturar un perfil de la memoria y visualizarlo en el lector de memoria. Asegúrate de configurar la duración "duration_ms" adecuada de modo que el período de perfilado se superponga con el tiempo de compilación de tu programa. El resultado puede ayudarte a entender qué causó el error.

  (vm)$ capture_tpu_profile --tpu=$TPU_NAME --logdir=${MODEL_DIR} --duration_ms=60000
  

Lector de seguimiento de transmisión

El visualizador de seguimiento de transmisión (trace_viewer) es una herramienta de análisis de rendimiento de Cloud TPU que está disponible para TensorFlow 2.18.0 o versiones posteriores y proporciona procesamientos de seguimiento dinámicos La herramienta usa el visualizador de perfilado de eventos de seguimiento de Chrome, por lo que solo funciona en el navegador Chrome.

Cuando usas capture_tpu_profile para capturar un perfil, se guarda un archivo .tracetable en tu depósito de Google Cloud Storage. El archivo contiene una gran cantidad de eventos de seguimiento que pueden visualizarse tanto en el lector de seguimiento como en el lector de seguimiento de transmisión.

Usar el lector de seguimiento de transmisión

Para usar el visualizador de seguimiento de transmisión, trace_viewer, debes cerrar tu sesión de TensorBoard existente y, luego, reiniciar TensorBoard con la dirección IP de la TPU que deseas examinar. El visualizador de seguimiento de transmisión requiere que TensorBoard realice una llamada de procedimiento remoto de Google (GRPC) a una dirección IP para Cloud TPU. El canal de GRPC no está encriptado.

Puedes encontrar la dirección IP de un host de Cloud TPU en la página de Cloud TPU. Busca tu Cloud TPU y busca la dirección IP en la columna IP interna.

En la VM, ejecuta TensorBoard de la siguiente manera mediante el reemplazo de tpu-ip por tu dirección IP de TPU:

  (vm)$ tensorboard --logdir=${MODEL_DIR} \
    --master_tpu_unsecure_channel=tpu-ip

La herramienta de TensorBoard aparece en la lista desplegable Herramientas.

image

En el cronograma, puedes acercar y alejar la vista para ver los eventos de seguimiento a medida que se cargan en el navegador de manera dinámica.

image

Supervisar el trabajo de Cloud TPU

En esta sección, se describe cómo usar capture_tpu_profile para capturar un perfil único o supervisar tu trabajo de Cloud TPU de forma continua en la interfaz de línea de comandos en tiempo real. Cuando configuras la opción --monitoring_level en 0 (el valor predeterminado), 1 o 2, obtienes un perfil único, supervisión básica o detallada, respectivamente.

Abre una nueva Cloud Shell y ssh en tu VM (reemplaza vm-name en el comando por su nombre de VM):

  (vm)$ gcloud compute ssh vm-name \
  --ssh-flag=-L6006:localhost:6006

En la nueva Cloud Shell, ejecuta capture_tpu_profile con la marca --monitoring_level establecida en 1 o 2, por ejemplo:

  (vm)$ capture_tpu_profile --tpu=$TPU_NAME \
   --monitoring_level=1

Si estableces monitoring_level=1, se produce un resultado similar al siguiente:

    TPU type: TPU v2
    Utilization of TPU Matrix Units is (higher is better): 10.7%

Si estableces monitoring_level=2, se muestra información más detallada:

    TPU type: TPU v2
    Number of TPU Cores: 8
    TPU idle time (lower is better): 0.091%
    Utilization of TPU Matrix Units is (higher is better): 10.7%
    Step time: 1.95 kms (avg), 1.90kms (minute), 2.00 kms (max)
    Infeed percentage: 87.5% (avg). 87.2% (min), 87.8 (max)

Marcas de supervisión

  • --tpu (obligatoria): especifica el nombre de la Cloud TPU que deseas supervisar.
  • --monitoring_level: cambia el comportamiento de capture_tpu_profile de la producción de un perfil único a la supervisión continua básica o detallada. Hay tres niveles disponibles: El Nivel 0 (el predeterminado) produce un perfil único y, luego, se cierra. El Nivel 1 muestra la versión de TPU y su utilización. El Nivel 2 muestra la utilización de TPU, el tiempo inactivo de TPU y la cantidad de núcleos de TPU que se usaron. También proporciona los tiempos de paso máximos, promedio y mínimos en conjunto con el porcentaje de contribución de la entrada.
  • --duration_ms (opcional; el valor predeterminado es 1,000 ms): especifica durante cuánto tiempo se debe perfilar el host de TPU durante cada ciclo. En general, debería ser tiempo suficiente como para capturar al menos los datos de un paso de entrenamiento. 1 segundo captura un paso de entrenamiento en la mayoría de los modelos, pero, si el tiempo de paso de tu modelo es muy grande, puedes establecer el valor en 2x step_time (en ms).
  • --num_queries: especifica en cuántos ciclos ejecutar capture_tpu_profile. Para supervisar tu trabajo de TPU de forma continua, configura el valor en un número alto. Para comprobar el tiempo del paso de tu modelo con rapidez, configura el valor en un número bajo.