MLIR

Przegląd

MLIR, czyli wielopoziomowa reprezentacja pośrednia, to format reprezentacji i biblioteka narzędzi kompilatora, która znajduje się pomiędzy reprezentacją modelu a kompilatorami/wykonawcami niskiego poziomu, które generują kod specyficzny dla sprzętu.

MLIR jest w istocie elastyczną infrastrukturą dla nowoczesnych kompilatorów optymalizujących. Oznacza to, że składa się ze specyfikacji reprezentacji pośrednich (IR) i zestawu narzędzi kodu do wykonywania transformacji tej reprezentacji. (W żargonie kompilatora, gdy przechodzisz z reprezentacji wyższego poziomu do reprezentacji niższego poziomu, transformacje te można nazwać „obniżeniami”)

MLIR pozostaje pod silnym wpływem LLVM i bezwstydnie wykorzystuje z niego wiele wspaniałych pomysłów. Posiada elastyczny system typów i umożliwia reprezentowanie, analizowanie i przekształcanie wykresów łączących wiele poziomów abstrakcji w tej samej jednostce kompilacji. Te abstrakcje obejmują operacje TensorFlow, zagnieżdżone regiony pętli wielościennych, a nawet instrukcje LLVM oraz ustalone operacje i typy sprzętowe.

Oczekujemy, że MLIR zainteresuje wiele grup, m.in.:

  • Badacze i realizatorzy kompilatorów chcący zoptymalizować wydajność i zużycie pamięci w modelach uczenia maszynowego
  • Producenci sprzętu szukający sposobu na podłączenie swojego sprzętu do TensorFlow, takiego jak TPU, przenośny sprzęt neuronowy w telefonach i inne niestandardowe układy ASIC
  • Osoby piszące powiązania językowe, które chcą skorzystać z optymalizacji kompilatorów i akceleracji sprzętowej.

Ekosystem TensorFlow zawiera wiele kompilatorów i optymalizatorów, które działają na wielu poziomach stosu oprogramowania i sprzętu. Oczekujemy, że stopniowe przyjęcie MLIR uprości każdy aspekt tego stosu.

Schemat poglądowy MLIR