¿Qué es la cuantización?
La cuantización es una técnica que reduce la precisión numérica de los pesos de un modelo de lenguaje. En lugar de usar valores de punto flotante de 32 bits (FP32) o 16 bits (BF16), los pesos se almacenan con menor precisión — típicamente 8 bits, 4 bits o incluso 2 bits.
Esto reduce drásticamente la memoria necesaria para cargar un modelo, acelera la inferencia y permite ejecutar modelos grandes en hardware de consumo.
El formato GGUF
GGUF (GPT-Generated Unified Format) es el formato de archivo utilizado por llama.cpp para distribuir modelos cuantizados. Sustituyó al antiguo GGML con mejoras como metadatos extensibles, alineación de memoria y compatibilidad hacia adelante.
Un archivo GGUF contiene los pesos del modelo ya cuantizados en uno de varios niveles de precisión. Al cargar un GGUF, llama.cpp lee los pesos directamente sin necesidad de conversión adicional.
Niveles de cuantización
Los niveles más comunes, ordenados de mayor a menor calidad:
Q8_0: 8 bits, prácticamente sin pérdida perceptible. La mejor opción si tienes VRAM suficiente.
Q6_K: 6 bits, pérdida mínima. Excelente relación calidad/tamaño.
Q5_K_M: 5 bits, buen equilibrio para modelos grandes.
Q4_K_M: 4 bits, la más popular. Reduce el tamaño ~2.5× respecto a FP16.
IQ4_XS: 4 bits con importancia adaptativa. Mejor que Q4_K_M en muchos benchmarks.
IQ3_XXS: 3 bits. Agresiva pero útil para hardware muy limitado.
Proceso de cuantización con llama.cpp
Para cuantizar un modelo necesitas llama.cpp compilado:
git clone https://github.com/ggerganov/llama.cpp cd llama.cpp make -j
Convierte el modelo original a FP16 GGUF:
python3 convert_hf_to_gguf.py /ruta/al/modelo --outtype f16 --outfile modelo-f16.gguf
Cuantiza a Q4_K_M:
./llama-quantize modelo-f16.gguf modelo-Q4_K_M.gguf Q4_K_M
Inferencia con GGUF
Una vez cuantizado, puedes ejecutar inferencia directamente:
./llama-cli -m modelo-Q4_K_M.gguf -p "Explica qué es un transformer" -n 512
O montar un servidor con llama-server:
./llama-server -m modelo-Q4_K_M.gguf --port 8080
Resultados prácticos
En mis pruebas, cuantizar Qwen3.6-35B-A3B de BF16 (65 GB) a Q8_0 (38 GB) mantiene métricas prácticamente idénticas en benchmarks de razonamiento. La cuantización a Q4_K_M reduce a 19 GB con una pérdida de solo 2-3 puntos porcentuales en MMLU.
El formato GGUF es actualmente la forma más eficiente de ejecutar modelos de lenguaje en local. La combinación de cuantización agresiva con hardware de consumo permite desplegar modelos de 30B+ parámetros en una sola GPU de 24 GB.