Perché quantizzare i modelli?
La quantizzazione riduce lo spazio di rappresentazione dei pesi da float32 a int8 o float16, diminuendo la memoria necessaria e accelerando le inferenze su hardware compatibile. In ambito mobile e edge, questo è cruciale per garantire tempi di risposta rapidi.
PyTorch offre due modalità principali: post-training quantization (PQT) e quantization-aware training (QAT). PQT è rapido da applicare su un modello già addestrato, mentre QAT inserisce le operazioni di quantizzazione durante il training per mantenere l’accuratezza.
Implementazione con torch.quantization
Per PQT si utilizza torch.quantization.prepare() seguito da torch.quantization.convert(). Il processo include la calibrazione su un set di dati rappresentativo. Per QAT, invece, è necessario sostituire i layer con le loro controparti quantizzabili e configurare il QuantStub e DequantStub.
Valutazione dell’impatto sulla precisione
Dopo la conversione, confronta l’accuratezza sul set di test con quella del modello originale. In genere, i modelli CNN per classificazione mantengono un drop inferiore al 1% quando si utilizza int8.
Supporto hardware e deployment
Le GPU NVIDIA Ampere supportano l’operazione INT8 a livello di kernel; le CPU Intel con AVX-512 ottimizzano le operazioni di int8. Per il deploy su dispositivi mobili, ONNX Runtime fornisce runtime ottimizzati per quantizzazione.