Descripción general
Para separar diferentes objetivos de hardware y software, MLIR tiene "dialectos", que incluyen:
- TensorFlow IR, que representa todo lo posible en los gráficos de TensorFlow.
- XLA HLO IR, que está diseñado para aprovechar las capacidades de compilación de XLA (con salida a, entre otras cosas, TPU).
- Un dialecto afín experimental, que se centra en optimizaciones y representaciones 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 código en ejecución en plataformas móviles.
Cada dialecto consta de un conjunto de operaciones definidas que tienen invariantes colocadas, como: "Este es un operador binario, y las entradas y salidas tienen los mismos tipos".
Añadiendo a MLIR
MLIR no tiene una lista fija / incorporada de operaciones conocidas a nivel mundial (sin "intrínsecos"). Los dialectos pueden definir tipos completamente personalizados, que es cómo MLIR puede modelar cosas como el sistema de tipo LLVM IR (que tiene agregados de primera clase), abstracciones de dominio importantes para aceleradores ML optimizados como tipos cuantificados, e incluso los sistemas de tipo Swift o Clang (que se construyen alrededor de los nodos de declaración Swift / Clang) en el futuro.
Si desea conectar un nuevo compilador de bajo nivel, debe 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 puede 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 lo maneje.