Timeline
Chat
Prospettiva

AI engine

Da Wikipedia, l'enciclopedia libera

AI engine
Remove ads

AI engine è un'architettura computazionale creata da AMD (ufficialmente, da Xilinx, acquisita da AMD nel 2022[1]). È comunemente usata in applicazioni di algebra lineare[2], come moltiplicazioni tra matrici, intelligenza artificiale[3][4] , analisi di segnali[5], e, più in generale, computazione ad alte prestazioni, ovvero High-Performance Computing[6][7]. Il primo prodotto a contenere AI engine sono le architetture Versal[8], che combinano componenti scalari, riconfigurabili ed adattivi, tutti connessi attraverso una Network on Chip (NoC)[9].

Thumb
Esempio di chip su una scheda di accelerazione.

Gli AI engine si sono evoluti nel tempo, adattati al continuo cambiamento delle applicazioni moderne, trovando spazio in applicazioni di intelligenza artificiale. Tuttavia, l'architettura base resta la stessa, con un singolo engine che integra un processore scalare e vettoriale. Quest'ultimo, offre le capacità Single Instruction Multiple Data (SIMD)[10][11] tipiche degli AI engine. In termini di prodotto, oggi gli AI engine si trovano integrati con diverse architetture, quali FPGA, GPU e CPU, creando una serie di architetture applicate in svariati domini[12][13][14].

"AI" nel nome "AI engine" non è acronimo di "artificial intelligence" o "adaptable intellignent". Infatti, la stessa compagnia, all'interno di un forum, ha specificatamente dichiarato che AI non era pensato come un acronimo[15].

Remove ads

Storia

Riepilogo
Prospettiva

Rilasciati da Xilinx, una compagnia americana già nota per gli sviluppi con architetture FPGA, gli AI engine hanno come obiettivo iniziale l'accelerazione di applicazioni legate all'analisi di segnali e, più generalmente, tutte quelle applicazioni che possono beneficiare del parallelismo di dati. Inizialmente, gli AI engine erano integrati assieme ad un componente riconfigurabile nelle piattaforme Versal[8]. I primi sistemi, VCK190 e VCK5000, contengono 400 AI engine, collegati ad una FPGA di tipo VC1902. Per collegare tutti i componenti, l'architettura si basa su un nuovo modello di Network on Chip[9].

Nel 2022, il progetto AI engine ha subito un'evoluzione, quando Xilinx è stata ufficialmente acquisita da AMD[1], un'altra compagnia americana già famosa sul mercato delle architetture computazionali. Dopo l'acquisizione, gli AI engine sono stati integrati con altri sistemi computazionali con lo scopo di accelerare un insieme più ampio di applicazioni. Infatti, sebbene potenti, le architetture Versal hanno richiesto un tempo notevole di apprendimento, che ne ha rallentato la diffusione[12]. Per questo motivo, AMD e svariati ricercatori hanno rivolto i loro sforzi anche alla creazione di strumenti e software per semplificare lo sviluppo su AI engine, migliorandone la programmabilità[16][17][18][19].

Consci della sempre maggiore importanza dell'intelligenza artificiale in applicazioni moderne, nel 2023 AMD annuncia una seconda generazione di AI engine, gli AI engine ML (AIE-ML)[20]. Tale generazione presenta un maggiore supporto a tipi di dati tipici in ambito AI, come i bfloat16[21], nonchè un'aumentata memoria per supportare un maggior numero di computazioni intermedie[22]. Da questa generazione, gli AI engine sono stati integrati anche con CPU e GPU, all'interno di architetture denominate Ryzen AI. In questi sistemi, gli AI engine si trovano spesso riferiti come "Compute Tile", all'interno di un componente chiamato XDNA[23]. Tale componente però, presenta anche altri tipo di unità[16][24], chiamati rispettivamente "Memory Tile" e "Shim Tile"[23]. La prima generazione di XDNA è integrata all'interno dei processori Ryzen AI Phoenix. Assieme a questa architettura, AMD ha anche lavorato allo sviluppo di Riallto, uno strumento per semplificare la programmazione di questi dispositivi, fornendo un'interfaccia python per esplicitare la connessione e l'istanziazione dei vari componenti[25].

Similmente, verso la fine del 2023, inizio 2024, AMD ha annunciato la seconda generazione di XDNA, denominata XDNA 2, all'interno della serie di processori Ryzen AI Strix[26][27]. A differenza della prima generazione, questa seconda generazione offre un numero maggiore di componenti di calcolo, cercando di accelerare specificatamente applicazioni di machine learning e large language models. Assieme a questa architettura, AMD propone anche Ryzen AI SW, uno strumento utile per semplificare l'accelerazione della fase di inferenza dei modelli di machine learning, mappandola sui vari componenti del Ryzen AI[23].

In fine, dal momento che applicazioni di neural processing e deep learning sono sempre più diffuse, ricercatori ed industrie hanno iniziato a riferirsi alle architetture XDNA come Neural Processing Units (NPUs). Tuttavia, il termine include anche tutte quelle architetture pensate per il deep learning[28] e tante aziende, come Huawei[29] e Tesla[30], propongono una alternativa proprietaria[29][30].

Remove ads

Architettura hardware

Riepilogo
Prospettiva

Singolo AI engine

Thumb
Dettaglio: singolo componente AI engine di prima generazione, che presenta un'unità vettoriale, una scalare, una memoria da 32KB e svariate connessioni.

Un singolo AI engine è una architettura VLIW[11][31] a 7 strade con capacità sia scalari che vettoriali, che abilitano l'esecuzione in parallela di più operazioni per ciclo di clock. L'architettura include una unità vettoriale con dimensione 128 bit. Questa unità vettoriale offre capacità di tipo Single Instruction Multiple Data (SIMD). In aggiunta, l'architettura offre anche capacità scalari per controllo e logica sequenziale, e un insieme di unità di lettura/scrittura per gli accessi in memoria. La dimensione massima di un registro vettoriale è 1024 bit, opportunamente divisi in un numero di elementi che dipende dal tipo dell'elemento stesso. Ad esempio, se un singolo elemento è 32 bit, il vettore potrà contenere 32 elementi[31] .

Nella prima generazione, un AI engine ha una memoria di 32KB per salvare dati ed una memoria in sola lettura di 16KB destinata al salvataggio delle istruzioni[31].

Un AI engine è un'architettura schedulata staticamente. Come riportato in letteratura, avere un tipo di architettura che gestisce l'assegnamento del carico di lavoro a tempo di compilazione può causare un notevole aumento della dimensione del codice. Questo è particolarmente critico in architetture con una memoria limitata, quali gli AI engine, e richiede svariate ottimizzazioni manuali[19][11].

Il principale linguaggio di programmazione per un singolo AI engine è C++, usato sia per scrivere la funzione accelerata dall'architettura che per specificare le connessioni tra i vari AI engine[32]. Ciò nonostante, diversi strumenti di sviluppo possono supportare diversi linguaggi di programmazione[19].

Prima generazione - componente AI engine nelle architetture Versal

Thumb
Più AI engine di prima generazione connessi tra loro in un unico macro componente.

La prima generazione di sistemi Versal presenta un gruppo di 400 AI engine connessi attraverso tre interfacce principali, chiamate "cascade", "memory" e stream. Ognuna rappresenta un possibile meccanismo di comunicazione tra AI engine[6].

Ogni AI engine ha una memoria di 32KB che può essere estesa fino ad un massimo di 128 sfruttando la memoria degli AI engine circostanti. Questo però inabilita quegli AI engine, impedendone l'utilizzo come elementi di calcolo[8][19].

Ogni AI engine può eseguire una funzione indipendentemente dagli altri, o anche più di una funzione mediante l'uso di "time multiplexing". La struttura utilizzata per descrivere l'istanziazione ed il collegamento di più AI engine è chiamata AIE graph, o grafo degli AI engine. Il modello di programmazione suggerito da AMD prevede la scrittura in C++ di questo file. Tuttavia, diversi strumenti di sviluppo possono supportare linguaggi diversi per migliorare prestazioni o programmabilità[19][24].

Per compilare l'applicazione, lo strumento principale è "l'AIE compiler", un compilatore proprietario della casa produttrice che esegue in modo sia la fase di istanziazione che di collegamento degli AI engine[33].

Dal momento che la prima generazione di AI engine è integrata all'interno di architetture Versal, è possibile anche sfruttare connessioni dirette con il componente riconfigurabile e la Network on Chip. Tali connessioni dirette però sono limitate e devono essere esplicitate sia nel grafo degli AI engine che, a livello di sistema, nella fase di system-design[19][7].

Seconda generazione - gli AI engine ML

La seconda generazione degli AI engine, denominata AI engine ML (AIE-ML), presenta alcune differenze rispetto alla generazione precedente, con lo scopo di accelerare specificatamente applicazioni di machine learning, migliorando sia prestazioni che efficienza[22].

Un AIE-ML possiede circa il doppio della densità computazionale di un AIE di prima generazione, una migliore banda di memoria, un supporto nativo per tipi di dati tipici quando si esegue inferenza di modelli di machine learning, come int8 e blfoat. Grazie a tutte queste ottimizzazioni, le AIE-ML presentano TOPS per watt tre volte superiori rispetto al primo livello di AI engine[3].

Pubblicazioni recenti confermano che gli AIE-ML sono più scalabili, beneficiando della maggiore memoria e potenza computazionale[3], diventando maggiormente idonei all'accelerazione della fase di inferenza in applicazioni di machine learning[22].

Stando alla documentazione ufficiale della compagnia produttrice, è possibile delineare una serie di similarità e differenze tra le due architetture[22].

Ulteriori informazioni similarità tra AIE-ML ed AIE, differenze tra AIE-ML ed AIE ...

XDNA 1

Thumb
Diagramma semplificato di un AMD XDNA NPU, come lo si trova in un processore 7040[24]

L'XDNA è il componente hardware che mette assieme tre principali componenti[24][23]:

  • Le unità di computazione, o Compute Tile, che sono responsabili dell'esecuzione, vettoriale o scalare, delle operazioni. Questi componenti sono, di fatto, gli AIE-ML.
  • Le unità di memoria, o Memory Tile, che hanno il ruolo di "cache". Essi possono distribuire i dati alle varie unità di computazione applicando dei pattern specifici.
  • Le unità di interconnessione, o Shim Tile, che gestiscono l'accesso in memoria, accedendo ai dati che vengono poi inviati a Memory e Compute Tile.

Il componente XDNA 1 è combinato assieme a CPU e GPU in un'unica architettura, i Ryzen AI di tipo Phoenix, specializzata per l'accelerazione dell'inferenza in applicazioni legate all'intelligenza artificiale[24].

XDNA 2

La seconda generazione di XDNA, denominata XDNA 2, è rilasciata all'interno dell'architettura Ryzen AI Strix, e stando alla documentazione ufficiale del produttore, è un'architettura specializzata per large language models[23].

Remove ads

Strumenti e paradigma di programmazione

Riepilogo
Prospettiva

Lo strumento ufficialmente supportato da AMD per lo sviluppo di AI engine è Vitis, che sfrutta tutta la gamma di sotto-componenti già utilizzata per l'accelerazione FPGA[32][34][7].

Vitis offre supporto per sviluppo sia hardware che software in un ambiente di sviluppo unico. Esso include anche sintesi ad alto livello (High-Level Synthesis), sviluppo RTL con verilog o vhdl, e librerie specifiche di dominio. Sfruttando questo strumento, è possibile eseguire applicazioni accelerate su architetture eterogenee[35].

Thumb
Logo del software AMD Vivado

Nelle architetture più moderne, tuttavia, l'approccio suggerito non prevede il flusso di sviluppo classico usato da Vitis. Infatti, si preferisce sviluppare i singoli componenti sfruttando Vitis, per poi collegarli sfruttando Vivado[36].

Vivado, anch'esso parte dell'infrastruttura di AMD a seguito dell'acquisizione di Xilinx, è principalmente utilizzato per lo sviluppo RTL e per l'integrazione di singoli componenti, denominati IP. Nelle ultime generazioni di architetture, di fatti, il flusso di sviluppo prevede la creazione di singoli IP tramite il linguaggio di sviluppo hardware scelto e l'integrazione di più IP tramite Vivado. Proprio in questa fase di integrazione è possibile collegare anche il componente rappresentante gli AI engine[36].

Per quanto riguarda gli AI engine, il principale linguaggio di sviluppo, sia per la singola funzione eseguita dal componente che per la dichiarazione di connessioni tra più unità AI engine, è C++[32].

Strumenti di sviluppo dal mondo della ricerca

Riepilogo
Prospettiva

Parallelamente allo sviluppo di strumenti e flussi di programmazione da parte di AMD, ricercatori, università e AMD stessa hanno lavorato ad altri strumenti di sviluppo con lo scopo di migliorare la programmabilità, le prestazioni, o semplificare lo sviluppo quando ci si concentra su un sottoinsieme di applicazioni[19][37][24][18].

Di seguito, alcuni degli strumenti principali vengono brevemente descritti[38][19][37][18]:

  • IRON è uno strumento sviluppato da AMD in collaborazione con vari ricercatori. Il codice sorgente di IRON è pubblico, permettendo a ricercatori ed esperti esterni di suggerire modifiche e migliorie[38]. Dal punto di vista dell'utente, IRON permette attraverso un'interfaccia Python di dichiarare i componenti AI engine e le loro connessioni. Successivamente, il codice python è tradotto in MLIR, una rappresentazione intermedia che viene poi convertita nell'eseguibile per AI engine. All'interno di IRON è possibile utilizzare due diversi compilatori: sia un compilatore interno di AMD, presente anche all'interno di Vitis, sia il compilatore Peano, il cui codice è pubblico[24].
  • ARIES ( l'acronimo sta per "An Agile MLIR-Based Compilation Flow for Reconfigurable Devices with AI engine") è un paradigma di programmazione ad alto livello che sfrutta anch'esso la rappresentazione intermedia MLIR. L'idea di ARIES è partire da un codice Python che specifica non solo le connessioni ma anche il codice da eseguire sulla singola unità di computazione. Successivamente, un componente si occupa di vettorizzare il codice Python, trasformandolo in un codice C++ per AI engine[19].
  • EA4RCA è un tool di sviluppo specializzato per algoritmi di tipo "Communication-Avoiding". Esso introduce un ambiente di sviluppo che abbraccia l'eterogeneità dei dispositivi Versal, enfatizzando le performance degli AI engne e fornendo astrazione per l'implementazione di comunicazione ad alte prestazioni tra i componenti. Lo scopo principale di EA4RCA è sfruttare la comunicazione regolare di questi algoritmi per migliorare le prestazioni[37].
  • CHARM è un framework per comporre svariati acceleratori basati su moltiplicazioni tra matrici. Esso include anche un modello analitico che guida l'esplorazione dello spazio dei parametri per determinare la miglior configurazione dell'acceleratore[18].
Remove ads

Voci correlate

Note

Bibliografia

Collegamenti esterni

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads