Развернул Gemma 4 31B на одной 4090 48GB — и проверил, нужен ли Q8

от автора

В прошлой статье я собрал бенчмарк под свою работу, и в практике победила Gemma 4 31B — мгновенный отклик, дёшево, почти как у 744-миллиардного гиганта. Логичный следующий шаг: поднять её у себя в контуре и ответить на два вопроса, которые все задают и никто не меряет.

→ Нужен ли «честный» Q8, или хватает 4-бит? → Переживает ли нормально tool-calling квантизацию?

Спойлер: Q8 не дал ничего, а tool-calling держится — но не из-за кванта. Дальше — как разворачивал, на чём споткнулся, и цифры.

Железо и стек

Одна RTX 4090 на 48 ГБ (спот), llama.cpp, GGUF от Unsloth. Никакого vLLM/SGLang: для одного пользователя на одной карте llama.cpp сейчас — король, а их continuous batching и RadixAttention выстреливают только под конкурентной нагрузкой, которой у меня нет.

Квант: Q4-dynamic vs Q8

Ключевая деталь — это не наивный Q4. Unsloth Dynamic 4-bit (UD-Q4_K_XL) держит чувствительные слои в большей точности, а 4-бит уходит только туда, где это безопасно; по их KL-дивергенции это почти топ. Прогнал обе квантизации на тех же 50 задачах, тем же 3-судейным набором:

Q4-dynamic

Q8

Балл

0.735

0.742

Прошло задач

45/50

42/50

Tool-calling

1.00

1.00

tok/s

39.8

25.4

VRAM

27 ГБ

40 ГБ

Q8 дал +0.007 — это шум. В 1.6 раза медленнее, +13 ГБ видеопамяти (меньше места под контекст), и при этом Q4 прошёл задач даже больше. Прирост Q8 — микроскопический и только на доках/стратегии (+0.02–0.03). Все объективные задачи (код, SQL, инфра, tool-calling) — идентичны.

Вывод: на 48 ГБ можно запустить Q8 — но в моем случае не стоит. Dynamic-4bit = та же точность, вдвое меньше памяти, полный контекст, быстрее. «Честный Q8» здесь будет самообман.

Tool-calling: дело было не в кванте

Главный рычаг надёжности tool-calling оказался не в квантизации, а в одном флаге сервера: --jinja. Он включает родной chat-template модели, который и форматирует, и парсит вызовы инструментов. Без него tool-calling ломается хоть на Q4, хоть на Q8. С ним — 1.00 на обеих квантизациях.

То есть «4-бит ломает инструменты» — миф для Q4 без правильного шаблона. Dynamic-4bit + --jinja держит вызовы идеально.

Неожиданный бонус: локально — надёжнее, не только дешевле

Тот же бенчмарк через облачный API на 50 задачах развалился: 33% вызовов упали с APIConnectionError — прокси (или порт-форвард) не пережил длинный прогон. Локальные прогоны — ноль ошибок. Причина простая: при self-host кандидат отвечает напрямую, через прокси идут только судьи, то есть вдвое меньше точек отказа.

Суверенный деплой выигрывает не только в цене и задержке. Он выигрывает в воспроизводимости — а для бенчмарка это и есть всё.

Что в итоге запускать

Gemma 4 31B, Dynamic-4bit, llama.cpp + --jinja, на одной 48 ГБ карте. Мгновенный отклик (TTFT 0.39 с — быстрее облака), полностью в контуре, ноль внешних вызовов в рантайме. Это рабочая лошадь под ежедневный поток. → GLM-5.2 (744B) остаётся короной качества для самых тяжёлых решений — но это «отправь и жди» на чужих картах.

«Лучшая модель под мою работу» оказалась моделью, которую я держу на одной карте у себя — и которая на 4-битах отвечает не хуже, чем на 8.

ссылка на оригинал статьи https://habr.com/ru/articles/1051724/