Dialetti MLIR

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.