vramkit: авторы заявили о сжатии весов и KV-кэша LLM

Авторы vramkit заявляют о двукратном уменьшении KV-кэша Qwen2.5-0.5B при росте perplexity на 0,1% в своём тесте. README также приводит результат lossless-кодирования одного int4-тензора; проверка моделей 7B+ и GPU-ядро остаются следующими шагами.

vramkit: авторы заявили о сжатии весов и KV-кэша LLM. Тематическая карточка Comrad404.

В README проекта vramkit, опубликованном 17 октября 2026 года, авторы описали два способа сокращать память, занятую при инференсе языковых моделей: lossless-кодирование уже квантованных весов и квантование KV-кэша. В тесте на Qwen2.5-0.5B они заявляют о двукратном уменьшении KV-кэша при росте perplexity на 0,1% для выбранной схемы. Все цифры приведены в README проекта и являются результатами авторов, а не независимого тестирования.

Два разных объекта сжатия

Веса — параметры модели, используемые при инференсе. KV-кэш хранит ключи и значения, накопленные в механизме attention по мере обработки последовательности. Для весов vramkit кодирует уже квантованные данные; для KV-кэша авторы сравнивают схемы квантования ключей и значений.

Весовой кодек: 2,676 бита на вес

README описывает для весов 32-битный range coder с двумерной адаптивной контекстной моделью: при кодировании 4-битного веса учитываются соседние элементы слева и сверху. Для тензора self_attn.o_proj модели Qwen2.5-0.5B в формате int4 авторы указывают 2,676 бита на вес против 4 бит у упакованного исходного представления — сокращение на 33,1% относительно этой базы. Восстановление авторы называют побитно точным.

Для того же тензора в таблице указаны 2,717 бита на вес у zstd -19 и 2,708 у xz -9e. README сообщает, что результат vramkit меньше этих значений соответственно на 1,5% и 1,2%. Это сравнение относится к одному тензору Qwen2.5-0.5B и указанным настройкам архиваторов; оно не показывает, что все веса любой модели сожмутся в той же пропорции.

Для ключей и значений нужны разные оси

В KV-кэше ключи и значения можно квантовать по разным осям. Авторы объясняют выбор для ключей устойчивыми выбросами в отдельных каналах: при масштабировании по токенам такие выбросы могут влиять на квантование остальных значений. В представленной схеме ключи квантуются по каналам, а значения — по токенам.

В таблице README для Qwen2.5-0.5B вариант int8 с поканальным квантованием ключей и поточным квантованием значений уменьшает память кэша в 2 раза; изменение perplexity относительно fp32 KV составляет +0,1%. При том же заявленном размере кэша наивный вариант int8, где и ключи, и значения квантуются по токенам, даёт +4,6%.

Другие строки таблицы показывают компромисс между размером кэша и метрикой: int8-ключи по каналам вместе с int4-значениями по токенам дают уменьшение памяти в 2,67 раза и рост perplexity на 1,4%. При int4 и для ключей, и для значений заявлено четырёхкратное уменьшение памяти, но рост perplexity составляет 25,6%. Эти цифры описывают разные схемы квантования, а не универсальную зависимость для всех моделей.

Условия и ограничения проверки

По README, авторы провели измерения на MacBook с Apple Silicon и CPU PyTorch. Для оценки KV-кэша они применяли сжатие ко всем слоям и усредняли perplexity по четырём раздельным окнам прозы. README также сообщает, что прежнюю оценку на повторяющемся тексте и по cosine similarity заменили на этот тест; прежние показатели качества поэтому не следует смешивать с текущей таблицей.

Результаты остаются авторскими измерениями на Qwen2.5-0.5B: независимой проверки в доступных материалах нет. В README полноценное GPU-ядро для работы со сжатым представлением в attention, включая варианты Metal или ROCm, и проверка моделей 7B+ названы следующими шагами проекта. Поэтому таблица пока не подтверждает выигрыш скорости инференса или аналогичное качество на более крупных моделях.