Hardware per IA locale: memoria, banda, consumi e dimensionamento

Il 17 dicembre 2024, NVIDIA ha abbassato da 499 a 249 dollari il prezzo della sua scheda di sviluppo Jetson Orin Nano e ha pubblicato un aggiornamento software per gli esemplari già venduti. Nessun componente è cambiato, ma la velocità della memoria è passata da 65 a 102 GB/s. Secondo le misure del costruttore, un modello Llama 3.1 da 8 miliardi di parametri vi genera da allora 19 token al secondo anziché 14. L'episodio riassume la regola che governa l'hardware di un'IA locale: la dimensione e la velocità della memoria contano prima della potenza di calcolo.

Un modello linguistico è un file riletto a ogni parola

Un modello linguistico, il tipo di software che fa funzionare ChatGPT o Le Chat di Mistral, si presenta sotto forma di un file che contiene miliardi di numeri. Si chiamano parametri, o pesi: sono i valori regolati durante l'addestramento, che determinano il modo in cui il modello concatena le parole. Un modello detto « 8B » ne contiene 8 miliardi.

Ogni numero occupa uno spazio che dipende dalla sua precisione. A 16 bit, il formato in cui è distribuita la maggior parte dei modelli, un parametro occupa due byte. Otto miliardi di parametri fanno quindi 16 miliardi di byte, cioè circa 15 gibibyte (GiB, l'unità binaria che mostrano gli strumenti). La documentazione di llama.cpp, un motore di esecuzione libero molto utilizzato per far girare modelli su macchine ordinarie, indica 14,96 GiB per Llama 3.1 8B in questo formato.

Per produrre un token, cioè un frammento di parola, il modello legge la quasi totalità di questi parametri. Poi ricomincia per il token successivo. Un file da 15 GiB viene così riletto decine di volte al secondo mentre la risposta compare. Ne derivano due condizioni. Il file deve stare per intero in una memoria veloce, altrimenti la macchina va a cercare il resto sul disco e la velocità crolla. E la velocità di questa memoria fissa il ritmo della risposta.

Capacità: la memoria in cui il modello deve stare

Un PC classico dispone di due memorie. La memoria RAM serve al processore centrale. La memoria video, o VRAM, è saldata sulla scheda grafica e serve al processore grafico, la GPU. La seconda è molto più veloce, ma più piccola e più costosa. La GeForce RTX 5090, la scheda consumer di fascia più alta di NVIDIA, in commercio dal 30 gennaio 2025 a partire da 1.999 dollari, integra 32 GB di memoria GDDR7. È un tetto: un modello più pesante non sta su una sola scheda.

Altre macchine utilizzano una memoria unificata, un'unica riserva condivisa da processore e GPU. È il caso dei chip Apple. Secondo la scheda tecnica di Apple, il Mac Studio si configura fino a 128 GB con il chip M5 Max e fino a 512 GB con l'M5 Ultra. È anche il principio del DGX Spark di NVIDIA, un apparato di 15 cm di lato e 1,2 kg che riunisce 128 GB di memoria LPDDR5X. NVIDIA lo presenta come in grado di eseguire modelli fino a 200 miliardi di parametri.

Il divario diventa decisivo non appena si punta a un modello di taglia media. Un modello da 70 miliardi di parametri compresso intorno a 4,9 bit per parametro pesa circa 43 GB, secondo il calcolo 70 miliardi × 4,9 ÷ 8. Non entra nei 32 GB di una RTX 5090. Entra in 128 GB di memoria unificata lasciando spazio per il resto.

Banda: ciò che fissa la velocità di scrittura

La banda di memoria è la velocità con cui il chip legge la propria memoria, espressa in gigabyte al secondo. Nella sua guida all'ottimizzazione dell'inferenza, termine che designa l'esecuzione di un modello già addestrato, NVIDIA spiega che la generazione di testo è limitata dalla memoria: la maggior parte del tempo è spesa a trasferire pesi e dati intermedi verso le unità di calcolo, non a calcolare.

Se ne ricava una stima semplice: il numero massimo di token al secondo vale all'incirca la banda divisa per il peso del modello. Il Jetson Orin Nano Super permette di verificarla. Llama 3.1 8B a 4 bit pesa circa 4,6 GB e la scheda legge a 102 GB/s, da cui un tetto teorico di 22 token al secondo. NVIDIA ne misura 19,1, cioè l'87% del tetto. Prima dell'aggiornamento, a 65 GB/s, la misura era 14. La velocità non ha seguito esattamente la banda (37% di aumento a fronte del 57% di banda in più), ma la regola dà il giusto ordine di grandezza.

Le schede dei costruttori indicano le seguenti velocità. Il Jetson Orin Nano Super legge a 102 GB/s e il Jetson AGX Orin, nelle versioni da 32 e 64 GB, a 204,8 GB/s. Il Jetson AGX Thor e il DGX Spark indicano ciascuno 273 GB/s. Il Mac Studio raggiunge 460 o 614 GB/s con l'M5 Max a seconda della configurazione, e 1,2 TB/s con l'M5 Ultra. La RTX 5090 sale a 1.792 GB/s, ma su soli 32 GB.

Queste cifre spiegano una delusione frequente. Una macchina annunciata con una forte potenza di calcolo ma una memoria lenta scrive lentamente. Al contrario, una macchina con calcolo modesto e memoria veloce appare reattiva in conversazione.

Quantizzazione: meno bit per parametro

Se il peso del modello limita la velocità, lo si può ridurre. La quantizzazione consiste nel memorizzare ogni parametro su meno bit, 8 o 4 anziché 16. Il principio ricorda la compressione di una foto in JPEG: si accetta una perdita di precisione in cambio di un file più leggero.

La documentazione di llama.cpp pubblica misure per Llama 3.1 8B. A 16 bit, il file è di 14,96 GiB e la generazione raggiunge 29 token al secondo. Nel formato Q8_0, che usa in media 8,5 bit per parametro, è di 7,95 GiB per 51 token al secondo. Nel formato Q4_K_M, a 4,9 bit in media, scende a 4,58 GiB e sale a 72 token al secondo. Il file è diviso per 3,3 e la velocità di scrittura moltiplicata per 2,5. La lettura della domanda, invece, rallenta un po', da 923 a 822 token al secondo, perché questa fase dipende dal calcolo e la decompressione ne aggiunge.

La perdita di qualità esiste. È tanto più sensibile quanto il modello è piccolo e la compressione forte. I formati vicini a 4 bit, come Q4_K_M, sono diventati il compromesso più comune nelle installazioni locali. Scendere a 2 o 3 bit permette di far stare un modello più grande sulla stessa macchina, con più errori, il che va misurato sui propri compiti prima di adottarlo.

Leggere la domanda e scrivere la risposta: due velocità distinte

Un modello non manipola parole ma token, frammenti di testo di qualche carattere. In francese, una parola comune corrisponde a uno o due token. Il lavoro si svolge in due fasi. Il prefill legge l'intera richiesta, domanda e documenti allegati, trattando i token in parallelo: dipende soprattutto dalla potenza di calcolo. La generazione scrive poi la risposta un token dopo l'altro: dipende dalla banda.

Le misure pubblicate dai contributori di llama.cpp sui chip Apple mostrano la differenza. Su Llama 2 7B a 16 bit, un M4 Max con 40 core grafici legge 923 token al secondo e ne scrive 32. Un M5 Max della stessa configurazione ne legge 3.158 e ne scrive 37. La lettura è moltiplicata per 3,4, la scrittura progredisce del 17%. Tra i due chip, la banda è passata da 546 a 614 GB/s, cioè il 12% in più. La scrittura segue la memoria, la lettura segue il calcolo.

Nell'uso, contano entrambe le cifre. Su una domanda breve si nota solo la generazione, e oltre una quindicina di token al secondo il testo compare più in fretta di quanto lo si legga. Per riassumere un rapporto di 50 pagine, che si può stimare in circa 30.000 token, è il prefill a far attendere: a 900 token al secondo servono poco più di mezzo minuto prima della prima parola, a 3.000 token al secondo una decina di secondi.

Anche il contesto occupa memoria

Il contesto è la quantità di testo che il modello prende in considerazione in un dato momento: la domanda, i documenti forniti, la cronologia dello scambio. Per non ricalcolare tutto a ogni token, il modello conserva risultati intermedi per ogni token già letto. È la cache chiave-valore, o KV cache.

Hugging Face ne fornisce la formula e un esempio. Per Llama 2 7B a 16 bit, ogni token occupa circa 0,5 MB di cache, così che 10.000 token rappresentano quasi 5 GB, un terzo del peso del modello. La guida di NVIDIA giunge allo stesso ordine di grandezza, circa 2 GB per 4.096 token. I modelli più recenti riducono questo costo condividendo una parte di tali dati tra le teste di attenzione, una tecnica detta grouped-query attention. Con le caratteristiche pubblicate di Llama 3.1 8B (32 strati, 8 teste chiave-valore di dimensione 128), la stessa formula dà circa 0,13 MB per token, cioè 1,3 GB per 10.000 token. Quest'ultima cifra è un nostro calcolo.

Questa cache si moltiplica per il numero di conversazioni aperte. Dieci persone che lavorano ciascuna su un documento da 10.000 token con Llama 3.1 8B mobilitano circa 13 GB di cache, oltre ai 4,6 GB del modello. Una macchina da 8 GB che serve questo modello a una persona non lo servirà a un team. I motori di esecuzione recenti sanno comprimere questa cache, come descrive Hugging Face, ma il dimensionamento di partenza resta quello.

CPU, GPU e NPU

La CPU, o processore centrale, è generalista. Esegue poche operazioni alla volta e fa girare un piccolo modello lentamente. La GPU, concepita per il rendering grafico, esegue migliaia di operazioni identiche in parallelo, il che corrisponde al calcolo di una rete neurale. È lei a eseguire oggi la grande maggioranza dei modelli linguistici.

La NPU, o unità di elaborazione neurale, è un circuito specializzato nelle operazioni delle reti neurali e progettato per consumare poco. Microsoft richiede oltre 40 TOPS, cioè 40.000 miliardi di operazioni al secondo, perché un computer possa fregiarsi della denominazione Copilot+ PC. La sua documentazione precisa che molte NPU trattano solo interi a bassa precisione, come l'INT8, e che i modelli devono essere convertiti per girarvi. La NPU è adatta a compiti leggeri e continui, come la traduzione in tempo reale o la sfocatura dello sfondo nelle videoconferenze. Per un modello linguistico, resta soggetta alla banda del resto del chip.

La cifra dei TOPS va quindi letta con prudenza. NVIDIA annuncia 67 TOPS per il Jetson Orin Nano Super precisando che si tratta di TOPS « sparse », una modalità di calcolo che presuppone che una parte delle operazioni possa essere saltata. In modalità densa, la cifra scende a 33. Nessuna delle due dice a che velocità la scheda scriverà una risposta.

Tre taglie di modello, più macchine

Le stime che seguono applicano la regola banda divisa per peso del modello. Sono tetti teorici calcolati da noi a partire dalle schede dei costruttori. La velocità reale resta al di sotto: sul Jetson ne raggiungeva l'87%.

Un modello da 8 miliardi di parametri a 4 bit, circa 4,6 GB, sta su tutte le macchine citate. Il Jetson Orin Nano Super, con 8 GB di memoria e un consumo da 7 a 25 W, lo fa girare a 19 token al secondo misurati, con poco margine per il contesto. Una RTX 5090 avrebbe un tetto vicino a 390 token al secondo. Per una persona, la scheda embarcata basta. Per più utenti simultanei, è la memoria a mancare prima della velocità.

Un modello da 20 a 35 miliardi di parametri pesa da 12 a 21 GB a 4 bit. Sta su una RTX 5090 come su un Jetson AGX Orin da 64 GB. Su quest'ultimo, a 204,8 GB/s, un modello da 20 GB ha un tetto intorno a 10 token al secondo; sulla RTX 5090, intorno a 90.

Un modello da 70 miliardi di parametri a 4 bit, circa 43 GB, non sta su una RTX 5090. Su un DGX Spark a 273 GB/s, il suo tetto è di circa 6 token al secondo. Su un Mac Studio M5 Max a 614 GB/s, di circa 14. Su un M5 Ultra a 1,2 TB/s, di circa 28. La capacità permette di caricare il modello, la banda decide se è piacevole da usare.

Consumi, calore e rumore

Tutta l'elettricità consumata da una macchina finisce in calore. La RTX 5090 ha una potenza grafica totale di 575 W, e NVIDIA richiede un alimentatore di almeno 1.000 W per il PC che la ospita. È l'ordine di grandezza di una piccola stufa elettrica, il cui calore viene evacuato da ventole. All'altro estremo, il Jetson Orin Nano Super funziona tra 7 e 25 W e il Jetson AGX Orin tra 15 e 60 W. Il DGX Spark ha un alimentatore da 240 W per un chip da 140 W, e NVIDIA dichiara 35 dB(A) in funzionamento. Apple indica per il Mac Studio una potenza massima continua di 480 W.

Su un anno, il divario si quantifica. Una macchina che consuma 60 W in continuo usa circa 525 kWh all'anno (60 W × 8.760 ore). A 600 W, sono circa 5.260 kWh. Questi calcoli presuppongono un carico costante, il che sovrastima il consumo reale di una macchina spesso a riposo, ma danno il fattore dieci che separa le due famiglie.

Rumore e calore decidono dove la macchina sarà installata. Un PC dotato di una scheda da gioco di fascia alta è pensato per sessioni di qualche ora in un locale ventilato. Riposto in un armadio, riduce la frequenza per proteggersi, poi si spegne. I moduli Jetson sono progettati per robot e apparecchiature industriali, con intervalli di potenza fissati dal costruttore e un funzionamento prolungato. Questo criterio pesa poco su una scheda tecnica e molto dopo due anni di esercizio.

Dimensionare una macchina con quattro calcoli

Il metodo si articola in quattro passi. Si calcola anzitutto il peso del o dei modelli scelti: numero di parametri moltiplicato per il numero di bit per parametro, diviso per 8. Si aggiunge la cache di contesto, moltiplicata per il numero di conversazioni simultanee attese. Si confronta il totale con la memoria disponibile, mantenendo un margine per il sistema. Si divide infine la banda per il peso del modello per ottenere il tetto di velocità, poi si verificano consumo e rumore in rapporto al luogo di installazione.

Prendiamo un team di dieci persone che vuole un modello da 30 miliardi di parametri a 4 bit per lavorare su documenti da 10.000 token. Il modello pesa circa 18 GB. La cache, a seconda dell'architettura, si colloca tra 2 e 5 GB per utente, cioè da 20 a 50 GB per il team. Serve quindi una macchina da 64 a 128 GB e, in prima approssimazione, almeno 300 GB/s di banda per superare i 15 token al secondo. Queste cifre sono stime; solo prove sulla macchina prevista le confermano.

È questo il criterio che HOMN applica per dimensionare i propri apparati: partire dai modelli e dal numero di utenti, poi ricavarne memoria, velocità e inviluppo termico. Una scheda tecnica che omette la capacità di memoria o la banda non permette di fare questo calcolo, quale che sia il numero di TOPS esposto.

Quanta memoria serve per eseguire un LLM in locale?

Il peso di un modello in byte vale all'incirca il numero di parametri moltiplicato per il numero di bit per parametro, diviso per 8. Un modello da 8 miliardi di parametri pesa circa 16 GB a 16 bit e 4,6 GB a 4 bit. Vi si deve aggiungere la cache di contesto, che cresce con la lunghezza dei documenti e il numero di utenti simultanei.

Perché la banda di memoria conta più della potenza di calcolo per un LLM?

Per scrivere ogni token, il modello rilegge la quasi totalità dei propri parametri in memoria. La velocità di generazione è quindi limitata dalla banda divisa per il peso del modello. La potenza di calcolo conta soprattutto per la lettura di documenti lunghi, detta prefill.

Che cos'è la quantizzazione di un modello di IA?

È la memorizzazione dei parametri su meno bit, per esempio 4 anziché 16. Secondo la documentazione di llama.cpp, Llama 3.1 8B passa così da 14,96 a 4,58 GiB e da 29 a 72 token al secondo sulla macchina di prova. La qualità cala leggermente, e di più sui modelli piccoli.

Un PC con NPU basta per un'IA locale in azienda?

Una NPU è adatta a compiti leggeri, come la trascrizione o un piccolo modello usato da una sola persona. Condivide la memoria e la banda del resto del chip, il che limita la dimensione e la velocità dei modelli linguistici. Per servire un team, contano più la capacità di memoria e la velocità che i TOPS dichiarati.