La quantizzazione riduce la precisione numerica con cui sono memorizzati i parametri di un modello. Da 32 bit (FP32) a 16 bit (FP16, BF16), 8 bit (INT8), 4 bit, fino a 2 bit. Risultato: modello più piccolo, più veloce, qualità appena un po' inferiore.
Esempio pratico: Llama 3 70B in FP16 occupa circa 140 GB di VRAM. Quantizzato a 4 bit (con GGUF, GPTQ, AWQ) occupa circa 40 GB. Da impossibile per consumer a fattibile su GPU prosumer (RTX 4090 + system RAM).
Tecniche principali:
- Post-training quantization (PTQ): prendi un modello già addestrato e lo quantizzi. Veloce, qualità decente. Standard.
- Quantization-aware training (QAT): addestri il modello simulando la quantizzazione. Qualità migliore ma costoso.
- GPTQ: quantizzazione INT4 per LLM, ottimizzata layer-by-layer.
- AWQ (Activation-aware Weight Quantization): tiene conto delle attivazioni per scegliere cosa quantizzare di più.
- GGUF: formato di quantizzazione di llama.cpp. Standard per running LLM su CPU/Mac.
- BitsAndBytes: libreria Python, integra 4 e 8 bit con PyTorch.
Cosa perdi con la quantizzazione:
- FP16/BF16 vs FP32: praticamente nulla. Standard ovunque.
- INT8: perdita minima (1-2% su benchmark).
- INT4: perdita visibile (3-5% su benchmark complessi). Usabile.
- INT2 / 1-bit: perdita seria. Solo per casi estremi (modelli enormi su hardware piccolissimo).
Frontiera 2024: BitNet (Microsoft) - modelli addestrati nativamente in 1.58 bit. Promettenti, da vedere se scalano.
Quando vedi modelli "Q4_K_M" su HuggingFace o LM Studio, è quantizzazione GGUF a 4 bit. Standard de facto per running LLM in locale. Combinata con Ollama e distillation, ti permette di girare 70B su un laptop decente.