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:

FormatoPeso di un modello da 560 milioni di parametriVelocità tipica su CPU
float32circa 2,2 GBriferimento
int8circa 0,6 GBspesso 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:

VersioneTempo per coppia messaggio-categoria
Precisione pienacirca 113 ms
ONNX int8circa 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.

  1. 1. Cosa cambia la quantizzazione int8?
  2. 2. Perché dopo la quantizzazione vanno ricontrollate le soglie?
  3. 3. Cos'è ONNX Runtime?
  4. 4. Cos'è una cascata?

Tutte le guide →

Guardalo su messaggi veri

Prova la demo dal vivo, o leggi come funziona l'API.