Skip to content
BotServBotServ
OllamaCuantizaciónGGUFllama.cppReducir tamaño de modelos

Cuantización en la práctica con Ollama

Cuantiza modelos con llama.cpp y Ollama. Q4_K_M, Q5_K_M, Q8_0 y crea archivos GGUF propios.

S

schutzgeist

4 min read
Cuantización en la práctica con Ollama

Cuantización en la práctica con Ollama

Qué abarca este artículo sobre cuantización en Ollama

  • Qué métodos de cuantización existen.
  • Cómo cuantizar modelos a GGUF con llama.cpp.
  • Diferencias entre Q4_K_M, Q5_K_M, Q8_0 y otros métodos.
  • Cómo importar archivos GGUF propios en Ollama.
  • Consejos para equilibrar calidad, velocidad y memoria.

Introducción: cuantización en la práctica con Ollama

Ollama ofrece muchos modelos en diferentes cuantizaciones. Sin embargo, a veces necesitas llevar un modelo específico de Hugging Face a un formato adecuado, por ejemplo porque los tags estándar no encajan o porque quieres ajustar el tamaño exacto del archivo. Para eso puedes convertir el modelo a GGUF y luego cuantizarlo. El procedimiento correcto determina cuánta memoria ahorras y cuánta calidad pierdes.

Este artículo te muestra los niveles de cuantización más importantes y el flujo práctico con llama.cpp.

Conceptos clave

  • Cuantización: Reducción de la profundidad de bits de los pesos del modelo.
  • GGUF: Formato de llama.cpp para modelos almacenados.
  • Q4_K_M: Cuantización de 4 bits, K-Quant-Medium, buen equilibrio.
  • Q5_K_M: Cuantización de 5 bits, mayor calidad que Q4.
  • Q8_0: Cuantización de 8 bits, casi calidad original.
  • F16: Precisión media, 16 bits por parámetro.
  • FP32: Precisión de punto flotante de 32 bits completa.
  • imatrix: Importance Matrix, cuantización mejorada.
  • KLD: Método de perplejidad para evaluación de calidad.

Por qué cuantizar

  • Los modelos más grandes caben en menos VRAM.
  • Múltiples modelos pueden mantenerse simultáneamente en memoria.
  • Los tiempos de carga se reducen.
  • Las CPUs pueden utilizar modelos en primer lugar.
  • El espacio en disco disminuye.

La desventaja es una posible pérdida de calidad. Con 4 bits, la diferencia es pequeña en muchos modelos, pero en tareas muy complejas puede ser notable.

Niveles de cuantización habituales

NivelBitsRequisito de memoriaCalidadUso
Q2_K2muy bajobajaCPU de emergencia
Q3_K_S / Q3_K_M3bajomoderadaVRAM muy limitado
Q4_K_M4buenobuenaEstándar para consumidor
Q5_K_M5mayormuy buenaMejor calidad
Q8_08altocasi idénticaCuando hay espacio
F1616muy altooriginalFine-tuning o entrenamiento

Requisitos previos

Una opción es utilizar llama.cpp o unsloth:

git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
make

Alternativamente, hay binarios precompilados o imágenes Docker.

Convertir modelo a GGUF

Para modelos de Hugging Face, puedes usar convert_hf_to_gguf.py:

python convert_hf_to_gguf.py /ruta/al/modelo \
  --outfile mi-modelo-f16.gguf \
  --outtype f16

El resultado es un GGUF F16 que aún no está cuantizado.

Cuantizar con llama-quantize

./llama-quantize mi-modelo-f16.gguf mi-modelo-q4_k_m.gguf Q4_K_M

Niveles adicionales:

./llama-quantize mi-modelo-f16.gguf mi-modelo-q5_k_m.gguf Q5_K_M
./llama-quantize mi-modelo-f16.gguf mi-modelo-q8_0.gguf Q8_0

Usar Importance Matrix

Para mejores resultados con Q4 y Q5, puedes calcular una imatrix:

./llama-imatrix -m mi-modelo-f16.gguf -f datos-entrenamiento.txt --output-file mi-modelo.imatrix
./llama-quantize --imatrix mi-modelo.imatrix mi-modelo-f16.gguf mi-modelo-q4_k_m.gguf Q4_K_M

Una imatrix ayuda a cuantizar los pesos importantes con más precisión.

Importar modelo en Ollama

Crea un Modelfile:

FROM ./mi-modelo-q4_k_m.gguf

SYSTEM """
Eres un asistente preciso.
"""

PARAMETER temperature 0.7

Luego importa:

ollama create mi-modelo -f Modelfile

Ofrecer múltiples cuantizaciones

Puedes importar un modelo en diferentes niveles:

ollama create mi-modelo:q4 -f Modelfile.q4
ollama create mi-modelo:q5 -f Modelfile.q5
ollama create mi-modelo:q8 -f Modelfile.q8

Verificar la calidad

Después de cuantizar, debes probar el modelo en tareas conocidas. Las áreas importantes incluyen:

  • Resúmenes
  • Tareas de programación
  • Matemáticas
  • Multilingüismo
  • Razonamiento lógico

Una comparación con el original F16 muestra cuánta calidad se pierde.

Tamaño y velocidad

  • Los modelos cuantizados más pequeños son más rápidos porque requieren menos ancho de banda de memoria.
  • Con Q2_K y Q3_K_S, la calidad puede disminuir drásticamente.
  • Q4_K_M es el equilibrio estándar para GPUs de consumidor.
  • Q8_0 es casi sin pérdida, pero requiere significativamente más memoria.

Consejos

  • Usa Q4_K_M para el uso diario.
  • Q5_K_M para programación o tareas complejas.
  • Usa Q8_0 si tienes suficiente VRAM.
  • F16 solo para entrenamiento o casos especiales.
  • Calcula imatrix para modelos importantes.
  • Compara resultados con el original.

Problemas típicos

  • Formato incorrecto: Los modelos de Hugging Face deben convertirse primero a GGUF.
  • Arquitectura incompatible: No todos los modelos son soportados por llama.cpp.
  • Cuantización demasiado agresiva: Q2_K o Q3_K_M a menudo destruye la calidad.
  • Archivos de tokenizador faltantes: La conversión requiere archivos de modelo completos.
  • VRAM aún demasiado pequeño: El modelo no cabe aunque esté cuantizado.
  • GGUF corrupto: Ejecuta una suma de verificación o una prueba.

Enlaces e información adicional

Preguntas frecuentes: cuantización en la práctica

¿Qué cuantización es el mejor equilibrio? Para la mayoría de aplicaciones, Q4_K_M.

¿Se pierde mucha calidad? Con Q4_K_M, generalmente poco; con Q8_0, casi nada.

¿Puedo usar modelos de Hugging Face en Ollama? Sí, mediante conversión a GGUF e importación en Ollama.

¿Necesito Linux? llama.cpp funciona en Windows y macOS, pero Linux es el más común.

¿Cuánto tarda la cuantización? Dependiendo del tamaño del modelo y la CPU, desde minutos hasta horas.

Fuentes y lecturas adicionales

Resumen: cuantización en la práctica con Ollama

La cuantización es esencial para ejecutar modelos grandes en hardware de consumidor. Con llama.cpp puedes convertir modelos de Hugging Face a GGUF y cuantizarlos en niveles como Q4_K_M, Q5_K_M o Q8_0. Para obtener los mejores resultados con memoria limitada, una Importance Matrix es de gran ayuda. Después de importar a través de un Modelfile de Ollama, el modelo cuantizado se puede usar como cualquier otro modelo de Ollama. Lo importante es equilibrar calidad y requisitos de memoria, y elegir el nivel adecuado para tu hardware y tarea específica.

Volver al blog
Share:

Entradas relacionadas