$ cd ../
Cuantizacion INT8 - PTQ y QAT para comprimir modelos 4x — bash

user@devops:~$ cat README.md

Cuantizacion INT8 - PTQ y QAT para comprimir modelos 4x

# Descripción

Cuantizacion INT8 implementada con la API de cuantizacion FX de PyTorch sobre una CNN propia (421.834 params, 1.62 MB) entrenada en Fashion-MNIST (split estratificado 4.000/1.000/5.000, seed 42, AdamW + cosine + early stopping, 53 s en CPU). Tres metodos comparados: (1) PTQ dinamica (torch.quantization.quantize_dynamic) - solo pesos a int8, activaciones en fp32, sin calibracion: acc 0.8698 (-0.06 pp), 0.46 MB, sin aceleracion; (2) PTQ estatica (API FX: fuse_fx + prepare_fx + calibracion con 500 muestras + convert_fx) - pesos y activaciones a int8: acc 0.8694 (-0.10 pp), 0.41 MB, 2.6x mas rapida (10.52 a 4.10 ms/batch) por kernels INT8 oneDNN; (3) QAT (prepare_qat_fx + 8 epocas de fine-tune + convert_fx) - FakeQuantize simula la cuantizacion durante el entrenamiento: acc 0.8712 (+0.08 pp vs baseline; la regularizacion del ruido de cuantizacion mejora la generalizacion), 0.41 MB. Analisis de error por capa: las capas densas se cuantizan mucho mejor (MSE 10-8 vs 10-1 en convolucionales); los rangos de activacion de las capas densas son ~10x mayores (FC1: [-32.8, 26.6] vs Conv1: [-3.2, 2.7]). La cuantizacion INT8 es casi gratis para redes pequenas: compresion 4x con perdida menor o igual a 0.1 pp. 8 visualizaciones.

# Características principales

$ Tres estrategias de cuantizacion INT8 con PyTorch: PTQ dinamica, PTQ estatica (API FX) y QAT - de 1.62 MB a 0.41 MB (-74%)

$ CNN propia con patron fusionable Conv-BN-ReLU: 421.834 params entrenada en Fashion-MNIST (4.000/1.000/5.000, seed 42, AdamW + cosine + early stopping en 53 s CPU)

$ PTQ estatica via API FX: fuse_fx + prepare_fx + calibracion con 500 muestras + convert_fx - pesos y activaciones int8 con kernels oneDNN

$ QAT (prepare_qat_fx): FakeQuantize simula la cuantizacion durante el entrenamiento - la red aprende a convivir con el ruido y generaliza mejor (+0.08 pp)

$ La precision se mantiene: perdida menor o igual a 0.1 pp en PTQ - la cuantizacion INT8 es casi gratis para redes pequenas

$ PTQ estatica 2.6x mas rapida en CPU (10.52 a 4.10 ms/batch) al cuantizar tambien las activaciones

$ Las capas densas se cuantizan mucho mejor que las convolucionales (MSE 10-8 vs 10-1) - analisis de error por capa

$ 8 visualizaciones: curvas de entrenamiento, histogramas fp32 vs int8, error por capa, rangos de activacion, precision, tamano, latencia y matrices de confusion

# Galería

Terminal del proyecto
Cuantizacion INT8 - PTQ y QAT para comprimir modelos 4x - Terminal del proyecto
Curvas de entrenamiento
Cuantizacion INT8 - PTQ y QAT para comprimir modelos 4x - Curvas de entrenamiento
Pesos fp32 vs int8
Cuantizacion INT8 - PTQ y QAT para comprimir modelos 4x - Pesos fp32 vs int8
Error de cuantizacion por capa
Cuantizacion INT8 - PTQ y QAT para comprimir modelos 4x - Error de cuantizacion por capa
Rangos de activacion (calibracion)
Cuantizacion INT8 - PTQ y QAT para comprimir modelos 4x - Rangos de activacion (calibracion)
Precision de los 4 metodos
Cuantizacion INT8 - PTQ y QAT para comprimir modelos 4x - Precision de los 4 metodos
Compresion de tamano
Cuantizacion INT8 - PTQ y QAT para comprimir modelos 4x - Compresion de tamano
Latencia CPU
Cuantizacion INT8 - PTQ y QAT para comprimir modelos 4x - Latencia CPU
Matrices de confusion
Cuantizacion INT8 - PTQ y QAT para comprimir modelos 4x - Matrices de confusion

# Tecnologías utilizadas

Python PyTorch NumPy scikit-learn Matplotlib