# 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.

Source: https://www.vigimod.com/it/learn/running-ai-on-a-cpu · VigiMod (https://www.vigimod.com) · aggiornato il 2026-11-11 · 7 min

## In breve

- Un modello è soprattutto moltiplicazioni di numeri: meno numeri e più piccoli vogliono dire più velocità.
- La quantizzazione salva i pesi come interi a 8 bit invece che decimali a 32 bit: circa 4 volte più piccolo, spesso 2-4 volte più veloce.
- ONNX Runtime esegue i modelli in modo efficiente su CPU, usando le loro istruzioni vettoriali (AVX-512, AMX).
- Dopo la quantizzazione vanno ricontrollate le soglie: i punteggi si spostano un poco.

## 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.

## Quiz

1. Cosa cambia la quantizzazione int8?
   Risposta: I pesi sono salvati come interi a 8 bit invece che decimali a 32 bit. Numeri più piccoli vogliono dire un modello più piccolo e veloce.
2. Perché dopo la quantizzazione vanno ricontrollate le soglie?
   Risposta: I punteggi si spostano leggermente. La ricalibrazione mantiene la stessa quota di messaggi segnalati.
3. Cos'è ONNX Runtime?
   Risposta: Un motore che esegue i modelli in modo efficiente, anche su CPU. Esegue il grafo del modello con le istruzioni più veloci della CPU.
4. Cos'è una cascata?
   Risposta: Un modello veloce su ogni messaggio, uno grande solo sui casi incerti. Tiene veloci ed economiche quasi tutte le richieste.
