Descripción general
Para separar diferentes objetivos de hardware y software, MLIR tiene "dialectos", que incluyen:
- TensorFlow IR, que representa todo lo posible en gráficos de TensorFlow.
- XLA HLO IR, que está diseñado para aprovechar las capacidades de compilación de XLA (con salida, entre otras cosas, a TPU).
- Un dialecto afín experimental, que se centra en representaciones y optimizaciones poliédricas .
- LLVM IR, que tiene un mapeo 1:1 entre él y la propia representación de LLVM, lo que permite a MLIR emitir código de GPU y CPU a través de LLVM.
- TensorFlow Lite, que se traducirá en la ejecución de código en plataformas móviles.
Cada dialecto consta de un conjunto de operaciones definidas a las que se les colocan invariantes, como: "Este es un operador binario, y las entradas y salidas tienen los mismos tipos".
Agregar a MLIR
MLIR no tiene una lista fija/incorporada de operaciones conocidas globalmente (no tiene “intrínsecas”). Los dialectos pueden definir tipos completamente personalizados, que es como MLIR puede modelar cosas como el sistema de tipos IR LLVM (que tiene agregados de primera clase), abstracciones de dominio importantes para aceleradores optimizados para ML como tipos cuantificados, e incluso los sistemas de tipos Swift o Clang (que se construyen alrededor de nodos de declaración Swift/Clang) en el futuro.
Si desea conectar un nuevo compilador de bajo nivel, deberá crear un nuevo dialecto y las reducciones entre el dialecto de TensorFlow Graph y su dialecto. Esto allana el camino para los fabricantes de hardware y compiladores. Incluso puedes apuntar a dialectos en diferentes niveles en el mismo modelo; los optimizadores de nivel superior respetarán las partes desconocidas del IR y esperarán a que un nivel inferior las maneje.