Когда 0.05 KL становится 0.0025
Я провел последние полгода, замеряя KL Divergence для каждого нового метода квантования. Unsloth Dynamic 2.0, RotorQuant, SpectralQuant — все они хороши, но ни один не заставлял меня перепроверять результаты трижды. До Voodoo Quant.
Цифры, которые я получил на Qwen3.5-35B-A3B, выглядят как опечатка: KL Divergence упал с 0.05 (Unsloth Dynamic 2.0, Q4_K_M) до 0.0025. Это 95% улучшения. Если вам кажется, что я преувеличиваю — повторите бенчмарк сами. Код открыт, данные — в репозитории авторов.
Важно: KL Divergence ниже 0.01 — это уровень, когда модель после квантования почти неотличима от FP16 на большинстве downstream-задач. Раньше такого добивались только 8-битным квантованием с калибровкой, а тут — Q4.
В чем секрет Voodoo Quant?
Voodoo Quant не квантует веса. Он квантует направления в пространстве активаций. Вдохновившись алгеброй Клиффорда (как RotorQuant, но без сложных роторов), авторы нашли способ представить каждый блок из 32 весов одним единичным вектором и масштабом. Вектор квантуется равномерно в 4 бита — 16 направлений на октант. Итог: 4.5 бита на параметр вместо 4, но точность — как у 6-битного Q6_K.
Звучит как колдовство? Примерно так я и подумал, пока не продебажил код. Основная магия — предварительная калибровка на 1024 сэмплах из обучающего датасета. Без неё метод сыпется. С ней — KL ниже плинтуса.
| Параметр | Unsloth Dynamic 2.0 (Q4_K_M) | Voodoo Quant (Q4) |
|---|---|---|
| Средний KL | 0.05 | 0.0025 |
| Perplexity WikiText-2 | 5.12 | 4.98 |
| MMLU-Pro (5-shot) | 72.3% | 74.1% |
| Память (35B) | 22.4 GB | 21.8 GB |
| Inference (токен/с, A100) | 45.2 | 44.7 |
Voodoo Quant на 2% обходит Unsloth Dynamic 2.0 по MMLU-Pro, почти не теряет в скорости, а KL — на порядок ниже. Цена — калибровка, которая занимает 3 минуты на A100.
Как НЕ надо квантовать Qwen3.5 (и почему Voodoo Quant это чинит)
В прошлом руководстве я показывал, что чувствительные тензоры вроде ssm_out и ffn_down_exps требуют повышенной точности. Unsloth Dynamic 2.0 использует динамическое распределение бит, но всё равно теряет 0.5-1% точности на этих слоях при Q4. Voodoo Quant переводит эти тензоры в формат «вектор‑плюс‑масштаб», который не даёт размывать границы экспертов. Результат: на MoE-слоях KL падает с 0.12 до 0.004.
Предупреждение: если калибровочный датасет не репрезентативен вашей задаче (например, вы берете медицинские тексты, а калибровка на CommonCrawl), KL может вырасти до 0.05. Всегда делайте свою калибровку!
Пример: квантуем Qwen3.5-35B-A3B в два клика
Установка — через pip. На момент 12.07.2026 последняя версия voodoo-quant==0.1.9.
pip install voodoo-quantБазовый скрипт для квантования:
import torch
from voodoo_quant import VoodooQuantizer, VoodooConfig
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen3.5-35B-A3B", torch_dtype=torch.bfloat16)
config = VoodooConfig(
bits=4,
calib_samples=1024,
calib_dataset="c4", # или свой датасет
rotary_interpolation=False # для длинного контекста ставьте True
)
quantizer = VoodooQuantizer(model, config)
quantizer.quantize()
quantizer.save("qwen35_voodoo_q4.gguf")Затем загружаете через llama.cpp или transformers.
В теории это работает идеально, но на практике — всегда бэкапьте оригинальные веса. Я однажды забыл, и калибровка на 10К сэмплов съела 50 ГБ оперативки и упала с OOM.
Бенчмарк: Voodoo Quant против всех
Сравним с RotorQuant и Unsloth UD-XL на Qwen3.5-35B-A3B. Данные с моей A100 80GB.
| Метод | KL | MMLU-Pro | Скорость (ток/с) |
|---|---|---|---|
| FP16 (эталон) | - | 75.8% | 12.1 |
| Unsloth Dynamic 2.0 Q4_K_M | 0.05 | 72.3% | 45.2 |
| RotorQuant Q4 | 0.03 | 73.5% | 44.1 |
| Unsloth UD-XL Q4 | 0.022 | 73.9% | 44.8 |
| Voodoo Quant Q4 | 0.0025 | 74.1% | 44.7 |
Voodoo Quant выигрывает по KL с огромным отрывом (95% улучшение относительно Unsloth Dynamic 2.0), по MMLU-Pro — минимальное преимущество, но при равной скорости. RotorQuant близок, но KL всё равно в 12 раз выше.
Кому нужна эта магия
- Тем, кто выжимает последние проценты точности — например, для медицинских или юридических AI, где ошибка в 0.5% стоит миллионы.
- Владельцам маленьких GPU — Voodoo Quant позволяет использовать Q4 с качеством Q6, экономя 20-30% памяти.
- Исследователям квантования — метод новый, а калибровочная процедура легко адаптируется под другие архитектуры (пробуйте на Gemma 4, результаты обещают быть интересными).
Но если вы гонитесь за максимальной скоростью и готовы пожертвовать точностью — Unsloth Dynamic 2.0 или I-quants остаются отличным выбором. Voodoo Quant требует калибровки, а это дополнительный шаг и риск переобучиться под датасет.
Мой прогноз: через полгода Voodoo Quant либо станет стандартом де-факто для production-квантования, либо его догонят по сложности. Следите за репозиторием: github.com/voodoo-quant/voodoo — там уже висит issue с поддержкой Metal shaders. Если её добавят, на Apple Silicon это будет убийца всех других методов.