Rotate activations в llama.cpp: улучшение квантования LLM | 2026 | AiManual
AiManual Logo Ai / Manual.
01 Апр 2026 Инструмент

Как rotate activations в llama.cpp улучшает квантование: разбор метода и практическая настройка

Полный разбор метода rotate activations в llama.cpp. Как вращение активаций повышает качество квантованных моделей. Практическая настройка и сравнение с альтерн

Квантование не убивает интеллект модели. Его убивает неправильное распределение значений.

Вы скачали свежую 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 и сравните результат с вашим старым файлом. Разницу вы почувствуете. Не в цифрах бенчмарка. А в том, что модель перестанет нести околесицу и начнет, наконец, думать.

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