Visão geral
MLIR, ou Multi-Level Intermediate Representation, é um formato de representação e biblioteca de utilitários de compilador que fica entre a representação do modelo e compiladores/executores de baixo nível que geram código específico de hardware.
O MLIR é, em sua essência, uma infraestrutura flexível para compiladores de otimização modernos. Isso significa que consiste em uma especificação para representações intermediárias (IR) e um kit de ferramentas de código para realizar transformações nessa representação. (Na linguagem do compilador, à medida que você passa de representações de nível superior para representações de nível inferior, essas transformações podem ser chamadas de “rebaixamentos”)
O MLIR é altamente influenciado pelo LLVM e reutiliza descaradamente muitas grandes ideias dele. Possui um sistema de tipos flexível, e permite representar, analisar e transformar grafos combinando vários níveis de abstração em uma mesma unidade de compilação. Essas abstrações incluem operações do TensorFlow, regiões de loop poliédrico aninhadas e até instruções LLVM e operações e tipos de hardware fixos.
Esperamos que o MLIR seja do interesse de muitos grupos, incluindo:
- Pesquisadores e implementadores de compiladores que buscam otimizar o desempenho e o consumo de memória de modelos de aprendizado de máquina
- Fabricantes de hardware que procuram uma maneira de conectar seu hardware ao TensorFlow, como TPUs, hardware neural portátil em telefones e outros ASICs personalizados
- Pessoas que escrevem associações de linguagem que desejam aproveitar a otimização de compiladores e a aceleração de hardware.
O ecossistema TensorFlow contém vários compiladores e otimizadores que operam em vários níveis da pilha de software e hardware. Esperamos que a adoção gradual do MLIR simplifique todos os aspectos dessa pilha.