Интерактивный TurboQuant - повернуть, затем квантовать
- title
- Интерактивный TurboQuant - повернуть, затем квантовать
- type
- summary
- summary
- Разбор линейки DRIVE -> EDEN -> TurboQuant от arkaung: поворот сводит выбросы к известному распределению, единая кодовая книга подходит для любых входов
- tags
- llm, quantization, kv-cache
- created
- 2026-05-13
- updated
- 2026-05-13
- lang
- ru
- translation_of
- interactive-turboquant
- source_updated
- 2026-05-13
- translated
- 2026-09-01
- translator
- lllm/antigravity/gemini-3.7-flash-medium
Интерактивная страница arkaung подробно разбирает математику TurboQuant - семейства методов сжатия KV-cache'а и embedding'ов, которое достигает 2-4 бит на координату без метаданных на каждый блок, без калибровки и без дообучения. Конструкция устроена просто и элегантно: входной вектор поворачивается случайным ортогональным преобразованием, а затем каждая повёрнутая координата квантуется по единой фиксированной кодовой книге, рассчитанной один раз под распределение после поворота. Материал выстраивает схему от базовых математических понятий (векторы, MSE, несмещённые оценки, Lloyd-Max), обосновывает каждый шаг ссылками на литературу и завершается практическими результатами на KV-cache'е модели Llama-3.1-8B.
Отдельная страница концепции - random-rotation-quantization. В этом конспекте собрано то уникальное, что даёт руководство arkaung: предыстория и преемственность методов, подробный разбор шагов и эмпирические результаты в сравнении с альтернативами.
Восемь базовых понятий
Их можно пропустить любому, кто знаком с линейной алгеброй: вектор, длина, скалярное произведение, MSE, несмещённая оценка, поворот, центральная предельная теорема, концентрация меры в пространствах высокой размерности (стандартное отклонение каждой координаты единичного вектора равно $1/\sqrt{d}$), скалярное квантование (каждый дополнительный бит уменьшает среднеквадратичную ошибку в четыре раза).
Несущий элемент всей конструкции - концентрация меры в пространствах высокой размерности. У точки, равномерно распределённой на единичной сфере в пространстве размерности d, каждая координата имеет распределение с математическим ожиданием 0 и стандартным отклонением $1/\sqrt{d}$. При d = 1000 стандартное отклонение любой отдельной координаты составляет ~0.032. Именно поэтому после поворота работает единая фиксированная сетка: поворот переносит каждый входной вектор на сферу радиуса $|x|_2$, а маргинальное распределение любой координаты равномерной точки на такой сфере представляет собой известную плотность бета-распределения, которая с ростом d сходится к гауссовскому.
Проблемная координата
Реальные обученные embedding'и распределены неравномерно. Несколько координат доминируют ("каналы-выбросы"). Фиксированная сетка на отрезке $[-L, L]$ либо отсекает выбросы (clipping), либо тратит разрешение впустую на основную массу значений. Промышленные квантизаторы (GPTQ, AWQ, KIVI, KVQuant) обходят это тем, что сохраняют масштаб и нулевую точку для каждого блока в полной точности. При b=3 бит и размере блока s=16 накладные расходы составляют b + 32/s = 5 эффективных бит на значение - наценка в 66% к номинальному значению b.
Случайный поворот "размазывает" выброс по всем координатам. После поворота ни одна координата больше не является выбросом - величина распределяется примерно поровну. Теперь фиксированная сетка работает без метаданных на каждый блок. Затраты памяти остаются такими же, как у наивного подхода, а качество восстановления - таким же, как у поблочного.
Преемственность
| Идея | Где впервые предложена |
|---|---|
| Случайный поворот + анализ бета-распределения после поворота | DRIVE (Vargaftik et al., NeurIPS 2021) |
| Рандомизированное преобразование Адамара как дешёвый практичный поворот | DRIVE 2021; EDEN 2022 |
| Кодовая книга Lloyd-Max на $\mathcal{N}(0,1)$ для повёрнутых координат | EDEN (Vargaftik et al., ICML 2022) |
| Несмещённая схема "поворот, затем квантование" через масштабирование по векторам | DRIVE 2021, §4.2, Theorem 3 |
| b-битный конвейер с фиксированной кодовой книгой | EDEN 2022 |
| Цепочка невязок: смещённое (b−1)-битное + несмещённое 1-битное | TurboQuant (Zandieh et al., 2025) |
| Постановка задачи для KV-cache'а и скалярного произведения | TurboQuant 2025; QJL (2024) для 1 бита |
| Кодирование через знак + норму для поиска по скалярному произведению в ANN | RaBitQ (Gao & Long, SIGMOD 2024) |
| Асимптотическая оптимальность относительно границы Алона - Клартэга | RaBitQ extended (Gao et al., 2024) |
DRIVE ввёл эту схему для однобитной оценки среднего в федеративном обучении. EDEN обобщил подход на b бит с помощью кодовых книг Lloyd-Max. RaBitQ пришёл к той же идее "повернуть, затем взять знак" из другой исследовательской области (поиск приближённых ближайших соседей, ANN). TurboQuant - это EDEN с фиксированным в константу масштабом вектора, переупакованный для сжатия KV-cache'а и поиска по скалярному произведению. Связь между этими двумя направлениями стала предметом публичной дискуссии в 2026 году (arXiv 2604.18555 и 2604.19528).
Разделение декодеров
Поворот у всех один и тот же. Различаются декодеры. Одни и те же повёрнутые координаты подаются на три разных варианта восстановления:
- Декодер среднего (DRIVE): сохраняет $\mathrm{sign}(\Pi x)$ и скаляр $S = |x|^2 / |\Pi x|_1$. Возвращает несмещённую оценку самого $x$.
- Декодер скалярного произведения (RaBitQ / QJL): сохраняет $\mathrm{sign}(\Pi x)$ и $|x|$. Во время запроса оценивает $\langle q, x\rangle$ по $\langle \Pi q, \mathrm{sign}(\Pi x)\rangle$ с нормирующим скаляром.
- Декодер MSE (EDEN / TurboQuant): проецирует каждую координату $(\Pi x)_i$ на ближайший из $2^b$ центроидов Lloyd-Max из универсальной кодовой книги, затем применяет $\Pi^\top$ для восстановления $\tilde x$.
Страница следует по ветке MSE - именно она используется для сжатия KV-cache'а.
Проблема смещения и TurboQuant-prod
Оптимальные по MSE квантизаторы занижают скалярные произведения вполне измеримым и устранимым образом: кодовая книга Lloyd-Max хранит условное математическое ожидание каждой ячейки, которое по модулю меньше крайних значений ячейки, из-за чего восстановленный вектор оказывается сжатой версией исходного. Скалярные произведения с таким сжатым вектором получаются меньше истинных. Если смещение представляет собой известную константу, на неё можно просто домножить. Именно эта конструкция обеспечивает несмещённость скалярного произведения в TurboQuant-prod.
Цепочка невязок в §7-8 - это тот же трюк, применённый дважды: сначала квантование смещённым (b−1)-битным кодом, затем квантование невязки несмещённым 1-битным кодом (QJL). Две кодовые книги, одна цепочка, суммарно b бит.
Эмпирические результаты
Полнота (recall) в задаче Needle-in-a-Haystack на модели Llama-3.1-8B-Instruct при 4-кратном сжатии памяти (статья TurboQuant, рис. 4):
| Метод | NiaH |
|---|---|
| Полный кэш (FP16) | 0.997 |
| SnapKV | 0.858 |
| PyramidKV | 0.895 |
| KIVI | 0.981 |
| PolarQuant | 0.995 |
| TurboQuant | 0.997 |
TurboQuant не уступает полной точности при 4-кратном сжатии. SnapKV и PyramidKV (два метода без квантования, которые вместо этого отсекают ключи внимания) теряют 10-14 процентных пунктов. KIVI (целочисленное квантование с поблочными масштабами) теряет 1.6 п. п.
На LongBench-V1: TurboQuant при 3.5 bpv сравнивается со средним значением для полной точности (50.06). При 2.5 bpv (сжатие в 6.4 раза) он отстаёт от полной точности менее чем на ~1% (49.44 против 50.06).
Где это встречается на практике
В ветке Reddit Qwen3.6 + MTP на 12 ГБ упоминаются флаги --cache-type-k turbo4 --cache-type-v turbo3 - это форк llama.cpp (llama-cpp-turboquant), в котором кодовая книга TurboQuant реализована как тип KV-cache'а. В комментарии Still-Notice8155 запускает Qwen3.6 на контексте 128K на GTX 1070 8GB во многом благодаря тому, что turbo4 уменьшает KV-cache с ~720 MB до ~590 MB при 131K. Стандартный llama.cpp поставляет типы KV-cache'а q4_0 / q8_0 / f16; TurboQuant обеспечивает заметно более высокое качество при том же бюджете памяти.
Связи
- random-rotation-quantization - отдельная страница концепции
- llm-quantization - квантование весов и KV-cache'а в целом; TurboQuant - одно из направлений
- kv-cache-sizing - выбор между q4_0 и q8_0; TurboQuant укладывается в тот же объём памяти при строго лучшей полноте
- reddit-qwen3-6-mtp-12gb - практическое применение turbo4 на GTX 1070
- arkaung-blog - сайт автора