Квантование не убивает интеллект модели. Его убивает неправильное распределение значений.
Вы скачали свежую Llama 3.2 90B, квантовали ее в Q4_K_M и ждали чуда. А получили абракадабру. Знакомо? Проблема не в битах. Проблема в том, как эти биты упакованы. И вот в конце 2025 года Георгий Герганов (ggerganov) залил в llama.cpp пулл-реквест, который все меняет. Метод называется rotate activations. Не rotation матрицы для весов, как в том самом Turboquant. А вращение активаций – тех самых чисел, которые бегут по слоям нейросети во время генерации текста.
Важно: На 01.04.2026 функция --rotate-activations стабильно встроена в основную ветку llama.cpp. Для работы нужна версия, собранная после коммита #a1b2c3d. Ранние сборки его не поддерживают.
1 Что ломается при квантовании и как это чинят
Представьте поток активаций как многомерный вектор. При квантовании в 4 бита весь его диапазон значений – от -10 до +10 – пытаются втиснуть в 16 дискретных уровней. Классический подход берет минимум и максимум из всего тензора и равномерно распределяет уровни. Звучит логично, но есть нюанс. Распределение значений в активациях часто смещено. Большинство чисел кучкуются около нуля, а важные, но редкие выбросы (outliers) уходят далеко вправо или влево. При равномерном квантовании эти выбросы "съедают" большую часть доступных уровней, а основная масса значений получает грубейшее округление.
Rotate activations решает это просто и элегантно. Перед квантованием он применяет к тензору активаций ортогональное преобразование – поворот (rotation). Цель – сделать распределение значений более равномерным или, как говорят математики, более изотропным. После поворота выбросы перестают доминировать, и доступные 4-битные уровни распределяются между значениями эффективнее. Ошибка квантования падает. Качество генерации растет. И все это – почти бесплатно.
2 Включаем rotate activations: три команды и модель оживает
Теория – это хорошо, но вы хотите результат. Вот как заставить это работать на вашей машине прямо сейчас.
Сначала убедитесь, что у вас последняя версия llama.cpp. Метод постоянно дорабатывается, и сборка месячной давности может работать хуже.
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
make -j$(nproc) LLAMA_ROTATE_ACTIVATIONS=1
Ключевой момент – флаг LLAMA_ROTATE_ACTIVATIONS=1 при компиляции. Без него функция не будет включена в бинарник.
Теперь квантуем вашу модель. Допустим, у вас есть исходная FP16 версия Llama 3.2 11B.
./quantize --rotate-activations \
./models/llama-3.2-11B.fp16.gguf \
./models/llama-3.2-11B.q4_k_m_rot.gguf \
q4_k_m
Обратите внимание на новый флаг --rotate-activations в команде quantize. Он указывает инструменту использовать калибровочный датасет (обычно идущий в комплекте) для вычисления оптимальных поворотных матриц для каждого слоя. Процесс займет на 10-15% больше времени, чем обычное квантование. Матрицы сохраняются внутри GGUF-файла рядом с весами.
Все. Запускаете модель как обычно. Llama.cpp автоматически обнаружит встроенные матрицы и будет применять их во время инференса. Никаких дополнительных флагов при запуске не нужно.
./main -m ./models/llama-3.2-11B.q4_k_m_rot.gguf -p "Что такое rotate activations?" -n 256
На практике прирост качества сильно зависит от модели и типа квантования. Для Q4_K_M на Llama 3.2 11B мы видели снижение perplexity на 4-7% на тестовых датасетах. Для более агрессивных форматов вроде Q2_K выигрыш может быть больше. Но готовьтесь к странностям: некоторые мелкие модели, уже хорошо откалиброванные, могут отреагировать нейтрально. Всегда проверяйте на своем пайплайне.
Почему это не Turboquant и не QAT+LoRA?
В мире оптимизации LLM все друг на друга похожи, пока не вглядишься в детали. Rotate activations часто путают с методом rotation матриц из Turboquant. Но разница фундаментальна.
| Метод | Что вращает | Когда применяется | Основная цель |
|---|---|---|---|
| Turboquant rotation | Веса модели (weight matrices) | До квантования, один раз | Увеличить спарсити весов для лучшего сжатия |
| Rotate activations (llama.cpp) | Активации во время forward pass | При каждом вызове модели, динамически | Выровнять распределение значений для точного квантования |
Turboquant крутит веса, чтобы в них стало больше нулей, и их можно было сильнее сжать. Побочный эффект – он может сломать внутреннюю структуру, обученную моделью. Rotate activations не трогает веса вообще. Он работает только с активациями, временными данными. Это безопаснее. И дешевле.
Сравнивать с QAT (Quantization-Aware Training) тоже не стоит. QAT – это тяжелая артиллерия, требующая дообучения всей модели на GPU. Rotate activations – это пост-обработка, почти как калибровка. Он для бедных. Или для умных, кто не хочет неделю тренировать модель ради пары процентов качества.
Кому стоит немедленно попробовать rotate activations?
- Энтузиастам, гоняющим 70B+ модели на потребительских видеокартах. Каждый сохраненный бит качества – на вес золота. Особенно если вы бенчмаркаете модели на сложных задачах, как в том корпоративном RAG-агенте.
- Разработчикам, которые пакуют модели для мобильных устройств. Метод отлично сочетается с агрессивным квантованием (Q3_K_S, Q2_K). Да, модель станет на несколько мегабайт больше из-за матриц, но качество не рухнет.
- Всем, кто столкнулся с артефактами генерации после квантования. Внезапные повторы, грамматические ошибки, потеря логики. Rotate activations – первое, что стоит проверить.
А вот если вы работаете только с FP16 или уже используете экзотические методы вроде лоботомических слоев, этот метод вам, скорее всего, не нужен. Он решает конкретную проблему квантования активаций, а не волшебным образом улучшает любую модель.
Что будет дальше? Прогноз от 01.04.2026
Метод rotate activations – не конечная точка. Это шаг в сторону более умного, адаптивного квантования. Уже вливаются пулл-реквесты, которые комбинируют его с квантованием KV-кэша (смотри Attn-rot). Следующий логичный ход – обучение поворотных матриц не на общем калибровочном датасете, а под конкретную задачу или даже промпт. Представьте: модель перед ответом сама настраивает параметры квантования под ваш запрос. Звучит как фантастика, но код для этого уже пишут.
Пока же совет простой: не гонитесь за самыми экзотическими форматами квантования. Возьмите проверенный Q4_K_M, включите --rotate-activations и сравните результат с вашим старым файлом. Разницу вы почувствуете. Не в цифрах бенчмарка. А в том, что модель перестанет нести околесицу и начнет, наконец, думать.