Запустит ли vLLM GGUF? Да — только на GPU
Запустит ли vLLM GGUF? Да — через официальный плагин и только на GPU. Синтаксис serve, ловушка с токенизатором, аппаратные лимиты и когда всё ещё выигрывает llama.cpp.
На прошлой неделе читатель спросил, почему его GGUF-файл внутри vLLM на машине без GPU отдаёт 404, тогда как тот же файл спокойно работает в Ollama. Короткий ответ, прежде всего остального: да, vLLM запускает GGUF — через официальный плагин и только на GPU. Плагин называется vllm-gguf-plugin, синтаксис — repo:quant_type, и в момент, когда вы пробуете это на CPU, вы выходите за пределы таблицы поддерживаемого железа. Всё ниже — из документации vLLM и истории репозитория vllm-project/vllm (92 000+ звёзд с февраля 2023) — из документов, а не с моего тестового стенда.
Поддерживает ли vLLM GGUF? Да — в виде out-of-tree плагина и только на GPU. Обе половины этого предложения важны, каждой ниже посвящён свой раздел. Этот пост входит в кластер run-LLMs-locally; CPU-альтернативы живут там же.
Как запустить GGUF-модель в vLLM?
Два шага: установить плагин, затем указать vLLM на модель. Поддержка GGUF больше не входит в ядро vLLM — в документации отмечено, что она «мигрировала в vllm-gguf-plugin» (OOT), поэтому простого pip install vllm недостаточно:
uv pip install vllm-gguf-plugin
# Напрямую из Hugging Face, формат repo_id:quant_type:
vllm serve unsloth/Qwen3-0.6B-GGUF:Q4_K_M \
--tokenizer Qwen/Qwen3-0.6B
# Или локальный файл, который вы уже скачали:
vllm serve ./Qwen3-0.6B-Q4_K_M.gguf \
--tokenizer Qwen/Qwen3-0.6B
Флаг --tokenizer — не украшение. Официальная документация рекомендует токенизатор базовой модели, потому что конвертация GGUF-токенизатора «отнимает много времени и нестабильна, особенно для моделей с большими словарями». Пропустите его — и обменяете однострочный флаг на долгий и капризный запуск.
Два GPU, одна модель: добавьте --tensor-parallel-size 2, чтобы расщепить тот же GGUF между обеими картами — тензорный параллелизм работает с GGUF так же, как с любым другим форматом.
Почему vLLM отказывается от GGUF на CPU?
Именно это удивляет сильнее всего. Репутация GGUF — CPU-first: это формат, на котором llama.cpp построил имя, запуская модели на ноутбуках и Raspberry Pi. Внутри vLLM ситуация обратная. Официальная таблица совместимости квантизаций помечает GGUF так:
| Железо | GGUF в vLLM |
|---|---|
| NVIDIA Volta / Turing / Ampere / Ada / Hopper | поддерживается |
| AMD GPU | поддерживается |
| Intel GPU | не поддерживается |
| CPU x86 | не поддерживается |
| CPU Arm | не поддерживается |
Источник: документация квантизации vLLM. Причина архитектурная: GGUF-путь vLLM деквантизирует блоки в GPU-ядра, построенные для пакетного инференса. CPU-ядра за этим нет, потому что vLLM — серверный движок, а не ноутбучная игрушка. Если в машине нет GPU, не поможет ни один флаг — используйте llama.cpp. А над аппаратным замком стоит ещё один — операционная система. Можно ли запустить vLLM в Windows? Нативно — нет: официальный путь это WSL2, а его обход стоит налога форка.
Что ломается: честный список ограничений
Та же страница документации несёт предупреждение, которое стоит процитировать дословно: «Поддержка GGUF в vLLM — в высшей степени экспериментальна и неоптимизирована». Конкретно:
- Покрытие квантизаций уже, чем у llama.cpp. K-кванты, которые реально скачивают (Q4_K_M и компания), работают; экзотические схемы — не факт. llama.cpp остаётся эталонной реализацией формата.
- Поддержка архитектур запаздывает. Новые семейства моделей сначала появляются в llama.cpp; плагин подтягивается позже.
- Нет ленивой загрузки в стиле mmap. llama.cpp отображает файл в память; vLLM грузит его как любой другой чекпоинт.
- Это в первую очередь фича экономии памяти. Документация подаёт GGUF как способ уменьшить расход VRAM, а не как ход к пропускной способности. Сколько памяти нужно конкретному файлу — веса, KV-кэш и вердикт по каждой карте — калькулятор VRAM для GGUF оценит ещё до загрузки.
Ничто из этого не спрятано. Всё лежит в первом абзаце официальной страницы GGUF — что больше, чем получает большинство экспериментальных фич.
vLLM или llama.cpp для GGUF: кто выигрывает?
Разные инструменты, которые случайно читают один файл:
| vLLM + GGUF | llama.cpp | |
|---|---|---|
| Инференс на CPU | нет | да, первоклассный |
| Одновременные пользователи | continuous batching, создано для этого | ограничено |
| Покрытие квантизаций | подмножество, экспериментальное | эталон |
| Установка | vLLM + плагин | один бинарник |
| Лучше всего для | один GPU, много пользователей | один пользователь, любое железо |
Если вы раздаёте модель команде с одного GPU, vLLM + GGUF позволяет переиспользовать те же файлы Q4_K_M, которыми обменивается весь local-LLM-мир — с бóльшим выбором в нашем гайде по квантизации GGUF. Полное сравнение движков — в llama.cpp vs Ollama и как запускать GGUF-модели локально.
Правило в одну строку: тот же файл, противоположные инстинкты — llama.cpp считает GGUF форматом, vLLM — опцией.