Come si comprime un'AI a 2 bit: il trellis
Un modello è fatto di miliardi di numeri. Per farlo stare in una scheda video bisogna scriverli con meno bit. Il trellis è uno dei modi più furbi: invece di salvare i valori, salva un cammino per ritrovarli.
Un numero in 16 bit
Prendi un peso del modello, per esempio 0,734. Il computer lo scrive in fp16: sedici interruttori accesi o spenti. Il primo dà il segno, i cinque dopo la scala (una potenza di due), gli ultimi dieci il fattore che la moltiplica, un numero fra 1 e 2. Cambia il numero e guarda i bit.
- Scala
- 0,5
- Fattore
- × 1,4678
- Valore salvato
- 0,733887
- Errore
- 0,00011
Con 16 bit sbagli di circa un decimillesimo. Ma un modello ha miliardi di pesi, e a 16 bit ciascuno non entra nella memoria di una scheda. Allora ne usiamo due. Per semplicità i pesi di un blocco si dividono per una scala comune e stanno fra −2 e 2: qui la scala è 1. Premi «Riduci a 2 bit».
Perché un peso alla volta non basta
A 2 bit ogni peso ha solo quattro valori possibili, e va sul più vicino. È come decidere ogni peso da solo: due pesi insieme finiscono su una griglia rigida di sedici punti. Ma i pesi veri stanno quasi tutti vicino allo zero, quindi i punti negli angoli non servono quasi mai.
Meglio mettere i punti dove stanno i pesi e scriverli in un elenco, un codebook: per ogni gruppo di pesi si salva solo quale riga usare. Più pesi si prendono insieme, meno si sbaglia. Il problema è che l'elenco cresce troppo in fretta.
| Pesi insieme | Bit per peso | Righe del codebook |
|---|---|---|
| 2 | 2 | 16 |
| 8 | 2 | 65.536 |
| 8 | 3 | 16.777.216 |
| 256 | 2 | un numero di 155 cifre |
Un elenco così non si può scrivere. Il trellis lo fa senza scriverlo.
Il traliccio
Partiamo dal caso più semplice: un solo bit per peso. Il trellis legge i bit uno dopo l'altro e tiene a mente gli ultimi tre: è lo stato, e con tre bit sono otto. A ogni stato una formula fissa associa un valore, che conoscono sia chi comprime sia chi legge. I valori sembrano scelti a caso, ma sono distribuiti come i pesi veri: tanti vicino allo zero, pochi grandi.
Da ogni stato partono due frecce, perché un bit è 0 o 1. In inglese trellis vuol dire traliccio. Scegliere i bit vuol dire scegliere un cammino, e i valori lungo il cammino sono i pesi. Prova: i quattro pesi sono 0,734, −1,2, 0,3 e 1,5. Cambia i bit e guarda dove ti porta il cammino.
Bit scelti
| Peso | Valore | Errore² |
|---|---|---|
| +0,73 | −0,42 | 1,332 |
| −1,2 | −0,42 | 0,608 |
| +0,3 | −0,42 | 0,518 |
| +1,5 | −0,42 | 3,686 |
| Totale | 6,145 | |
Arrotondando un peso alla volta (1 bit: ±0,8)
+0,8 −0,8 +0,8 +0,8 → totale 0,904
Ogni peso va sul più vicino fra −0,8 e +0,8, senza sapere nulla degli altri.
Ogni bit sceglie il peso di adesso e anche da dove parte il successivo: per questo i pesi non si scelgono uno alla volta, ma tutti insieme. «Trova il cammino migliore» li prova tutti e sedici. Nell'esempio, con un solo bit per peso, il cammino migliore sbaglia 0,584 contro 0,904 dell'arrotondamento classico.
Nel trellis vero i numeri sono più grandi: QTIP usa 16 bit di stato (65.536 stati), blocchi da 256 pesi e valori calcolati da una formula di poche istruzioni, che la scheda video ricalcola mentre il modello risponde. Per trovare il cammino migliore senza provarli tutti c'è l'algoritmo di Viterbi: per ogni stato tiene solo il modo migliore per arrivarci, perché da lì in poi conta dove sei, non come ci sei arrivato.
I numeri veri
Due misure, da due fonti diverse. La prima è dal paper QTIP: l'errore di arrotondamento a 2 bit su numeri di prova.
Errore quadratico medio a 2 bit (QTIP, tabella 1)
| Metodo | Errore |
|---|---|
| Un numero alla volta (Lloyd-Max) | 0,118 |
| Reticolo E8 | 0,089 |
| Trellis | 0,069 |
| Limite teorico | 0,063 |
Da 0,118 a 0,069: meno 42%, a un passo dal limite teorico.
Qwen 3.6 35B-A3B, con la variante EXL3 a 2,08 bit per peso
| Dimensione | Perplessità | |
|---|---|---|
| bf16 | 66,97 GiB | 6,7802 |
| EXL3 2,08 bit | 10,50 GiB | 7,2418 (+6,8%) |
La perplessità misura l'incertezza del modello sulla parola successiva. EXL3 è una variante snella di QTIP, come dice il README di exllamav3.
Il trellis dentro Mango Code
TOQ, il modello di Mango Code, è Qwen3.8-27B compresso con un trellis della stessa famiglia di QTIP ed EXL3: 64 strati a 2 bit per peso e lo strato che sceglie la parola a 3. Sulla scheda video i pesi occupano 6,17 GiB, più 176 MiB per una correzione imparata dal modello originale; una scheda da 8 GB tiene i pesi e circa 14.000 token di contesto. Lo stato del traliccio è di 14 bit invece di 16. Alle domande a scelta multipla del test MMLU risponde giusto nel 77,8% dei casi; lo stesso modello a 4 bit, un file da 13,3 GiB, nell'82,6%.
Vai a Mango CodeCosa non è verificato
- Il 42% riguarda l'errore di arrotondamento su numeri di prova, non la qualità delle risposte di un'AI.
- Che a 2 bit un peso alla volta non basti è misurato su alcuni metodi, non su tutti: nel paper OmniQuant Llama-2-7B passa da 5,47 di perplessità a circa 4.200 arrotondando e basta, a 36,77 con GPTQ e a 11,06 con OmniQuant.
- Nell'esempio da provare i valori degli otto stati servono a mostrare l'idea: non sono quelli di QTIP.
- TOQ non è misurato come agente: il test MMLU è a scelta multipla e non dice se il modello porta a termine un lavoro in più passi.