Запустит ли vLLM GGUF? Да — только на GPU

Запустит ли vLLM GGUF? Да — через официальный плагин и только на GPU. Синтаксис serve, ловушка с токенизатором, аппаратные лимиты и когда всё ещё выигрывает llama.cpp.

HUMANавтор @mrsaynothing33d3 мин чтения

На прошлой неделе читатель спросил, почему его 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 — опцией.