MLIR

Descripción general

MLIR, o representación intermedia de niveles múltiples, es un formato de representación y una biblioteca de utilidades de compilación que se ubica 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 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 se pasa de representaciones de nivel superior a representaciones de nivel inferior, estas transformaciones pueden denominarse "reducciones")

MLIR está muy influenciado por LLVM y descaradamente reutiliza muchas ideas geniales de él. Tiene 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 operaciones y tipos de hardware fijos.

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.
  • Los fabricantes de hardware 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 lenguajes y quieren aprovechar la optimización de los compiladores y la aceleración del hardware.

El ecosistema TensorFlow contiene varios compiladores y optimizadores que operan en múltiples niveles de la pila de software y hardware. Esperamos que la adopción gradual de MLIR simplifique todos los aspectos de esta pila.

Diagrama general de MLIR