Tema

Machine learningdi

Le evoluzioni: MoE e cache di chiavi e valori

Il pezzo sull’attenzione ha chiuso su un prezzo: il confronto fra posizioni cresce col quadrato della finestra, e il pezzo sul Transformer ha ereditato quel costo. Questo pezzo racconta le due risposte che il settore ha trovato, e sono di natura diversa. La prima riduce il calcolo per token: al posto di attivare tutti i parametri a ogni passo, si attivano pochi esperti su tanti - la miscela di esperti, MoE nel gergo. La seconda riduce il calcolo ripetuto: il motore che genera memorizza ciò che ha già calcolato, per non rifarlo - la cache di chiavi e valori. Sono due ingranaggi con casi documentati alle spalle, e portano con sé una distinzione che la serie deve fissare: che cosa sta nei pesi, che cosa fa il motore, e che cosa non c’entra con l’addestramento.

La scala densa ha un tetto

Un modello denso paga tutti i suoi parametri a ogni token: raddoppiare i parametri raddoppia il calcolo, in addestramento e in generazione. La scala ha un tetto, e il tetto si aggira attivando a ogni token solo i parametri che servono, mentre i totali crescono.

Tutto quello che abbiamo montato finora è un modello denso: ogni token attraversa tutti i parametri - tutti i blocchi, tutte le teste, tutti i pesi - a ogni passo, sia in addestramento sia in generazione. Il costo è proporzionale ai parametri: un modello di cento miliardi di parametri paga cento miliardi di moltiplicazioni a ogni token. Se la qualità cresce con la scala, come l’esperienza del settore suggerisce, raddoppiare i parametri raddoppia anche il costo - in addestramento e in ogni risposta.

Il tetto non è teorico: molti dei modelli più grandi sono diventati misti proprio per questo. L’osservazione che apre la porta è semplice: non tutti i parametri servono a ogni token. Una parola corrente non ha bisogno delle conoscenze specializzate che servono a una parola rara; un ragionamento matematico non usa le stesse competenze di una conversazione quotidiana. Se il modello potesse attivare solo la parte dei pesi che gli serve, il calcolo per token resterebbe piccolo mentre i parametri totali crescono.

La miscela di esperti: un router sceglie gli esperti

Il MoE sostituisce l’MLP di ogni blocco con una schiera di esperti e un router che instrada ogni token a pochi di loro: i parametri totali crescono, il calcolo per token resta quello di pochi esperti.

La miscela di esperti applica quell’osservazione dentro il blocco del Transformer. Al posto dell’MLP - che ogni token attraversa per intero - il blocco contiene una schiera di esperti, tanti MLP indipendenti, e un router: una piccola rete che, per ogni token, decide a quali esperti mandarlo. Il token viene elaborato solo dagli esperti scelti, e le loro uscite si sommano. Il resto degli esperti resta a riposo per quel token.

Il router instrada il token a due esperti su quattro A sinistra il token e il router: il token entra nel router, che lo instrada a due esperti su quattro. A destra quattro esperti: i primi due evidenziati come attivi, gli altri due a riposo. Sotto, l'uscita somma il contributo dei due esperti attivi. I parametri di tutti e quattro stanno in memoria; il calcolo usa solo i due attivi. x IL TOKEN ROUTER SCEGLIE GLI ESPERTI ESPERTO 1 ATTIVO ESPERTO 2 ATTIVO ESPERTO 3 A RIPOSO ESPERTO 4 A RIPOSO USCITA
Il token entra nel router, che lo instrada a pochi esperti: nella figura due su quattro, evidenziati. Gli altri restano a riposo. Tutti i parametri stanno in memoria; il calcolo per token usa solo gli attivi.

I numeri dei modelli veri rendono il meccanismo concreto. DeepSeek-V3 dichiara nel suo rapporto tecnico 671 miliardi di parametri totali, di cui 37 attivi per ogni token; Qwen3, nell’architettura MoE più grande del suo rapporto, 235 miliardi totali, 22 attivi. Il rapporto fra i due numeri misura l’efficienza del disegno: in DeepSeek-V3 lavora circa un parametro su diciotto, in Qwen3 circa uno su undici. I rapporti tecnici mostrano una qualità vicina a quella di un modello denso di pari parametri totali, a una frazione del costo per token.

Il prezzo del MoE sta nei parametri totali: tutti gli esperti devono stare in memoria - il modello occupa lo spazio di tutti i suoi parametri anche se ogni token ne tocca pochi - e dove mandare ogni token è una decisione delicata. Se il router mandasse sempre gli stessi token agli stessi esperti, gli altri non imparerebbero mai; l’addestramento deve correggere questo squilibrio. L’instradamento è il punto in cui il MoE si gioca la sua efficienza.

La cache di chiavi e valori: la memoria del passato

La cache non sta nei pesi e non esiste durante l’addestramento: è il motore che, durante la generazione, memorizza le chiavi e i valori già calcolati per non ricalcolarli - e può farlo perché il passato è fisso.

La seconda risposta al conto riguarda il momento in cui il modello genera: qui va fissata una distinzione che il lettore della scheda di un modello deve avere chiara. Le chiavi e i valori - le proiezioni che il pezzo sull’attenzione ha introdotto - si calcolano con i pesi, ma la cache di chiavi e valori non è nei pesi: è una memoria del motore, che esiste soltanto durante l’esecuzione.

Durante l’addestramento la cache non esiste: la sequenza si elabora tutta in parallelo, ogni posizione calcola al volo le proprie chiavi e i propri valori, e a ogni passo dell’addestramento si rifà tutto da capo con i pesi aggiornati. La memoria che l’addestramento tiene da parte serve alla retropropagazione, ed è un’altra cosa. Durante la generazione, invece, il modello produce un token alla volta, e qui scatta il fatto che rende la cache possibile: il passato è fisso. La maschera causale del pezzo sull’attenzione garantisce che una posizione già scritta non guarderà mai il futuro - le sue chiavi e i suoi valori non cambieranno più. Il motore può quindi calcolarli la prima volta e tenerli da parte, rileggendoli a ogni passo successivo: non deve ricalcolare l’intera sequenza a ogni token.

La cache è memoria, non calcolo, e il suo costo si paga in memoria: cresce con la lunghezza della finestra di contesto - un contesto lungo vuol dire molte chiavi e molti valori da tenere. È il rovescio del costo quadratico del pezzo sull’attenzione: lì il costo stava nei confronti, qui sta nello spazio che i confronti già fatti occupano. La serie sugli agenti ha già misurato questo fatto dal lato economico: la crescita del contesto e il suo riuso sono concetti del pezzo sull’impatto computazionale, che teneva il conto; qui c’è l’ingranaggio che lo governa.

Il cacciavite della serie qui mostra un proprio limite, dichiarato: il generate di nanoGPT non ha la cache. A ogni token richiama il modello sull’intera sequenza e ricalcola tutto da zero - è lento, ma chiaro: mostra il calcolo per intero. La cache è esattamente il risparmio che il codice didattico omette per leggibilità.

Potete vederli entrambi al lavoro, il router e la cache: il widget qui sotto instrada la vostra frase a due esperti su sei (con regole semplici e dichiarate, non col router vero: quello che si vede è la meccanica), e poi genera la stessa frase passo passo, mostrando la differenza fra ricalcolare tutto e ricordare.

Due pannelli, due risposte al conto. Sopra: il router sceglie gli esperti. Sotto: la cache ricorda.

1 · IL ROUTER SCEGLIE GLI ESPERTI

2 · LA CACHE RICORDA

A ogni passo il modello scrive un token. Senza cache ricalcola da capo tutte le posizioni già scritte; con la cache ne calcola una sola e rilegge le altre.

Le attenzioni raggruppate: due risposte allo stesso conto

La cache cresce con le teste: ogni testa ha le sue chiavi e i suoi valori. Le risposte documentate nei pesi sono due - GQA fa condividere chiavi e valori a gruppi di teste, MLA li comprime in un vettore latente condiviso - e una terza sta nel motore: la quantizzazione della cache al volo.

La cache ha una dimensione che la fa crescere in fretta: le teste. Ogni testa di attenzione memorizza le proprie chiavi e i propri valori, e la cache è proporzionale al numero di teste. Ridurre la cache senza toccare la qualità è stato un problema aperto, e ha prodotto due risposte documentate, entrambe pubblicate con i pesi aperti - il prossimo pezzo ne farà il caso di scuola della scheda che si può verificare.

La prima è la GQA - grouped query attention, l’attenzione a domande raggruppate: invece di una testa per chiavi e valori, gruppi di teste li condividono. Meno chiavi e valori da memorizzare, cache più piccola, qualità che i suoi autori mostrano vicina a quella dell’attenzione piena. È la scelta che Qwen dichiara nel suo rapporto tecnico.

La seconda è la MLA - multi-head latent attention, l’attenzione latente multi-testa: chiavi e valori vengono compressi in un vettore latente condiviso e ricostruiti al bisogno. La cache memorizza il vettore compresso, molto più piccolo dell’originale. È la scelta che DeepSeek introduce nel rapporto di DeepSeek-V2 e porta nel V3.

Il problema è lo stesso - la cache che cresce con le teste - e le soluzioni pubblicate sono due: la serie può spiegarle perché i rapporti e i pesi sono aperti; per GPT e Claude, che non documentano l’architettura, non potrebbe.

La terza via non tocca i pesi, e per questo è del motore: la cache si può quantizzare al volo, comprimendo ogni chiave e ogni valore a pochi bit mentre si scrivono. TurboQuant mostra fin dove si può arrivare: 3,5 bit per canale senza perdita misurabile, 2,5 con una degradazione marginale - dai sedici bit di partenza, una cache quattro volte e mezza più piccola, con una garanzia quasi ottimale sulla distorsione. Il contrasto anticipa il bilancio della prossima sezione: GQA e MLA stanno nei pesi e si scelgono addestrando; la quantizzazione della cache sta nel motore, e si accende senza riaddestrare nulla.

Il bilancio: pesi, motore e addestramento

Per leggere la scheda di un modello servono tre livelli: l’architettura decide quanto costa la cache, il motore decide come gestirla, e l’addestramento non c’entra.

Il quadro completo ha tre livelli, e il lettore che li confonde legge male le schede dei modelli. Il primo è l’architettura, che sta nei pesi: il MoE decide quanti parametri attivare per token, la GQA e la MLA decidono quanto è grande la cache per testa. Il secondo è il motore, il software che esegue il modello: la cache è sua - la alloca, la riempie e decide se usarla, e due motori possono gestirla in modo diverso con gli stessi pesi. Il terzo è l’addestramento: la cache non c’è, e i parametri attivi del MoE sono una scelta di architettura, non una proprietà dei dati.

Sono i tre livelli su cui la serie agenti ha tenuto il conto dei costi: l’architettura decide il conto per token, il motore decide la memoria, l’addestramento decide la qualità. Il prossimo pezzo metterà i modelli veri fianco a fianco - densi e misti, documentati e muti - e insegnerà a leggere la loro scheda con questi tre livelli in testa.

I concetti che questo articolo introduce

Cinque voci coprono le due risposte al conto: la scala densa e il suo tetto, la miscela di esperti con l’instradamento, la cache del motore e le attenzioni raggruppate.

Concetto Ambito Che cos’è Si lega a
Modello denso machine-learning Il modello che attiva tutti i suoi parametri a ogni token, in addestramento e in generazione: il costo per token è proporzionale alla taglia è il punto di partenza che la miscela di esperti modifica; è la forma del blocco del Transformer dei pezzi precedenti
Miscela di esperti machine-learning L’architettura che sostituisce l’MLP del blocco con una schiera di esperti e un router: i parametri totali crescono, il calcolo per token usa solo gli esperti scelti modifica il blocco del Transformer; usa l’instradamento; distingue parametri totali da parametri attivi
Instradamento machine-learning La decisione del router su quali esperti attivare per ogni token: se si sbilancia, gli esperti trascurati non imparano è il meccanismo della miscela di esperti; va corretto nell’addestramento
Cache di chiavi e valori machine-learning La memoria che il motore riempie durante la generazione con le chiavi e i valori già calcolati, per non ricalcolarli: possibile perché il passato è fisso; nell’addestramento non esiste riusa i pesi di attenzione e le proiezioni del pezzo sull’attenzione; cresce con la finestra di contesto; è ridotta dalle attenzioni raggruppate
Attenzioni raggruppate machine-learning La famiglia di soluzioni nei pesi che comprime la cache di chiavi e valori: la GQA condivide chiavi e valori fra gruppi di teste, la MLA li comprime in un vettore latente; il motore può aggiungere la quantizzazione della cache al volo riducono la cache di chiavi e valori; sono documentate nei rapporti di DeepSeek e Qwen; la via del motore da TurboQuant

Fonti

Le affermazioni portanti vengono dai rapporti tecnici dei modelli citati, letti per questo pezzo, e dal codice nanoGPT già in Fonti della serie.