Visão geral
Para separar diferentes destinos de hardware e software, o MLIR tem “dialetos”, incluindo:
- TensorFlow IR, que representa todas as coisas possíveis nos gráficos do TensorFlow.
- XLA HLO IR, que é projetado para tirar proveito das capacidades de compilação do XLA (com saída para, entre outras coisas, TPUs).
- Um dialeto experimental afim, que se concentra em otimizações e representações poliédricas .
- LLVM IR, que possui um mapeamento 1: 1 entre ele e a própria representação do LLVM, permitindo que o MLIR emita código de GPU e CPU através do LLVM.
- TensorFlow Lite, que se traduzirá em execução de código em plataformas móveis.
Cada dialeto consiste em um conjunto de operações definidas que têm invariantes colocados neles, como: “Este é um operador binário, e as entradas e saídas têm os mesmos tipos.”
Adicionando ao MLIR
O MLIR não tem uma lista fixa / integrada de operações globalmente conhecidas (sem “intrínsecos”). Os dialetos podem definir tipos inteiramente personalizados, que é como o MLIR pode modelar coisas como o sistema de tipo LLVM IR (que tem agregados de primeira classe), abstrações de domínio importantes para aceleradores otimizados de ML como tipos quantizados e até mesmo os sistemas de tipo Swift ou Clang (que são construídos em torno de nós de declaração Swift / Clang) no futuro.
Se você deseja conectar um novo compilador de baixo nível, deve criar um novo dialeto e as reduções entre o dialeto TensorFlow Graph e seu dialeto. Isso suaviza o caminho para fabricantes de hardware e compiladores. Você pode até atingir dialetos em níveis diferentes no mesmo modelo; os otimizadores de nível superior respeitarão as partes desconhecidas do IR e aguardarão um nível inferior para lidar com isso.