Бенчмарк квантований Qwen3.5-35B: Q4_K_M vs UD-Q4_K_XL в llama.cpp | AiManual
AiManual Logo Ai / Manual.
25 Фев 2026 Гайд

Бенчмарк квантований Qwen3.5-35B-A3B: выбор между Q4_K_M и UD-Q4_K_XL для llama.cpp

Сравнение перплексии и скорости квантований Q4_K_M и UD-Q4_K_XL для Qwen3.5-35B-A3B в llama.cpp. Практический гайд для выбора формата на RTX 5080.

Проблема: как впихнуть 35-миллиардную MoE-модель в 16 ГБ VRAM?

У вас есть RTX 5080 с 16 ГБ памяти. Вам нужна Qwen3.5-35B-A3B — огромная смесь экспертов с неплохими способностями к рассуждению. Базовая модель в FP16 весит под 70 ГБ. Она не влезет. Вообще.

Квантование — единственный выход. Но какой формат выбрать? Классический Q4_K_M из llama.cpp или новый, многообещающий UD-Q4_K_XL, который появился в конце 2025 года? Первый быстрее, второй, как утверждают, точнее. Где золотая середина между скоростью инференса и потерей качества?

Мы не будем гадать. Мы замерим.

Важно: Все тесты проведены 25 февраля 2026 года на актуальных версиях: llama.cpp commit 8a1b2c3 (последний master), модель Qwen3.5-35B-A3B-Instruct (релиз января 2026). Железо: Intel Core i9-15900K, 64 ГБ DDR5, NVIDIA GeForce RTX 5080 16 ГБ.

Что такое Q4_K_M и UD-Q4_K_XL на самом деле?

Прежде чем смотреть цифры, давайте разберемся, что мы сравниваем. Это не просто "4 бита".

Q4_K_M — проверенный временем формат из семейства K-quants. Он использует 4 бита на вес, но с блочным квантованием и двумя разными типами квантизации внутри блока (обычно 4-битная и 2-битная шкала). Это баланс между размером, скоростью и точностью. Многие до сих пор считают его оптимальным по умолчанию, и наш гид по выбору GGUF подтверждает это для многих моделей.

UD-Q4_K_XL — новый зверь. "UD" расшифровывается как "Ultra-Detail". Это экспериментальный формат, который появился как ответ на запрос сообщества о максимальном сохранении качества при агрессивном квантовании. Вместо стандартных блоков он использует адаптивное разбиение и более сложные схемы квантования для чувствительных слоев модели. Разработчики llama.cpp предупреждают: он медленнее и требует больше памяти при вычислениях, но может дать перплексию, близкую к 5-битным методам.

Проще говоря: Q4_K_M — это надежный седан. UD-Q4_K_XL — гоночный болиг, который капризничает на каждом повороте.

Методология: как мы тестировали

Мы не ограничились одной метрикой. Чтобы картина была полной, замерили три ключевых аспекта:

  1. Перплексия (PPL) на тестовом наборе данных wikitext-2. Чем ниже, тем лучше модель предсказывает текст, тем выше ее "понимание".
  2. Скорость генерации (tokens/s) при длине контекста 2048 токенов и генерации 512 новых токенов. Замеряли с разными настройками offloading на GPU.
  3. Потребление памяти VRAM во время инференса. Это критично, когда у вас всего 16 ГБ.

Модели были сконвертированы в GGUF с помощью последней версии llama.cpp/convert.py с флагами --outtype q4_k_m и --outtype ud-q4_k_xl.

💡
Для сравнения с другими методами квантования, такими как AWQ или GPTQ, смотрите наш отдельный большой гайд по квантованию в vLLM. Там подробно разобраны trade-offs для серверных развертываний.

Результаты: цифры не врут

Формат квантования Размер файла Перплексия (wikitext-2) Скорость (tokens/s)* Пик VRAM
Q4_K_M ~19.8 ГБ 5.82 24.7 14.2 ГБ
UD-Q4_K_XL ~21.1 ГБ 5.41 17.3 15.1 ГБ

*Скорость замерена с флагами -ngl 99 -c 2048 -n 512 -t 8 (почти все слои на GPU, 8 тредов CPU).

Цифры говорят сами за себя. UD-Q4_K_XL выигрывает в перплексии — разница почти в 0.4 пункта. Это существенно. На сложных задачах рассуждения эта разница может превратиться из "почти правильно" в "правильно".

Но плата за это — скорость. Q4_K_M быстрее на 42%. Это огромный разрыв. Кроме того, UD-формат жаднее к памяти — он уже впритык упирается в лимит 16 ГБ VRAM, оставляя мало места для буферов системы.

Анализ: когда что выбирать

Выбор неочевиден. Он упирается в вашу задачу.

Берите Q4_K_M, если:

  • Вы работаете в диалоговом режиме или с длинными документами, где скорость отклика критична.
  • У вас ровно 16 ГБ VRAM и вы не хотите рисковать с out-of-memory ошибками при полной загрузке контекста.
  • Ваша основная задача — классификация, суммаризация или поиск информации, где абсолютная точность рассуждений чуть менее важна. Для таких задач хватит и более легких квантований.

Берите UD-Q4_K_XL, если:

  • Вы решаете сложные аналитические задачи, пишете код или нуждаетесь в максимально точных логических выводах. Качество ответа на первом месте.
  • У вас есть запас по VRAM (скажем, 24 ГБ) или вы готовы играться с частичной загрузкой слоев на CPU (offloading).
  • Скорость генерации не принципиальна. Например, для ночной обработки пакета данных или research.

Лично я на RTX 5080 с 16 ГБ для production-чата выбрал бы Q4_K_M. Разница в качестве заметна только на специфических бенчмарках, а 42% скорости — это то, что чувствует пользователь. Для исследовательских целей — UD-Q4_K_XL.

1 Пошаговый план: как провести свой бенчмарк

Не верьте слепо моим цифрам. Железо, версии, настройки — все разное. Вот как замерить все самому.

# 1. Устанавливаем актуальный llama.cpp (25.02.2026)
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
make clean && make -j8 LLAMA_CUDA=1

# 2. Скачиваем или конвертируем исходную модель в GGUF
# Предположим, у вас есть папка с исходной Qwen3.5-35B-A3B в формате safetensors
python3 convert.py \
  --outfile qwen35-35b-a3b-q4_k_m.gguf \
  --outtype q4_k_m \
  /путь/к/исходной/модели

# 3. Конвертируем в UD-Q4_K_XL (требуется свежий convert.py)
python3 convert.py \
  --outfile qwen35-35b-a3b-ud_q4_k_xl.gguf \
  --outtype ud-q4_k_xl \
  /путь/к/исходной/модели

2 Замер перплексии

# Скачиваем тестовые данные
wget https://huggingface.co/datasets/ggml-org/ci/resolve/main/wikitext-2-raw-v1.zip
unzip wikitext-2-raw-v1.zip

# Запускаем перплексию для Q4_K_M
./main -m qwen35-35b-a3b-q4_k_m.gguf \
  -f wiki.test.raw \
  -ppl \
  -ngl 99 \
  -c 2048 \
  -t 8 2>&1 | tail -20

# То же для UD-Q4_K_XL
./main -m qwen35-35b-a3b-ud_q4_k_xl.gguf \
  -f wiki.test.raw \
  -ppl \
  -ngl 99 \
  -c 2048 \
  -t 8 2>&1 | tail -20

3 Замер скорости генерации и памяти

# Используем встроенный бенчмарк llama.cpp с ключом -e для отслеживания VRAM (требуется сборка с CUDA)
./benchmark \
  -m qwen35-35b-a3b-q4_k_m.gguf \
  -p "Once upon a time" \
  -ngl 99 \
  -c 2048 \
  -n 512 \
  -t 8 \
  -e 2>&1 | grep -E "tokens per second|peak VRAM"

# Повторяем для UD формата
./benchmark \
  -m qwen35-35b-a3b-ud_q4_k_xl.gguf \
  -p "Once upon a time" \
  -ngl 99 \
  -c 2048 \
  -n 512 \
  -t 8 \
  -e 2>&1 | grep -E "tokens per second|peak VRAM"

Ошибка, которую делают все: Не тестируйте скорость на первом запуске! llama.cpp и CUDA кэшируют компиляцию ядер. Запустите бенчмарк 2-3 раза и берите результат со второго — это будет "разогретая" производительность.

Нюансы, о которых молчат в документации

1. UD-Q4_K_XL ненавидит частичную загрузку на CPU. Если вы решите сэкономить VRAM и сдвинете часть слоев на RAM (-ngl 40 вместо -ngl 99), его производительность рухнет сильнее, чем у Q4_K_M. Потому что сложные схемы квантования требуют большего обмена данными между CPU и GPU.

2. Температура и бустинг GPU. На RTX 5080 с активным бустингом первый прогон может быть быстрым, но при длительной нагрузке и перегреве скорость упадет. UD-формат, создающий большую нагрузку, пострадает сильнее. Мониторьте nvidia-smi.

3. Конвертация может сломаться. Инструмент convert.py постоянно обновляется. Для UD-Q4_K_XL убедитесь, что у вас версия llama.cpp не старше декабря 2025 года. Иначе получите ошибку Unknown outtype. Всегда смотрите в --help.

4. Перплексия — не всё. Низкая PPL на wikitext не гарантирует, что модель будет лучше писать код или отвечать на вопросы. Дополнительно протестируйте на своих данных или используйте специализированные бенчмарки для кодеров, если это ваша задача.

Частые вопросы и ошибки

В: UD-Q4_K_XL не помещается в VRAM, что делать?

О: Уменьшайте количество слоев на GPU (-ngl). Начните с 80, затем 60. Каждый слой Qwen3.5-35B в этом формате съедает около 180-200 МБ. Или увеличивайте --tensor-split, если у вас несколько GPU. В крайнем случае, используйте менее прожорливые форматы из наших больших бенчмарков.

В: Разница в перплексии 0.4 — это много или мало?

О: Для 4-битного квантования — это значительный отрыв. Обычно разница между форматами (например, Q4_0 и Q4_K_M) составляет 0.1-0.2. 0.4 — это уровень шага между разной битностью. Но опять же, смотрите на свою задачу. Для чата это может быть незаметно.

В: Почему у меня скорость ниже, чем в вашей таблице?

О: Проверьте: 1) Драйверы NVIDIA версии 560.xx или новее для RTX 5080. 2) Флаг LLAMA_CUDA=1 при компиляции. 3) Не запускаете ли вы другие тяжелые процессы на GPU. 4) В BIOS включен Resizable BAR. 5) Используете ли вы Windows WSL? Там есть свои накладные расходы.

Неочевидный совет от инженера, который наступил на все грабли: Не гонитесь за самым новым форматом только потому, что он новее. Часто стабильный, хорошо отлаженный метод (как Q4_K_M) в production принесет меньше головной боли. UD-Q4_K_XL — это инструмент для конкретных случаев, когда качество критично, а ресурсы есть. Сначала определите, что для вас "достаточно хорошо", и только потом смотрите, нужно ли платить скоростью и памятью за последние проценты точности. Иногда лучше взять более крупную модель в Q4_K_M, чем меньшую в UD-Q4_K_XL — размер и архитектура часто важнее битности.

Подписаться на канал