¿Puede vLLM ejecutar GGUF? Sí — solo en GPU

¿Puede vLLM ejecutar GGUF? Sí — con el plugin oficial, solo en GPU. La sintaxis serve, la trampa del tokenizer, los límites de hardware y cuándo gana llama.cpp.

HUMANpor @mrsaynothing33d4 min de lectura

La semana pasada un lector preguntaba por qué su archivo GGUF falla en vLLM en una máquina sin GPU, mientras el mismo archivo corre sin problemas en Ollama. Respuesta corta, antes que nada: sí, vLLM ejecuta GGUF — mediante un plugin oficial, solo en GPU. El plugin se llama vllm-gguf-plugin, la sintaxis es repo:quant_type, y en cuanto lo intentas en CPU estás fuera de la tabla de hardware soportado. Todo lo que sigue viene de la documentación de vLLM y del historial del repositorio vllm-project/vllm (más de 92.000 estrellas desde febrero de 2023) — los docs, no mi banco de pruebas.

¿vLLM soporta GGUF? Sí — como plugin fuera del árbol, solo en GPU. Las dos mitades de esa frase importan, y cada una tiene su sección abajo. Este post es parte del cluster run-LLMs-locally; las alternativas del lado CPU viven ahí también.

¿Cómo sirves un modelo GGUF con vLLM?

Dos pasos: instalar el plugin y apuntar vLLM al modelo. El soporte de GGUF ya no vive en el núcleo de vLLM — la documentación indica que «ha migrado a vllm-gguf-plugin», así que un simple pip install vllm no basta:

uv pip install vllm-gguf-plugin

# Directamente desde Hugging Face, formato repo_id:quant_type:
vllm serve unsloth/Qwen3-0.6B-GGUF:Q4_K_M \
  --tokenizer Qwen/Qwen3-0.6B

# O un archivo local ya descargado:
vllm serve ./Qwen3-0.6B-Q4_K_M.gguf \
  --tokenizer Qwen/Qwen3-0.6B

El flag --tokenizer no es adorno. La documentación oficial recomienda el tokenizer del modelo base porque la conversión del tokenizer GGUF es «lenta e inestable, especialmente en modelos con vocabularios grandes». Saltártelo es cambiar un flag de una línea por un arranque largo y caprichoso.

Dos GPU, un modelo: añade --tensor-parallel-size 2 para repartir el mismo GGUF entre ambas tarjetas — el tensor parallelism funciona con GGUF igual que con cualquier otro formato.

¿Por qué vLLM rechaza GGUF en CPU?

Esta es la parte que sorprende. La reputación de GGUF es CPU primero — es el formato sobre el que llama.cpp construyó su nombre, corriendo modelos en laptops y Raspberry Pi. Dentro de vLLM la situación se invierte. La tabla oficial de compatibilidad de hardware marca GGUF:

Hardware GGUF en vLLM
NVIDIA Volta / Turing / Ampere / Ada / Hopper soportado
GPU AMD soportado
GPU Intel no soportado
CPU x86 no soportado
CPU Arm no soportado

Fuente: documentación de cuantización de vLLM. La razón es arquitectónica: la ruta GGUF de vLLM descuantiza los bloques hacia kernels de GPU diseñados para serving por lotes. No hay kernel CPU detrás, porque vLLM es un motor de serving, no un juguete de laptop. Si tu máquina no tiene GPU, ningún flag te salva — usa llama.cpp. Y un candado queda por encima del de hardware: el sistema operativo. ¿Se puede ejecutar vLLM en Windows? No de forma nativa: WSL2 es el camino oficial, y saltárselo cuesta el impuesto del fork.

Lo que se rompe: la lista honesta de límites

La misma página de la documentación lleva una advertencia que vale la pena citar textualmente: "el soporte de GGUF en vLLM es altamente experimental y está poco optimizado". En concreto:

  • La cobertura de cuantización es más estrecha que en llama.cpp. Los K-quants que todo el mundo descarga (Q4_K_M y compañía) funcionan; los esquemas exóticos no siempre. llama.cpp sigue siendo la implementación de referencia del formato.
  • El soporte de arquitecturas va por detrás. Las nuevas familias de modelos llegan primero a llama.cpp; el plugin va después.
  • Sin carga diferida tipo mmap. llama.cpp mapea el archivo en memoria; vLLM lo carga como cualquier checkpoint.
  • Es primero una función de huella de memoria. La doc plantea GGUF como forma de reducir el uso de VRAM, no como apuesta por el throughput. Cuánta VRAM pide de verdad un archivo — pesos, caché KV y veredicto tarjeta a tarjeta — lo estima la calculadora de VRAM para GGUF antes de descargar.

Nada de esto está escondido. Está todo en el primer párrafo de la página oficial de GGUF — más de lo que la mayoría de funciones experimentales ofrecen.

¿vLLM o llama.cpp para GGUF: quién gana?

Herramientas distintas que leen el mismo archivo:

vLLM + GGUF llama.cpp
Inferencia en CPU no sí, de primera clase
Usuarios simultáneos continuous batching, hecho para eso limitado
Cobertura de quants subconjunto, experimental la referencia
Instalación vLLM + plugin un binario
Ideal para una GPU, muchos usuarios un usuario, cualquier hardware

Si sirves un modelo a un equipo desde una sola GPU, vLLM + GGUF te permite reutilizar los mismos archivos Q4_K_M que comparte el resto del mundo local-LLM — con más opciones en nuestra guía de cuantización GGUF. Para la comparación completa de motores, ver llama.cpp vs Ollama y cómo ejecutar modelos GGUF en local.

La regla en una línea: mismo archivo, instintos opuestos — llama.cpp trata GGUF como EL formato, vLLM como una opción.