Dialetos MLIR

Visão geral

Para separar diferentes alvos de hardware e software, o MLIR possui “dialetos”, incluindo:

  • TensorFlow IR, que representa tudo o que é possível nos gráficos do TensorFlow.
  • XLA HLO IR, que foi projetado para aproveitar as vantagens das capacidades de compilação do XLA (com saída para, entre outras coisas, TPUs).
  • Um dialeto afim experimental, que se concentra em representações e otimizaçõ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 GPU e CPU através do LLVM.
  • TensorFlow Lite, que se traduzirá na execução de código em plataformas móveis.

Cada dialeto consiste em um conjunto de operações definidas que possuem invariantes colocadas sobre elas, como: “Este é um operador binário e as entradas e saídas têm os mesmos tipos”.

Adicionando ao MLIR

O MLIR não possui uma lista fixa/integrada de operações globalmente conhecidas (sem “intrínsecas”). Os dialetos podem definir tipos totalmente personalizados, e é assim que o MLIR pode modelar coisas como o sistema de tipo IR LLVM (que possui agregados de primeira classe), abstrações de domínio importantes para aceleradores otimizados para ML, como tipos quantizados, e até mesmo os sistemas do 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, você deve criar um novo dialeto e as reduções entre o dialeto TensorFlow Graph e seu dialeto. Isso facilita o caminho para fabricantes de hardware e compiladores. Você pode até direcionar dialetos em diferentes níveis no mesmo modelo; os otimizadores de nível superior respeitarão as partes desconhecidas do IR e esperarão por um nível inferior para lidar com isso.