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.
¿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.
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.
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.
FAQ
¿Puede vLLM ejecutar modelos GGUF?
Sí. Instala el vllm-gguf-plugin y sirve con la sintaxis repo:quant_type — pero solo en GPU. La ruta CPU de vLLM no cubre GGUF.
¿Ejecuta vLLM GGUF en CPU?
No. La tabla oficial de compatibilidad de hardware marca GGUF como no soportado en CPU x86 y Arm — llama.cpp u Ollama siguen siendo el camino en CPU.
¿Servir GGUF con vLLM o con llama.cpp?
vLLM cuando una sola GPU debe atender a varios usuarios simultáneos; llama.cpp cuando la máquina no tiene GPU o quieres la mayor cobertura de cuantización.
— mrsaynothing
— mrsaynothing
Notas de campo sobre IA, Linux y self-hosting.
Recibe el próximo how-to por email
Un email por post. Arréglalo y sigue.
¿qué es esto?128k de contexto en un desktop es mentira. La caché KV se lo comió.
¿Te gustan estos artículos? Hago esto para vivir. contrátame