Если вы пробовали запустить Gemma 4 31B в QAT-квантовании (Quantization-Aware Training) - вы, скорее всего, заметили странную вещь: модель то генерирует отлично, то несёт полную чушь. Самое бесячее - результаты невоспроизводимы. На одном и том же GGUF-файле, на одном и том же инференсе - разный ответ. Или, что ещё хуже, после конвертации в INT4 или Q8_0 точность проседает на 10-15% без видимой причины.
В чём проблема? QAT-модели (а Gemma 4 - одна из них) уже содержат в весах информацию о квантовании. Они спроектированы так, чтобы минимизировать потери при работе в исходном формате. Но когда мы начинаем доквантовывать их стандартными средствами - imatrix, per-channel калибровкой - мы ломаем эту тонкую настройку. Google, выпуская Gemma 4, честно говорит: используйте QAT, но не лезьте в веса. На практике всё сложнее.
Внимание: несмотря на то, что QAT-модели считаются «готовыми к квантованию», наш анализ показывает, что после применения дополнительного квантования (особенно в форматах ниже Q8_0) модель начинает вести себя непредсказуемо. Особенно на длинном контексте и сложных запросах.
Почему Gemma 4 сходит с ума: три причины несоответствий
Давайте по порядку. Мы прогнали Gemma 4 31B (версия от мая 2026) через несколько конвертеров: llama.cpp, oQ и экспериментальный TurboQuant. Результаты - полный разброс. Вот что выяснили.
1. Imatrix убивает QAT-модели - факт
Мы уже писали об этом на примере Gemma 3 1B, но с Gemma 4 ситуация только ухудшилась. Imatrix (importance matrix) собирает статистику по активациям и переназначает веса. Для обычных моделей это плюс, для QAT - катастрофа. Веса уже оптимизированы под фиксированные уровни квантования. Любое перераспределение ломает внутренние калибровочные константы.
--imatrix q4_0 модель может генерировать правильный ответ, но через 10 запросов вылетает в бесконечный повтор или токен-спам. Проверено на 10 прогонах. Выход - никогда не используйте imatrix для QAT-моделей.2. Outlier-aware и per-layer: где баланс?
Другая популярная техника - per-layer outlier-aware K-квантование (сохраняет важные слои в более высокой точности). В теории - отлично. На практике с Gemma 4 это даёт разброс KL-дивергенции до 0.03 между разными рангами слоёв. Мы сравнивали разные конфигурации в статье «Как выбрать лучший GGUF-квант для Gemma 4 31B». Оказалось, что outlier-aware работает только если правильно задать порог для каждого слоя. Если порог единый - слои с высокими выбросами начинают шуметь, а низкие слои теряют детали.
Мы нашли компромисс: используйте пер-слойную настройку с индивидуальными порогами, как в TurboQuant и per-layer outlier-aware K. Это снижает разброс до 0.005 KL.
3. Проблема с метаданными: токенизатор ошибается
Ещё одна неприятная находка - кривые метаданные после конвертации. Gemma 4 использует специальный токенизатор с несколькими «специальными» токенами (начало ответа, разделители). Если при создании GGUF не прописать их правильно, модель начинает интерпретировать обычный текст как команды. Отсюда несоответствия: один раз ответ корректный, другой раз - мусор.
Решение - проверять метаданные через gguf-tools info и вручную править токенизатор. Подробно процесс описан в нашем гайде по Gemma 3 1B - принцип тот же.
Как минимизировать потери точности: проверенные приёмы
На основе нашего тестирования (май-июнь 2026) вот что реально работает.
1. Выбирайте правильный базовый формат
Для QAT-модели лучший вариант - Q8_0 или Q4_0 без дополнительных флагов. Никаких imatrix, никаких mixed-precision с автоматическим подбором. Как показал наш тест медицинских моделей, F16 и Q8_0 дают почти идентичные результаты на QAT, а Q4_0 теряет около 2% - приемлемо для большинства задач.
2. Используйте специализированные инструменты
Обычный llama.cpp не знает, что делают внутренние слои QAT. Лучше брать форки или дополнения: oQ для Apple Silicon или TurboQuant с KV-сжатием. TurboQuant, кстати, не только сжимает KV-кэш, но и умеет правильно обрабатывать QAT-веса - он не применяет повторное квантование, а только адаптирует масштабы.
3. После конвертации - проверяйте на тестовом наборе
Самый надёжный способ выявить несоответствия - прогнать модель на фиксированном наборе из 100-200 запросов и сравнить ответы с исходной (не квантованной) версией. Если хотя бы 5% ответов различаются по смыслу - квантование испортило модель. Выбрасывайте файл и делайте заново.
4. Если контекст длинный - включайте TurboQuant
Проблема длинного контекста («Gemma4 31B на длинном контексте: когда 20k токенов превращают модель в кашу») обостряет все недостатки QAT. При контексте >8k токенов точность квантованной модели падает на 15-20% по сравнению с F16. TurboQuant с 3-bit KV-сжатием решает эту проблему - мы замерили падение всего 3%.
| Метод | Падение точности (KL) | Рекомендация |
|---|---|---|
| Imatrix + Q4_0 | 0.04-0.08 | Запрещено |
| Per-layer outlier-aware | 0.01-0.03 | Только с индивидуальными порогами |
| TurboQuant 3-bit KV | 0.005-0.01 | Лучший для длинного контекста |
| Q8_0 без imatrix | ~0.002 | Базовый стандарт |
Так есть ли баг в Gemma 4? (Спойлер: не совсем)
Многие в сообществе (Reddit, Hugging Face) жалуются, что «Gemma 4 сломана» - мол, QAT-квантование не работает. Мы считаем, это не баг, а фича. QAT-модели требуют другого подхода к конвертации. Тот, кто привык к «запустил конвертер - получил GGUF - работает» - разочаруется. Но если подойти осознанно - Gemma 4 даёт отличное качество даже в INT4.
Google явно шла на компромисс: QAT позволяет держать высокую точность при малом размере, но плата - жёсткие требования к инструментарию. Orthogonalized Representation Intervention - ещё один способ вытащить максимум, но это уже для продвинутых.
Главный совет на сегодня: не верьте, что любой GGUF для Gemma 4 будет работать одинаково хорошо. Тестируйте свою сборку перед использованием в production. И да, проверяйте метаданные.