Skip to content

English · Español

Fase 26 — Inmersión en cuantización (quantization)

Requiere: 02 — Representación numérica · 25 — Internals de PyTorch Enseña: quantization · int8 · nf4 · gptq · gguf · calibration Salta a cualquier capítulo desde el índice de referencia de fases.

Mapa del capítulo

Pre-escrita según A12. Los enunciados de teoría y de laboratorio son borradores estables; las soluciones se redactan justo a tiempo en la apertura de la fase.

Cuantizar es mover menos bytes por el mismo FLOP. Aquí derivamos por qué INT8/INT4 funcionan, qué error introducen y cómo medirlo sobre el MiniGPT de la Fase 17.


Objetivo

Coger el modelo MiniGPT entrenado en la Fase 17 (con el corpus de verbos en inglés de la Fase 12) y cuantizarlo después del entrenamiento. Producir una curva Pareto de perplejidad vs bytes sobre {FP32, FP16, INT8 por-tensor, INT8 por-canal, INT4 por-grupo}, y una curva de caída de precisión en clasificación de tiempo verbal sobre los mismos esquemas (la métrica de la tarea según §A13). Volver a representar el roofline de la Fase 1 con el punto de inferencia cuantizada para explicitar qué te compra la cuantización: mayor intensidad aritmética, mismo cómputo, menos tráfico de memoria.

Esta fase es la primera en la que Borja ve los tensores de pesos de Linear de PyTorch reescritos in situ. PyTorch se introdujo en la Fase 24 y ya es un sustrato de trabajo; la cuantización es el primer caso de uso no trivial que necesita infraestructura de nivel framework (ops de fake-quant, hooks de calibración).

Orden de lectura

  1. theory/00-motivation.md — por qué la cuantización es un argumento de roofline, no un argumento de compresión.
  2. theory/01-number-formats.md — anatomía de FP32 / FP16 / BF16 / FP8. Mantisa vs exponente.
  3. theory/02-scales-and-zeros.md — el mapa de cuantización simétrico/asimétrico y su cota de error. Por-tensor vs por-canal vs por-grupo.
  4. theory/03-gptq-and-nf4.md — actualizaciones de pesos basadas en la Hessiana (GPTQ) y libros de código basados en cuantiles (NF4).
  5. theory/04-awq-survey.md — solo repaso; AWQ y SmoothQuant son ejercicios de lectura, no implementaciones.
  6. lab/00-int8-ptq.md — implementar y evaluar INT8 PTQ en MiniGPT.
  7. lab/01-gptq-toy.md — implementar GPTQ para una sola capa Linear.
  8. lab/02-quant-curve.md — barrer esquemas y representar la curva Pareto.
  9. lab/03-gguf-export.md — escribir a mano una exportación tipo GGUF y un round-trip.

solutions/ está vacío durante la pre-escritura — se rellena en la apertura de la fase, cuando la API del MiniGPT de Borja sea visible.

Definition of Done (DoD)

Ver PHASE_26_PLAN.md §6. Resumen:

  • Perplejidad de INT8 PTQ a menos del 5% de FP32 en MiniGPT.
  • Perplejidad de INT4 por-grupo a menos del 15% de FP32.
  • Caída de precisión de clasificación de tiempo verbal INT8 vs FP32 < 2 puntos porcentuales (métrica de la tarea según §A13).
  • La exportación tipo GGUF hace round-trip al fake-quant de PyTorch con < 1e-3 de error.
  • Roofline de la Fase 1 re-representado con los puntos FP32 / INT8 / INT4 de MiniGPT, commit incluido.
  • src/miniquant/{quantize.py, gptq.py, gguf_io.py} implementados (por Borja).

Lo que esta fase intencionalmente NO cubre

  • QAT (quantization-aware training). Fuera de alcance para una fase centrada en PTQ; solo se menciona como "si el PTQ degrada demasiado, la solución es plegar la cuantización en el entrenamiento" — se deja para una exploración auto-dirigida posterior.
  • Implementaciones de AWQ / SmoothQuant. Se leen como papers, no se programan. Justificación pre-escrita: implementar ambos añade ~40 horas y el delta conceptual sobre GPTQ es modesto.
  • Kernels INT8 en GPU. La Fase 27 (Flash Attention) es el lugar adecuado.
  • Entrenamiento en FP8. Solo Hopper; se aplaza a los seguimientos de GPU de la Fase 24.
  • Cuantizar la tabla de embeddings. Los embeddings raramente se benefician del PTQ con el tamaño de modelo que manejamos; los dejamos en FP16 en todo momento.

El alcance de la Fase 26 es cuantización (quantization) post-entrenamiento solo de pesos para inferencia en CPU, con un desvío a un formato de pesos de 4 bits (NF4) y una implementación fiel al paper de GPTQ. Nada más.

Lecturas recomendadas

Opcional — enriquece pero no es necesario para aprobar la fase.