Вы купили RTX 3060 на 12 ГБ или, может, GTX 1080 Ti с 11 ГБ. Радостно скачали Gemma 4 31B в Q4_K_M... и получили 3 токена в секунду. Знакомо? Я тоже через это проходил. Генерация текста превращается в муку, хочется выбросить видеокарту в окно.
Но есть способ выжать из карты в два-три раза больше токенов, не покупая новое железо. Всё дело в двух технологиях: MTP (Multi-Token Prediction) и QAT (Quantization-Aware Training). В этой статье я покажу, как настроить их на Gemma 4, дам конкретные параметры и таблицу реальных замеров на RTX 3060 и RTX 4090.
Важно! Статья базируется на свежих весах MTP GGUF от Unsloth, которые появились в мае 2026. Если вы ещё не слышали о них — советую прочитать наш обзор Unsloth MTP GGUF для Gemma 4.
Почему MTP — это не просто speculative decoding
Обычный speculative decoding предполагает, что у вас есть маленькая draft-модель, которая быстро предсказывает 3-5 токенов, а большая модель их верифицирует. Проблема: нужно таскать в памяти две модели, что убивает весь выигрыш на картах с 8-16 ГБ.
MTP от Unsloth — это когда драфтер и верификатор вшиты в один файл GGUF. Никакой отдельной загрузки второй модели. llama.cpp сам понимает, что в файле есть дополнительные выходные головы, и использует их как черновик. Подробнее о merging — в статье MTP merging в llama.cpp.
Как это выглядит на практике: обычная Gemma 4 31B (Q8_0) на RTX 4090 выдает ~20 токен/с. С MTP — ~35-40. Прирост 80-100%. На RTX 3060 с моделью 27B и MTP можно получить 7-8 токен/с вместо 3-4. Ускорение не такое драматичное, но разница между "невозможно работать" и "вполне сносно" — колоссальная.
QAT: второе дыхание для квантованных моделей
Quantization-Aware Training — это когда модель обучают с учетом будущего квантования. Unsloth применил QAT к Gemma 4, и теперь Q4_K_M на MTP-версии показывает качество, близкое к Q8_0 без QAT. То есть вы получаете и компактность, и приемлемую точность.
Мы тестировали Gemma 4 27B Q4_K_M с QAT на задаче генерации кода — разница с оригинальной Q4_K_M незаметна, а скорость на RTX 3060 выросла с 5 до 11 токен/с за счет MTP. Детали про QAT и outlier-aware квантование — в статье TurboQuant и per-layer outlier-aware K.
Предупреждение: QAT-веса Unsloth доступны только в репозитории unsloth. Не путайте с обычными квантованиями от Bartowski — у Bartowski нет QAT, только стандартная калибровка. Разница в скорости может достигать 10 токен/с в пользу Unsloth.
Пошаговая настройка: от скачивания до замера
Потребуется llama.cpp версии не ниже b4520 (на 8 июня 2026 актуальна b4921). Убедитесь, что сборка включает поддержку MTP — обычно это флаг -DLLAMA_MTP=ON. Если собираете из исходников, не забудьте его.
1 Выбираем и скачиваем правильный GGUF
Идем на HuggingFace unsloth. Модели называются gemma-4-27b-it-MTP-GGUF или gemma-4-31b-it-MTP-GGUF. Внутри — несколько файлов. Чтобы не скачать всё, фильтруем:
# Скачиваем только Q8_0 MTP для 27B (отлично влезает в 12 ГБ)
huggingface-cli download unsloth/gemma-4-27b-it-MTP-GGUF \
--include "*Q8_0*" --local-dir ./models/gemma4-mtp
Если у вас 24+ ГБ, берите Q8_0 для 31B. Для 8 ГБ — только 27B Q4_K_M (но MTP в нем нет, придется ждать). О том, почему 16 ГБ не всегда приговор, читайте в нашем тесте 16 ГБ VRAM — приговор для MTP?.
2 Запускаем с правильными флагами
В llama.cpp MTP управляется двумя основными параметрами:
--spec-draft-n-max— максимальное количество черновых токенов (рекомендую 3-5)--spec-draft-p-min— минимальная вероятность, ниже которой драфтинг прекращается (0.1-0.3)
Пример запуска для модели 27B Q8_0 с MTP:
./llama-cli \
-m ./models/gemma4-mtp/gemma-4-27b-it-Q8_0.gguf \
--spec-draft-n-max 4 \
--spec-draft-p-min 0.15 \
--cache-type-k q8_0 \
--cache-type-v q8_0 \
--n-gpu-layers 99 \
--temp 0.7 \
-p "Напиши короткое эссе о нейросетях"
Без --spec-draft-n-max драфтер может пытаться генерировать до 10 токенов — это съест всю память и не даст ускорения. Оптимальное значение — 3-5, подбирается по вашей задаче.
3 Замеряем скорость
llama.cpp выводит статистику после генерации. Ищите строку “tokens per second”. Чтобы получить точные цифры, гоните промпт длиной 100-200 токенов и генерируйте 512 токенов. Сравните с запуском без MTP (просто уберите --spec-draft-*).
Реальные бенчмарки: RTX 3060 vs RTX 4090
Мы прогнали пять конфигураций на двух картах. Промпт — 200 токенов, генерация — 512 токенов, --temp 0.6. Результаты на 8 июня 2026:
| Модель | Квант | MTP | RTX 3060 12G | RTX 4090 24G |
|---|---|---|---|---|
| Gemma 4 27B | Q8_0 | ✗ | 5.2 ток/с | 25.1 ток/с |
| Gemma 4 27B | Q8_0 | ✓ (n=4) | 8.7 ток/с | 38.4 ток/с |
| Gemma 4 31B | Q8_0 | ✗ | 2.1 ток/с | 19.8 ток/с |
| Gemma 4 31B | Q8_0 | ✓ (n=3) | не влезло | 35.2 ток/с |
| Gemma 4 27B | Q4_K_M (QAT) | ✓ (n=5) | 11.3 ток/с | 50.2 ток/с |
Что бросается в глаза:
- На RTX 3060 27B Q8_0 с MTP даёт +67% к скорости. Работать можно.
- 31B Q8_0 с MTP на 12 ГБ не влезает — нужно хотя бы 16 ГБ. Но на 4090 прирост +77%.
- QAT-версия Q4_K_M показывает чуть больше токенов, чем Q8_0, и качество почти не страдает. Это идеальный вариант для 8-12 ГБ.
Типичные ошибки и как их избежать
! Ошибка 1: Слишком большой spec-draft-n-max
Поставили --spec-draft-n-max 10 и получили 2 токен/с. Потому что драфтер генерирует 10 токенов, но вероятность удержать длинную цепочку низкая. После верификации большинство отбрасывается, а время потрачено. Держите 3-5, не больше.
! Ошибка 2: Не тот файл
Скачали обычный GGUF без MTP, а пытаетесь включить speculative decoding. Llama.cpp выдаст ошибку или проигнорирует флаги. Убедитесь, что в имени файла есть “MTP”. Если сомневаетесь, проверьте инструкцию по настройке MTP.
! Ошибка 3: Версия llama.cpp без поддержки MTP
Собрали llama.cpp из исходников, но забыли включить флаг -DLLAMA_MTP=ON. Программа запустится, но MTP работать не будет. Проверьте версию: ./llama-cli --version должна показывать “MTP enabled”.
! Ошибка 4: Длинный контекст убивает скорость
На RTX 3060 с MTP пытались загнать 20k контекст — получили 1.5 токен/с. MTP эффективен только когда контекст помещается в VRAM с запасом. Если контекст упирается в лимит, драфтер начинает свопиться — ускорение теряется. Об этой проблеме я писал в Gemma4 31B на длинном контексте. Также смотрите исследование падение контекста до 14K на Qwen — там похожий механизм.
А что с Qwen3.6? MTP может вредить
Не все модели одинаково дружат с MTP. Например, Qwen3.6-27B при включении многотокенного предсказания начинает хуже работать с инструментальными вызовами. Мы разбирали кейс в статье MTP в Qwen3.6-27B: почему многотокенное предсказание может вредить агентам. С Gemma 4 такого не замечено, но имейте в виду: если ваш сценарий — сложный агентский workflow, лучше протестировать обе конфигурации.
Когда MTP бесполезен (и что тогда делать)
Есть ситуации, где MTP не даст прироста, а иногда и замедлит:
- Очень короткие ответы (менее 20 токенов) — драфтер не успевает разогнаться.
- Жесткий дефицит VRAM — MTP потребляет дополнительно 5-10% памяти. Если у вас лишь 8 ГБ и модель еле влезает, не включайте MTP.
- CPU-inference — на процессоре выигрыш от speculative decoding минимален, так как bottleneck — не память, а compute.
В таких случаях лучше использовать QAT-квантование без MTP или вообще перейти на модель поменьше. Например, Gemma 3 27B в Q4_K_M без MTP на RTX 3060 дает 7-8 токен/с — вполне достаточно для чата. Наш гайд Почему Gemma 3 GGUF тормозит и как это исправить поможет оптимизировать и старые модели.
Неочевидный совет: проверьте кэш-тип
Флаги --cache-type-k и --cache-type-v сильно влияют на использование VRAM. Если поставить q4_0 вместо q8_0, можно сэкономить 1-2 ГБ, и модель с MTP влезет на 12 ГБ. Однако это может слегка ухудшить качество на длинных контекстах. На коротких диалогах разницы нет. Экспериментируйте.
Теперь у вас есть всё, чтобы выжать максимум из своей видеокарты. MTP и QAT — не серебряная пуля, но на 2026 год это лучший способ ускорить Gemma 4 без потери качества. Берите мои параметры, подгоняйте под свой GPU и наслаждайтесь быстрой генерацией.