Panoramica
MLIR, o Multi-Level Intermediate Representation, è un formato di rappresentazione e una libreria di utilità del compilatore che si colloca tra la rappresentazione del modello e compilatori/esecutori di basso livello che generano codice specifico dell'hardware.
MLIR è, in sostanza, un'infrastruttura flessibile per i moderni compilatori ottimizzatori. Ciò significa che è costituito da una specifica per le rappresentazioni intermedie (IR) e da un toolkit di codice per eseguire trasformazioni su tale rappresentazione. (Nel gergo del compilatore, quando si passa da rappresentazioni di livello superiore a rappresentazioni di livello inferiore, queste trasformazioni possono essere chiamate “abbassamenti”)
MLIR è fortemente influenzato da LLVM e riutilizza sfacciatamente molte grandi idee da esso. Ha un sistema di tipi flessibile e consente di rappresentare, analizzare e trasformare grafici combinando più livelli di astrazione nella stessa unità di compilazione. Queste astrazioni includono operazioni TensorFlow, regioni di loop poliedrici nidificati e persino istruzioni LLVM e operazioni e tipi hardware fissi.
Ci aspettiamo che MLIR possa interessare molti gruppi, tra cui:
- Ricercatori e implementatori di compilatori che desiderano ottimizzare le prestazioni e il consumo di memoria dei modelli di machine learning
- Produttori di hardware alla ricerca di un modo per connettere il proprio hardware a TensorFlow, come TPU, hardware neurale portatile nei telefoni e altri ASIC personalizzati
- Persone che scrivono associazioni linguistiche che desiderano trarre vantaggio dall'ottimizzazione dei compilatori e dall'accelerazione hardware.
L'ecosistema TensorFlow contiene una serie di compilatori e ottimizzatori che operano a più livelli dello stack software e hardware. Ci aspettiamo che la graduale adozione di MLIR semplifichi ogni aspetto di questo stack.