NITRO: Un Gioco che Cambia le Regole per gli LLM sugli NPU
NITRO colma il divario per far girare LLM su NPU, migliorando prestazioni ed efficienza.
Anthony Fei, Mohamed S. Abdelfattah
― 9 leggere min
Indice
- Che cos'è NITRO?
- Cosa ha di speciale Meteor Lake?
- La sfida con gli LLM
- Il ruolo di OpenVINO
- Un'occhiata dentro OpenVINO
- Come funziona NITRO
- Riscrivere i modelli PyTorch
- Estendendo le KV-Caches
- Spostare gli embedding rotativi
- Conversione efficiente dei modelli
- L'importanza della denominazione
- La struttura della directory del modello
- Mettere tutto insieme per l'inferenza
- Benchmarking delle prestazioni
- Gestione degli errori e sfide
- NITRO vs. Altre librerie
- Guardando avanti
- Conclusione
- Fonte originale
- Link di riferimento
I modelli di linguaggio di grandi dimensioni (LLM) sono come le superstar del mondo tech in questi giorni. Aiutano con tutto, dai chatbot a vari compiti di ricerca. Se hai mai chiacchierato con un assistente virtuale, allora hai incontrato un LLM. Una delle aree più interessanti nella tecnologia in questo momento è la creazione di hardware che si integra perfettamente con questi modelli. Uno di questi hardware è chiamato Neural Processing Unit (NPU).
Nel 2023, un'importante azienda di chip ha lanciato il processore Intel Core Ultra, chiamato Meteor Lake. Questo processore ha tre componenti principali: un'unità centrale di elaborazione (CPU), un'unità di elaborazione grafica (GPU) e un NPU. Ma c'è un problema: il software disponibile per questi NPU non supporta le esigenze dinamiche degli LLM così com'è. Quindi i ricercatori stanno cercando un modo per far funzionare meglio questa cosa. Qui entra in gioco il concetto di NITRO.
Che cos'è NITRO?
NITRO è un framework progettato per aiutare gli LLM a funzionare sugli NPU. È costruito utilizzando Python e lavora insieme al framework OpenVINO di Intel. Pensalo come l'assistente amichevole che assicura che gli LLM possano generare testo e tenere conversazioni in modo efficiente su questo hardware specializzato.
Cosa ha di speciale Meteor Lake?
Il processore Meteor Lake è come un coltellino svizzero, con diversi "tile" che servono a diverse funzioni. Questi tile includono aree per il calcolo, la grafica, il controllo del sistema e la gestione dell'input/output. Se stai immaginando una città affollata con diversi quartieri, non sei lontano!
Tra questi tile, l'NPU si distingue. È specializzato nell'esecuzione di compiti di intelligenza artificiale e lo fa con un basso consumo energetico. Per farti un'idea, l'NPU può gestire un numero impressionante di operazioni al secondo, e questo è notevole per un dispositivo così piccolo. Questo lo rende adatto per compiti come l'esecuzione di LLM. Tuttavia, affronta anche alcune sfide, principalmente perché può lavorare solo con modelli statici. Immagina di dover assemblare un puzzle dove alcuni pezzi continuano a cambiare forma mentre cerchi di incastrarli!
La sfida con gli LLM
Gli LLM operano in modo dinamico; pensali come a una ricetta in cui continui ad aggiungere ingredienti mentre cucini. Creano costantemente nuovi dati durante il processo di generazione del testo. Sfortunatamente, il requisito del modello statico della maggior parte degli NPU non si sposa bene con questo processo di aggiunta ingredienti.
Così, i ricercatori si stanno grattando la testa, cercando di trovare un modo per far funzionare questi modelli dinamici sull'hardware che li supporta. È simile a cercare di inserire un perno quadrato in un buco rotondo-frustrante e spesso impossibile.
Il ruolo di OpenVINO
OpenVINO di Intel è un toolkit che aiuta gli sviluppatori a distribuire modelli di machine learning su vari dispositivi Intel, incluse CPU, GPU e NPU. Presenta i modelli in un formato specifico. Tuttavia, quando si tratta di supportare gli LLM, OpenVINO ha alcune limitazioni.
I modelli che gestisce sono principalmente per operazioni statiche, il che significa che ogni parte del modello deve avere una forma definita. Quando pensi all'architettura transformer che usano gli LLM, questo crea un certo livello di difficoltà. I transformer funzionano adattando la loro struttura in base all'input che ricevono, ma il requisito statico impedisce quella flessibilità.
Un'occhiata dentro OpenVINO
OpenVINO è composto da file di modello specifici che dettagli come il modello opera. Ogni modello è simile a un progetto, con nodi che rappresentano varie operazioni (come spostare dati) e collegamenti che li connettono. Anche se questa struttura serve bene a molte applicazioni di machine learning, è meno che ideale per gli LLM a causa della loro natura dinamica.
In termini più semplici, se OpenVINO fosse un'aula, ogni nodo rappresenterebbe un bambino in attesa del suo turno per parlare. Ma poiché gli LLM continuano ad aggiungere nuovi 'studenti' (cioè, dati) ogni secondo, l'organizzazione è un po' caotica.
Come funziona NITRO
Adesso vediamo come NITRO lavora per colmare questo divario. Il framework ha alcuni principi guida per renderlo efficace. Prima di tutto, mira a rimanere fedele al design di OpenVINO, il che significa che lascia che OpenVINO faccia la maggior parte del lavoro pesante mentre NITRO interviene per compiti che richiedono aiuto aggiuntivo.
In secondo luogo, il framework è progettato per essere flessibile. Con così tante idee che girano nella ricerca, è importante che NITRO possa adattarsi e gestire vari compiti. Infine, mantenere tutto facile da comprendere e mantenere è una priorità. Dopotutto, nessuno vuole affrontare un groviglio di codice che richiede un diploma per essere decifrato.
Riscrivere i modelli PyTorch
Per far funzionare bene gli LLM con gli NPU, i ricercatori spesso riscrivono modelli esistenti. Immagina di prendere un romanzo classico e adattarlo in un fumetto facile da leggere. Questo è quello che sta succedendo qui. Riscrivendo questi modelli, possono essere convertiti in un formato compatibile con OpenVINO.
Una modifica coinvolge la semplificazione degli input nei modelli. Molti modelli esistenti usano configurazioni complesse, il che può portare a conversioni non riuscite. Sembrando tutto, diventa molto più facile passare da un modello PyTorch a un formato OpenVINO IR.
Estendendo le KV-Caches
Il sistema Key-Value Cache negli LLM, che memorizza dati per un accesso rapido, può diventare complicato quando dobbiamo mantenere forme statiche. NITRO risolve questo estendendo le cache per garantire che ci sia sempre spazio extra disponibile. È un po' come riservare alcune sedie extra a una cena-non si sa mai quando potrebbero arrivare più ospiti!
Spostare gli embedding rotativi
Un'altra modifica riguarda gli embedding rotativi, che sono tecniche matematiche che aiutano gli LLM a comprendere il contesto. NITRO sposta questi embedding nell'area di lavoro principale invece di gestirli separatamente. Questo aggiustamento aiuta a semplificare il processo e mantiene tutto più organizzato.
Conversione efficiente dei modelli
Una volta riscritti e impostati correttamente i modelli, sono pronti per la conversione in OpenVINO IR. Ma c'è un problema: i modelli più grandi possono rapidamente superare i limiti di memoria, come accatastare troppi libri su uno scaffale. Per contrastare questo, i ricercatori usano un metodo chiamato "chunking".
Questa tecnica prevede di suddividere il modello in pezzi più piccoli, che possono essere elaborati uno alla volta invece di cercare di gestire tutto in una volta. Questo è un modo efficiente per gestire le risorse e garantire transizioni riuscite da modelli PyTorch a OpenVINO.
L'importanza della denominazione
Mentre i modelli vengono convertiti, la denominazione è cruciale. Proprio come avere un armadietto ben organizzato, avere nomi chiari per ogni parte del modello rende tutto più facile da tenere traccia. Quando i nodi hanno nomi descrittivi, semplifica il processo di trovare e gestire i dati durante il funzionamento del modello.
La struttura della directory del modello
Dopo la conversione, ogni modello è organizzato in una struttura di directory ordinata. Questa organizzazione è essenziale per garantire che tutto sia facilmente accessibile e ben definito. Se hai mai cercato di orientarti in un armadio disordinato, apprezzerai il valore di una configurazione in ordine!
Mettere tutto insieme per l'inferenza
Una volta che tutto è a posto, NITRO imposta una pipeline standard per generare testo. Qui è dove funziona come una macchina ben oliata, prendendo input e producendo un output testuale coerente. Il framework astrarrà la complessità in modo che gli sviluppatori non debbano preoccuparsi dei dettagli più complicati.
Benchmarking delle prestazioni
I ricercatori sono stati impegnati a testare quanto bene questi modelli funzionano sugli NPU rispetto ad altri hardware come CPU e GPU. Hanno impostato un laptop equipaggiato con il processore Meteor Lake per condurre vari test, monitorando quanto velocemente i diversi modelli possono generare testo.
Anche se la GPU potrebbe essere la campionessa in termini di velocità pura, l'NPU mostra molte promesse, specialmente per modelli di dimensioni medie. I risultati rivelano che, mentre l'NPU è generalmente più lento della GPU, ha comunque vantaggi in termini di efficienza energetica. È come scegliere tra una macchina sportiva sgargiante e una berlina affidabile e a basso consumo-dipende da cosa valorisi di più!
Gestione degli errori e sfide
Nonostante tutti i progressi, ci sono dei problemi lungo il cammino. Quando si testano varie configurazioni, i risultati non corrispondono sempre alle aspettative. In particolare, sono sorti problemi con alcune tecniche di compressione dei pesi, e compaiono errori quando vengono usate determinate combinazioni.
Ma non temere! Questo fa parte del viaggio nello sviluppo tecnologico. Proprio come uno chef a volte deve modificare la propria ricetta, i ricercatori devono adattare i propri metodi per superare queste sfide.
NITRO vs. Altre librerie
Confrontando NITRO con altre librerie di accelerazione per NPU, i risultati mostrano che NITRO offre prestazioni significativamente migliori. L'approccio di NITRO porta a tempi di inferenza più rapidi, superando le alternative.
Tuttavia, ci sono ancora aree in cui ulteriori sviluppi possono aiutare a migliorare l'efficienza e le prestazioni complessive.
Guardando avanti
Anche se NITRO ha fatto grandi progressi nell'abilitare gli LLM a funzionare sugli NPU, c'è ancora spazio per miglioramenti. I lavori futuri potrebbero concentrarsi sul perfezionamento ulteriore degli embedding rotativi o sullo sviluppo di nuovi metodi per semplificare l'intero processo di inferenza.
L'obiettivo finale rimane quello di fare degli NPU una scelta preferita per eseguire gli LLM, soprattutto data la loro potenzialità in termini di efficienza energetica. Essere attenti al consumo è più importante ora che mai, e gli NPU potrebbero essere il miglior candidato per soddisfare quel requisito.
Conclusione
Nel grande schema della tecnologia, gli sviluppatori affrontano sfide costanti nel tenere il passo con i progressi degli LLM e dell'hardware. Il lavoro continuo con framework come NITRO mostra promesse per future integrazioni e ottimizzazioni. Man mano che la ricerca continua e vengono apportati miglioramenti, la speranza è di vedere un mondo in cui dispositivi efficienti dal punto di vista energetico possano gestire il lavoro pesante dell'IA avanzata senza fatica.
Quindi, mentre il viaggio ha le sue buche, la strada davanti sembra luminosa per gli NPU, gli LLM e l'intera comunità tech. Dopotutto, si dice che la necessità sia la madre dell'invenzione, e con le crescenti richieste di sistemi più intelligenti, possiamo aspettarci innovazioni entusiastiche all'orizzonte!
Titolo: NITRO: LLM Inference on Intel Laptop NPUs
Estratto: Large Language Models (LLMs) have become essential tools in natural language processing, finding large usage in chatbots such as ChatGPT and Gemini, and are a central area of research. A particular area of interest includes designing hardware specialized for these AI applications, with one such example being the neural processing unit (NPU). In 2023, Intel released the Intel Core Ultra processor with codename Meteor Lake, featuring a CPU, GPU, and NPU system-on-chip. However, official software support for the NPU through Intel's OpenVINO framework is limited to static model inference. The dynamic nature of autoregressive token generation in LLMs is therefore not supported out of the box. To address this shortcoming, we present NITRO (NPU Inference for Transformers Optimization), a Python-based framework built on top of OpenVINO to support text and chat generation on NPUs. In this paper, we discuss in detail the key modifications made to the transformer architecture to enable inference, some performance benchmarks, and future steps towards improving the package. The code repository for NITRO can be found here: https://github.com/abdelfattah-lab/nitro.
Autori: Anthony Fei, Mohamed S. Abdelfattah
Ultimo aggiornamento: Dec 15, 2024
Lingua: English
URL di origine: https://arxiv.org/abs/2412.11053
Fonte PDF: https://arxiv.org/pdf/2412.11053
Licenza: https://creativecommons.org/licenses/by/4.0/
Modifiche: Questa sintesi è stata creata con l'assistenza di AI e potrebbe presentare delle imprecisioni. Per informazioni accurate, consultare i documenti originali collegati qui.
Si ringrazia arxiv per l'utilizzo della sua interoperabilità ad accesso aperto.
Link di riferimento
- https://github.com/goodfeli/dlbook_notation
- https://github.com/abdelfattah-lab/nitro
- https://docs.openvino.ai/2024/index.html
- https://huggingface.co/docs/optimum/en/intel/index
- https://github.com/intel/intel-npu-acceleration-library
- https://github.com/intel/intel-npu-acceleration-library/blob/main/src/bindings.cpp
- https://github.com/meta-llama/llama-models/blob/main/models/llama3/reference_impl/model.py
- https://github.com/abdelfattah-lab/nitro/tree/main/nitro/pytorch_model
- https://github.com/intel/linux-npu-driver/releases
- https://github.com/openvinotoolkit/nncf
- https://docs.openvino.ai/2024/get-started/install-openvino/install-openvino-genai.html