Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Arquitectura XLA

¿Por qué construimos XLA?

Teníamos varios objetivos para que XLA funcionara con TensorFlow:

  • Mejora la velocidad de ejecución. Compile subgrafías para reducir el tiempo de ejecución de operaciones de corta duración para eliminar la sobrecarga del tiempo de ejecución de TensorFlow, fusione las operaciones canalizadas para reducir la sobrecarga de memoria y se especialice en formas de tensor conocidas para permitir una propagación constante más agresiva.

  • Mejora el uso de la memoria. Analice y programe el uso de memoria, en principio eliminando muchos búferes de almacenamiento intermedio.

  • Reduzca la dependencia de operaciones personalizadas. Elimine la necesidad de muchas operaciones personalizadas mejorando el rendimiento de las operaciones de bajo nivel fusionadas automáticamente para que coincida con el rendimiento de las operaciones personalizadas que se fusionaron a mano.

  • Reduce la huella móvil. Elimine el tiempo de ejecución de TensorFlow compilando de antemano el subgrafo y emitiendo un par de archivos de objeto / encabezado que se puede vincular directamente a otra aplicación. Los resultados pueden reducir la huella de la inferencia móvil en varios órdenes de magnitud.

  • Mejora la portabilidad. Haga que sea relativamente fácil escribir un nuevo back-end para hardware novedoso, en cuyo punto una gran parte de los programas TensorFlow se ejecutarán sin modificaciones en ese hardware. Esto contrasta con el enfoque de especialización de operaciones monolíticas individuales para hardware nuevo, que requiere que los programas TensorFlow se reescriban para hacer uso de esas operaciones.

¿Cómo funciona XLA?

El lenguaje de entrada a XLA se llama "HLO IR", o simplemente HLO (Optimizador de alto nivel). La semántica de HLO se describe en la página Operación semántica . Es más conveniente pensar en HLO como un compilador IR .

XLA toma gráficos ("cálculos") definidos en HLO y los compila en instrucciones de máquina para varias arquitecturas. XLA es modular en el sentido de que es fácil ubicarlo en un backend alternativo para apuntar a una arquitectura HW novedosa . El backend de la CPU para x64 y ARM64, así como el backend GPU NVIDIA están en el árbol de origen de TensorFlow.

El siguiente diagrama muestra el proceso de compilación en XLA:

XLA viene con varias optimizaciones y pases de análisis que son independientes del objetivo, como CSE , fusión de operación independiente del objetivo y análisis de búfer para asignar memoria de tiempo de ejecución para el cálculo.

Después del paso independiente del objetivo, XLA envía el cálculo de HLO a un back-end. El backend puede realizar más optimizaciones de nivel HLO, esta vez teniendo en cuenta información específica y necesidades específicas. Por ejemplo, el backend de la GPU XLA puede realizar operaciones de fusión beneficiosas específicamente para el modelo de programación de GPU y determinar cómo dividir el cálculo en flujos. En esta etapa, los backends también pueden combinar ciertas operaciones o combinaciones de las mismas con llamadas a la biblioteca optimizadas.

El siguiente paso es la generación de código específico del objetivo. Los backends de CPU y GPU incluidos con XLA usan LLVM para IR de bajo nivel, optimización y generación de código. Estos backends emiten el LLVM IR necesario para representar el cálculo de XLA HLO de manera eficiente, y luego invocan LLVM para emitir código nativo de este LLVM IR.

El backend GPU actualmente soporta GPU NVIDIA a través del backend LLVM NVPTX; El backend de la CPU admite múltiples ISA de CPU.