Dialectes MLIR

Aperçu

Pour séparer les différentes cibles matérielles et logicielles, MLIR dispose de « dialectes », notamment :

  • TensorFlow IR, qui représente tout ce qui est possible dans les graphiques TensorFlow.
  • XLA HLO IR, conçu pour tirer parti des capacités de compilation de XLA (avec sortie, entre autres, sur des TPU).
  • Un dialecte affine expérimental, qui se concentre sur les représentations polyédriques et les optimisations.
  • LLVM IR, qui a un mappage 1:1 entre lui et la propre représentation de LLVM, permettant à MLIR d'émettre du code GPU et CPU via LLVM.
  • TensorFlow Lite, qui se traduira par l'exécution de code sur les plates-formes mobiles.

Chaque dialecte se compose d'un ensemble d'opérations définies sur lesquelles sont placés des invariants, comme : « Ceci est un opérateur binaire, et les entrées et sorties ont les mêmes types. »

Ajout à MLIR

MLIR n'a pas de liste fixe/intégrée d'opérations mondialement connues (pas de « intrinsèques »). Les dialectes peuvent définir des types entièrement personnalisés, c'est ainsi que MLIR peut modéliser des choses comme le système de types IR LLVM (qui possède des agrégats de première classe), les abstractions de domaine importantes pour les accélérateurs optimisés pour le ML comme les types quantifiés, et même les systèmes de types Swift ou Clang (qui sont construits autour des nœuds de déclaration Swift/Clang) à l'avenir.

Si vous souhaitez connecter un nouveau compilateur de bas niveau, vous créerez un nouveau dialecte et les abaissements entre le dialecte TensorFlow Graph et votre dialecte. Cela facilite la tâche des fabricants de matériel et de compilateurs. Vous pouvez même cibler des dialectes à différents niveaux dans le même modèle ; les optimiseurs de niveau supérieur respecteront les parties inconnues de l'IR et attendront qu'un niveau inférieur les gère.