Aperçu
MLIR, ou Multi-Level Intermediate Representation, est un format de représentation et une bibliothèque d'utilitaires de compilateur qui se situe entre la représentation du modèle et les compilateurs/exécuteurs de bas niveau qui génèrent du code spécifique au matériel.
MLIR est, en son cœur, une infrastructure flexible pour les compilateurs d'optimisation modernes. Cela signifie qu'il se compose d'une spécification pour les représentations intermédiaires (IR) et d'une boîte à outils de code pour effectuer des transformations sur cette représentation. (Dans le langage du compilateur, lorsque vous passez de représentations de niveau supérieur à des représentations de niveau inférieur, ces transformations peuvent être appelées "abaissements")
MLIR est fortement influencé par LLVM et en réutilise sans vergogne de nombreuses idées géniales. Il dispose d'un système de typage flexible, et permet de représenter, d'analyser et de transformer des graphes combinant plusieurs niveaux d'abstraction dans la même unité de compilation. Ces abstractions incluent les opérations TensorFlow, les régions de boucle polyédrique imbriquées et même les instructions LLVM et les opérations et types matériels fixes.
Nous nous attendons à ce que le MLIR intéresse de nombreux groupes, notamment :
- Chercheurs et implémenteurs de compilateurs cherchant à optimiser les performances et la consommation de mémoire des modèles d'apprentissage automatique
- Les fabricants de matériel à la recherche d'un moyen de connecter leur matériel à TensorFlow, tels que les TPU, le matériel neuronal portable dans les téléphones et d'autres ASIC personnalisés
- Les personnes qui écrivent des liaisons de langage qui souhaitent tirer parti de l'optimisation des compilateurs et de l'accélération matérielle.
L'écosystème TensorFlow contient un certain nombre de compilateurs et d'optimiseurs qui fonctionnent à plusieurs niveaux de la pile logicielle et matérielle. Nous nous attendons à ce que l'adoption progressive du MLIR simplifie chaque aspect de cette pile.