Dialetos MLIR

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.