Panoramica
Per separare diversi target hardware e software, MLIR ha “dialetti”, tra cui:
- TensorFlow IR, che rappresenta tutto ciò che è possibile nei grafici TensorFlow.
- XLA HLO IR, progettato per sfruttare le capacità di compilazione di XLA (con output, tra le altre cose, su TPU).
- Un dialetto affine sperimentale, che si concentra su rappresentazioni e ottimizzazioni poliedriche .
- LLVM IR, che ha una mappatura 1:1 tra esso e la rappresentazione stessa di LLVM, consentendo a MLIR di emettere codice GPU e CPU tramite LLVM.
- TensorFlow Lite, che si tradurrà nell'esecuzione del codice su piattaforme mobili.
Ogni dialetto è costituito da un insieme di operazioni definite su cui sono posizionate delle invarianti, come: "Questo è un operatore binario e gli input e gli output hanno gli stessi tipi".
Aggiunta a MLIR
MLIR non ha un elenco fisso/integrato di operazioni conosciute a livello globale (nessun "intrinseco"). I dialetti possono definire tipi interamente personalizzati, che è il modo in cui MLIR può modellare cose come il sistema di tipi IR LLVM (che ha aggregati di prima classe), astrazioni di dominio importanti per acceleratori ottimizzati per ML come i tipi quantizzati e persino i sistemi di tipi Swift o Clang (che sono costruiti attorno ai nodi di dichiarazione Swift/Clang) in futuro.
Se desideri connettere un nuovo compilatore di basso livello, creerai un nuovo dialetto e gli abbassamenti tra il dialetto di TensorFlow Graph e il tuo dialetto. Ciò spiana la strada ai produttori di hardware e compilatori. Puoi anche scegliere come target dialetti a diversi livelli nello stesso modello; gli ottimizzatori di livello superiore rispetteranno le parti sconosciute dell'IR e attenderanno che un livello inferiore le gestisca.