Avanzato7 min di letturaAggiornato
Far girare l'IA su CPU: quantizzazione, ONNX e perché i modelli piccoli vincono
Non serve sempre una GPU. Come la quantizzazione int8, ONNX Runtime e la taglia giusta fanno rispondere un modello di moderazione in millisecondi su CPU.
Perché la velocità conta
Un'API di moderazione per le chat deve rispondere mentre l'utente guarda ancora lo schermo: qualche centinaio di millisecondi al massimo. Le GPU sono veloci ma care; i server normali hanno CPU. Rendere veloce un modello su CPU è quello che rende un servizio di moderazione sostenibile.
Cosa calcola un modello
Una rete neurale è soprattutto moltiplicazioni tra matrici: i numeri che rappresentano il testo vengono moltiplicati per i pesi del modello, strato dopo strato. La velocità dipende da quante moltiplicazioni servono (la taglia del modello e la lunghezza del testo) e da quanto è veloce ciascuna.
La quantizzazione
Normalmente i pesi sono salvati come numeri decimali a 32 bit. La quantizzazione li salva come interi a 8 bit (int8), con un fattore di scala per ogni riga o canale:
| Formato | Peso di un modello da 560 milioni di parametri | Velocità tipica su CPU |
|---|---|---|
| float32 | circa 2,2 GB | riferimento |
| int8 | circa 0,6 GB | spesso 2-4 volte più veloce |
Le CPU moderne hanno istruzioni che moltiplicano tanti numeri a 8 bit insieme (VNNI, AVX-512, Intel AMX): è da lì che arriva la velocità.
Il prezzo è una piccolissima perdita di precisione. Con la quantizzazione dinamica per canale un buon classificatore di solito non perde quasi niente di misurabile, ma i punteggi si spostano leggermente. Per questo dopo la quantizzazione le soglie vanno ricalibrate: ogni soglia viene spostata perché il modello quantizzato segnali la stessa quota di messaggi dell'originale su un insieme di calibrazione.
ONNX e ONNX Runtime
ONNX è un formato aperto per salvare un modello come grafo di operazioni, indipendente dal framework con cui è stato addestrato. ONNX Runtime esegue quel grafo ed è ottimizzato per le CPU: unisce le operazioni, usa tutti i core e sceglie le istruzioni più veloci disponibili.
Un esempio reale
VigiMod 1.2.1 ha circa 560 milioni di parametri. Su 4 core di CPU:
| Versione | Tempo per coppia messaggio-categoria |
|---|---|
| Precisione piena | circa 113 ms |
| ONNX int8 | circa 32 ms (3,5 volte più veloce) |
Dopo la ricalibrazione delle soglie, la perdita di qualità misurata sui dati di validazione è stata sotto 0,005 di F1, dentro il rumore.
Altri trucchi
- Input più corti: limita il contesto agli ultimi messaggi che contano.
- Batch: valuta più messaggi insieme quando arrivano insieme.
- Cache della parte fissa dell'input (per esempio una policy lunga) nei modelli che lo permettono.
- Modello più piccolo, dati migliori: un modello piccolo addestrato sugli esempi giusti spesso batte uno grande e generico, a una frazione del costo.
Quando serve davvero una GPU
Per l'addestramento, e per far girare modelli molto grandi che generano risposte lunghe. Uno schema comune è la cascata: un modello piccolo e veloce su ogni messaggio, uno più grande solo sui pochi casi incerti.
Mettiti alla prova
Rispondi alle domande, poi controlla le risposte.
Continua a imparare
Guardalo su messaggi veri
Prova la demo dal vivo, o leggi come funziona l'API.