OSCAR RotationZoo: 2-bit KV Cache квантование — установка и применение | AiManual
AiManual Logo Ai / Manual.
09 Июн 2026 Инструмент

OSCAR RotationZoo: новое квантование KV Cache до 2 бит — инструкция по установке и применению

Разбираем OSCAR RotationZoo — квантование KV Cache до 2 бит со спектральным вращением. Инструкция по установке, сравнение с альтернативами, примеры для локально

Реклама
hor_partv1

Когда упираешься в лимит видеопамяти, а модель просит еще 16 тысяч токенов контекста — хочется закричать. KV Cache пожирает VRAM быстрее, чем Chrome — оперативку. Методов сжатия за последние полгода напилили столько, что глаза разбегаются. Но есть один свежий кандидат, который обещает не просто сжать, а сделать это так, чтобы модель не тупела.

Встречаем OSCAR RotationZoo — инструмент от Together AI (они же авторы OSCAR KV Quant), который затаскивает квантование KV Cache до 2 бит с помощью спектрального вращения. Звучит как магия, но на деле — математика, которая переворачивает тензоры так, чтобы 2-битное представление не разваливало логику. Давай разбираться, как это работает и как прикрутить к себе.

Почему 2 бита? И почему вращение?

Обычное квантование (INT8, FP8) — это грубая сила: делишь на максимальное значение и округляешь. Но KV Cache — штука нервная. Натриешь ошибку в одном слое — и по цепочке поплывёт всё. RotationZoo подходит иначе: сначала применяет ортогональное преобразование (спектральное вращение) к матрицам Key и Value. Что это даёт?

🤯
Вращение распределяет информацию равномерно по всем компонентам — после этого 2-битное квантование (с группой 32) теряет меньше 1% точности на бенчмарках вроде GSM8K и MMLU.

В теории это работает так: у Key/Value есть «горячие» и «холодные» числа. Обычное квантование режет хвосты. Вращение делает распределение более однородным — квантование становится менее болезненным. На практике — ты просто получаешь возможность пихать в тот же VRAM в 3–4 раза больше контекста.

Сравнение с альтернативами: что выигрываем?

Методов сжатия вагон: от бинарного квантования до lossless. Давай приземлим на землю.

Метод Биты на элемент Потери качества (при 4K ctx) Скорость инференса
Binary KV Cache 1.58 (бинарный) ~2-3% падение Быстро (логика на целых)
Delta-KV 4 ~0.5% Средняя (с дельтой и декомпрессией)
KVarN ~2.5 (групповое) ~1% Хорошая (оптимизация под GPU)
RotationZoo 2 ~0.8% Фактически без тормозов (фьюжн-ядро)

Binary KV Cache жмёт сильнее, но теряет заметно больше. Delta-KV точнее, но 4 бита — не рекорд. А RotationZoo берёт балансом: почти как беспотерьный, но всего 2 бита. Единственный минус — нужно дообучить или хотя бы калибровать вращение под архитектуру. Но авторы уже накатали готовые веса для популярных моделей.

Кстати, если интересно, как другие борются с квадратичной сложностью — загляни в статью про конец эпохи квадратичной сложности. Там много годных техник.

Ставим RotationZoo: пошаговая инструкция

Репозиторий называется togethercomputer/RotationZoo (на GitHub). Клонируем, ставим зависимости — всё стандартно. Но есть нюансы.

⚠️ RotationZoo собран под PyTorch 2.6+ и CUDA 12.8. На старых драйверах не взлетит. Проверь версии!

1 Клонируем и ставим

git clone https://github.com/togethercomputer/RotationZoo.git
cd RotationZoo
pip install -r requirements.txt

2 Загружаем калибровочные веса вращения

Для каждой архитектуры свои матрицы вращения. Авторы выложили предобученные для Llama 3, Qwen 3.5, Mistral. Качаем через huggingface-cli:

huggingface-cli download together/RotationZoo-llama3-rotation --local-dir ./rotations/llama3

Если модель не в списке — придётся калибровать самому. Скрипт calibrate.py натравит вращение на датасет. Процесс занимает минут 15 на A100.

3 Интегрируем в инференс

RotationZoo встраивается как плагин в популярные фреймворки. Например, для Hugging Face transformers достаточно обернуть модель:

from rotation_zoo import apply_2bit_kv_cache
from transformers import AutoModelForCausalLM

model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3.1-8B-Instruct")
apply_2bit_kv_cache(model, rotation_path="./rotations/llama3")
# Теперь модель использует 2-битный KV Cache
💡
Внутри происходит подмена модуля кэша на кастомный, который применяет вращение и квантование через fused-тритоновские ядра. Скорость инференса на длинных контекстах (32k+) падает всего на 3-5% относительно оригинального FP16 — почти незаметно.

Живой пример: Qwen 3.5 на 128K контекста на 24 ГБ

Возьмём Qwen 3.5 7B — модель с большим аппетитом. В FP16 её KV-кэш на 128K токенов жрёт около 18 ГБ. Иногда это влезает в одну RTX 4090 впритык, но с запасом для вывода уже не остаётся. Включаем RotationZoo — и кэш сжимается до ~3 ГБ. Разница колоссальная.

Но есть ложка дёгтя: при очень длинных диалогах (больше 200K токенов) ошибки квантования могут накапливаться. Авторы тестировали на 128K — всё ок, на 256K — лёгкая деградация. Совет: если гоняете model с длиннющей историей, лучше комбинировать RotationZoo с методиками вроде proveKV, который даёт 36x lossless — но это уже с потерей скорости.

А если у вас именно Qwen 3.5, то рекомендую почитать наш гайд по настройке Qwen 3.5 в llama.cpp — там есть нюансы про bf16 vs int8, которые тоже важны.

Кому это реально нужно?

Не всем. Если ты запускаешь маленькую модель с короткими промптами — RotationZoo избыточен. Но если:

  • ты мучаешься с контекстом 64K+ на одной карте;
  • хочешь запихнуть 70B модель в одну A100 за счёт сэкономленного VRAM;
  • пилишь RAG-систему, где хранишь гигабайты KV-кэша в памяти;
  • просто хочешь сэкономить бюджет на облачных GPU.

Тогда RotationZoo — твой кандидат. Единственное, что напрягает: пока нет встроенной поддержки в llama.cpp (авторы планируют PR), и для production нужно самому компилировать тритоновские ядра. Но это вопрос времени.

Если хочется попробовать что-то ещё из трендов — глянь гид по методам экономии памяти. Там полный обзор, включая более ранние версии.

P.S. Помнишь историю с Q8 KV cache для vision-моделей? Там тоже спектральное вращение помогало не убить перцептивное качество. Похоже, концепция начинает побеждать.

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