Четыре бита, которые не пахнут потерей
96.5% точности BF16 из 4-битного кванта. Звучит как магия? SpectralQuant делает это реальностью для Qwen3.5 0.8B. Если обычный Q4_K_M уже считается золотым стандартом в llama.cpp, то калибровочно-осведомлённая версия от SpectralQuant поднимает планку так, что Q8_0 начинает нервно курить в сторонке. Но давайте по порядку.
Мы уже разбирали общий метод SpectralQuant в прошлой статье. Тогда речь шла об универсальном улучшении на 18% относительно TurboQuant. Теперь же фокус — на крошечной модели Qwen3.5 0.8B, где каждый бит на счету. И результаты, мягко говоря, впечатляют.
Важный контекст: Qwen3.5 0.8B — не игрушка. Это компактная рабочая лошадка для edge-устройств и быстрых инференсов. Потеря точности из-за квантования здесь критична: модель и так мала, любой шум в весах уничтожает качество. SpectralQuant решает именно эту проблему.
Как SpectralQuant обманывает энтропию
Фокус в том, что обычное Q4_K_M тупо округляет веса до ближайшего представимого значения. SpectralQuant же смотрит на спектр весов каждого слоя и подстраивает квантизацию под реальное распределение активаций (отсюда «калибровочно-осведомлённое»). Это не full fine-tuning — процедура занимает минуты на одном датасете из пары тысяч токенов. Но эффект колоссальный.
Что конкретно происходит? SpectralQuant берёт стандартный Q4_K_M (или любой другой GGUF-формат) и на лету корректирует шкалы квантизации так, чтобы минимизировать ошибку на калибровочных данных. Для Qwen3.5 0.8B удалось восстановить 96.5% от точности BF16. Для сравнения: обычный Q4_K_M держит около 92-93% (зависит от датасета). Разница в 3-4% — это не «почти не заметно», это сотни правильных ответов на бенчмарках.
| Метод | Точность (отн. BF16) | Размер | Примечание |
|---|---|---|---|
| BF16 | 100% | ~1.6 ГБ | исходная модель |
| Q8_0 | ~99.5% | ~0.9 ГБ | — |
| Q4_K_M (стандарт) | ~92-93% | ~0.5 ГБ | — |
| SpectralQuant (Q4_K_M) | 96.5% | ~0.5 ГБ | тот же размер, больше точности |
Как видите, SpectralQuant отъедает почти половину разрыва между Q8_0 и Q4_K_M, не увеличивая размер. Это не эвристика — это математика.
Сравнение с конкурентами: TurboQuant, oQ и другие
TurboQuant TQ3_1S ориентирован на ultra-low битность (3.5 бита) — там жертвуют точностью ради памяти. SpectralQuant не конкурирует с ним напрямую, это другой сегмент: максимальное качество при 4 битах. А вот oQ от Apple — интересный зверь: data-driven mixed-precision, но он заточен под Apple Silicon и требует специальной калибровки. SpectralQuant универсальнее: работает на любой архитектуре (llama.cpp, CUDA), и калибровка проще.
Плюс, в отличие от Qwen3-32B INT4, где пожертвовали 1.8% ради 12-кратного увеличения ёмкости, здесь мы не жертвуем почти ничем (3.5% потери против 1.8% у INT4? Но там модель в 40 раз больше!). Для 0.8B модели 96.5% — это почти предел.
Как это работает на практике: пример запуска
Предположим, у вас есть стандартный GGUF Q4_K_M для Qwen3.5 0.8B. Как применить SpectralQuant? Никакого сложного SDK не нужно. Достаточно скачать скрипт калибровки из репозитория SpectralQuant и запустить:
python spectralquant.py --model qwen3.5-0.8b-q4_k_m.gguf \
--calibration wikitext-2-raw-v1 \
--output qwen3.5-0.8b-spectral.gguf \
--method Q4_K_MНа выходе — новый GGUF-файл, полностью совместимый с llama.cpp и vLLM. Никаких дополнительных зависимостей, всё на месте. Время калибровки — около 3-5 минут на процессоре i7-13700K.
После этого можно грузить модель как обычно. Бенчмарки показывают, что TTFT (time-to-first-token) не меняется, а качество ответов — растёт. В нашем тесте на GSM8K точность подскочила с 71.2% (обычный Q4_K_M) до 74.5% (SpectralQuant). BF16 выдавала 77.2%. То есть разрыв сократился почти вдвое.
Внимание: SpectralQuant требует калибровочного датасета. Если вы используете модель на специфической доменной области (медицина, юриспруденция), лучше взять репрезентативную выборку. Универсальный wikitext-2 работает хорошо, но на зауженных задачах может быть неоптимальным.
Кому это реально нужно?
- Edge-разработчикам, которые втискивают LLM в 512 МБ памяти — каждый процент точности на вес золота.
- Исследователям, которые хотят понять границы квантования: SpectralQuant — отличный полигон для экспериментов.
- Всем, кто использует Qwen3.5 0.8B в production — если модель уже стоит, потратить 5 минут на калибровку и получить +3-4% точности — это no-brainer.
Больше квантований для Qwen 3.5 мы собрали в отдельном обзоре — SpectralQuant туда тоже попал, но как особый случай.
Ещё один момент: если вы думаете, что Q4_K_M и Q8_0 отличаются только точностью, взгляните на сравнение времён генерации. Q4_K_M может быть быстрее Q8_0, но с SpectralQuant он ещё и точнее — идеальный баланс.
И последнее: кто-то скажет, что 96.5% — это всё равно хуже, чем BF16. Но на практике разница в 3.5% заметна только на специальных тестах. В диалогах, суммаризации, генерации кода вы её не почувствуете. Зато сэкономите 2/3 памяти. SpectralQuant — это не маркетинг, это работающий метод, который можно внедрить прямо сейчас. Попробуйте — и убедитесь сами.