← На главную

Speculative KV coding сжимает KV cache LLM в 6–8 раз

04.06.2026 15:29 · hackernews

Длинные контексты становятся стандартом для LLM, но их работа упирается в KV cache — он хранит уже вычисленные ключи и значения, чтобы модель не пересчитывала их заново. Проблема: с ростом длины контекста хранение и передача кэша съедают всю память и пропускную способность. Можно сжимать cache lossy (как TurboQuant), но потеря качества непредсказуема. Lossless-сжатие восстанавливает кэш точно, и, по оценкам, энтропия bf16-кэша — около 11 бит на скаляр, то есть сырое представление можно сжать на 30%. Но если точность уже низкая (FP4), выигрыша почти нет — формат насыщен.

Авторы предлагают Speculative KV coding — метод lossless-сжатия кэша большой модели с помощью маленького предиктора. Идея в духе speculative decoding: быстрая модель (predictor) параллельно прогоняется на том же промпте и предсказывает, каким будет KV cache у целевой модели. Разница между истинным кэшем и предсказанием кодируется арифметическим кодером. Чем точнее предиктор, тем меньше бит нужно.

Практически самый простой предиктор — FP8-версия той же модели. Её кэш KV_quant лежит близко к полному KV_full, остаток мал и структурирован. Для кодирования используется гауссовская модель с μ = KV_quant и σ², оценённой на калибровочной выборке. На практике распределение остатков длиннохвостое, поэтому авторы добавляют смесь из трёх компонент: 95% узкий гаусс, 3% широкий гаусс (3σ) и 2% эмпирическое распределение bf16 для глубоких выбросов. Результаты на семействе Qwen3 (от 0.6B до 32B параметров) — битрейт падает с 6.87 до 5.98 бит на скаляр для BF16-кэша (сжатие в ~2.4–2.7 раза). При этом метод работает поверх lossy FP8-кэша: кодируя FP8-элементы (8 бит), получаем 2.05–2.59 бит на элемент, то есть сжатие в 3–4x сверх FP8. С учётом исходного сжатия BF16→FP8 суммарный выигрыш — 6–8x в зависимости от размера модели. Данные для held-out C4 после калибровки на 128 примерах.

Метод уже совместим с популярными фреймворками — vLLM, SGLang, TRT-LLM, а DeepSeek V4 по умолчанию использует FP8 KV cache. Главный вопрос — сможет ли предиктор окупить свои затраты. Возможные применения: кросс-датацентровая disaggregated prefill (где KV cache передаётся между серверами, и сжатие решает проблему узкого канала), увеличение prefix-кэша для общих промптов, оффлоад кэша в RAM через PCIe. В будущем авторы планируют пробовать другие предикторы (другое семейство, меньший размер) и улучшать модель остатков.

Читать оригинал →