Przegląd
Aby oddzielić różne cele sprzętowe i programowe, MLIR ma „dialekty”, w tym:
- TensorFlow IR, który reprezentuje wszystko, co jest możliwe na wykresach TensorFlow.
- XLA HLO IR, który został zaprojektowany tak, aby wykorzystać możliwości kompilacji XLA (z wyjściem między innymi do TPU).
- Eksperymentalny dialekt afiniczny, który koncentruje się na reprezentacjach wielościennych i optymalizacjach.
- LLVM IR, który ma mapowanie 1:1 pomiędzy sobą a własną reprezentacją LLVM, umożliwiając MLIR emisję kodu GPU i procesora poprzez LLVM.
- TensorFlow Lite, który przełoży się na uruchamianie kodu na platformach mobilnych.
Każdy dialekt składa się z zestawu zdefiniowanych operacji, na których umieszczone są niezmienniki, np.: „To jest operator binarny, a wejścia i wyjścia mają ten sam typ”.
Dodanie do MLIR
MLIR nie ma ustalonej/wbudowanej listy operacji znanych na całym świecie („wewnętrznych”). Dialekty mogą definiować całkowicie niestandardowe typy, w ten sposób MLIR może modelować takie rzeczy, jak system typów LLVM IR (który ma agregaty pierwszej klasy), abstrakcje domen ważne dla akceleratorów zoptymalizowanych pod kątem uczenia maszynowego, takich jak typy kwantowane, a nawet systemy typu Swift lub Clang (które są budowane wokół węzłów deklaracji Swift/Clang) w przyszłości.
Jeśli chcesz podłączyć nowy kompilator niskiego poziomu, utworzysz nowy dialekt i obniżenia między dialektem TensorFlow Graph a twoim dialektem. To wygładza ścieżkę dla twórców sprzętu i kompilatorów. W tym samym modelu można nawet kierować dialekty na różnych poziomach; optymalizatory wyższego poziomu będą szanować nieznane części środowiska IR i czekać, aż niższy poziom się nimi zajmie.