Visión general
MLIR, o Multi-Level Intermediate Representation, es un formato de representación y una biblioteca de utilidades de compilación que se encuentra entre la representación del modelo y los compiladores/ejecutores de bajo nivel que generan código específico de hardware.
MLIR es, en esencia, una infraestructura flexible para los compiladores de optimización modernos. Esto significa que consta de una especificación para representaciones intermedias (IR) y un conjunto de herramientas de código para realizar transformaciones en esa representación. (En el lenguaje del compilador, a medida que pasa de representaciones de nivel superior a representaciones de nivel inferior, estas transformaciones se pueden llamar "reducciones")
MLIR está muy influenciado por LLVM y reutiliza descaradamente muchas ideas geniales de él. Posee un sistema de tipos flexible, y permite representar, analizar y transformar gráficos combinando múltiples niveles de abstracción en una misma unidad de compilación. Estas abstracciones incluyen operaciones de TensorFlow, regiones de bucles poliédricos anidados e incluso instrucciones LLVM y tipos y operaciones de hardware fijo.
Esperamos que MLIR sea de interés para muchos grupos, incluidos:
- Investigadores e implementadores de compiladores que buscan optimizar el rendimiento y el consumo de memoria de los modelos de aprendizaje automático
- Fabricantes de hardware que buscan una forma de conectar su hardware a TensorFlow, como TPU, hardware neuronal portátil en teléfonos y otros ASIC personalizados
- Personas que escriben enlaces de lenguaje que quieren aprovechar la optimización de compiladores y la aceleración de hardware.
El ecosistema TensorFlow contiene una serie de compiladores y optimizadores que operan en varios niveles de la pila de software y hardware. Esperamos que la adopción gradual de MLIR simplifique todos los aspectos de esta pila.