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.
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.
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.
- Improve and Manage,
serie-machine-learning,
GitHub, 2026 - il repository dei widget della serie: qui stanno il
router e la memoria di questo pezzo (cartella
moe/), insieme ai widget di tutti gli altri pezzi della serie. - DeepSeek-AI, DeepSeek-V2: A Strong, Economical, and Efficient Mixture-of-Experts Language Model, 2024, primaria aperta e letta - la MLA (multi-head latent attention): chiavi e valori compressi in un vettore latente condiviso per ridurre la cache; l’architettura MoE.
- DeepSeek-AI, DeepSeek-V3 Technical Report, 2024, primaria aperta e letta - il modello MoE da 671 miliardi di parametri totali con 37 attivi per token, e la MLA portata nel V3.
- Qwen Team (Alibaba), Qwen3 Technical Report, 2025, primaria aperta e letta - l’architettura decoder-only con attenzione GQA, le versioni dense e MoE (Qwen3-30B-A3B e Qwen3-235B-A22B: 235 miliardi totali, 22 attivi), le 119 lingue.
- Amir Zandieh, Majid Daliri, Majid Hadian e Vahab Mirrokni, TurboQuant: Online Vector Quantization with Near-optimal Distortion Rate, ICLR 2026, primaria aperta, letto l’abstract - la quantizzazione in linea della cache di chiavi e valori: 3,5 bit per canale senza perdita misurabile, 2,5 con degradazione marginale, e la garanzia quasi ottimale sulla distorsione.
- Joshua Ainslie e colleghi, GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints, EMNLP 2023, primaria aperta, letto l’abstract - la GQA: chiavi e valori condivisi fra gruppi di teste, con qualità vicina all’attenzione piena e cache più piccola.
- Andrej Karpathy,
nanoGPT al commit
3adf61e154c3, licenza MIT, codice letto (già in Fonti dei pezzi sull’embedding, sull’attenzione e sul Transformer) - la funzionegenerateche ricalcola l’intera sequenza a ogni token, senza cache: il termine di paragone onesto per la cache di chiavi e valori.