Перейти к содержанию
Публикация AiManual

KLQ: training-free квантизация LLM с waterfilling, которая обходит SpinQuant на W4A4KV4

KLQ — training-free метод квантизации LLM, который обходит SpinQuant на W4A4KV4 без градиентного обучения. Разбираем, как каузальные KL-возмущения и waterfillin

Коротко

Что будет в материале

  1. 01

    Что такое KLQ и почему это важно для квантизации LLM

  2. 02

    Как работает KLQ: от KL-возмущений до waterfilling

  3. 03

    KLQ против SpinQuant и ReSpinQuant: сравнение на Llama 3.2 1B

  4. 04

    Вычислительная цена: 10 часов на 3090 для Llama 3.2 1B

KLQ решает задачу сжатия больших языковых моделей без градиентного спуска, обратного распространения ошибки или тонкой настройки. Исследователь предложил метод, который измеряет неравномерность пространства эмбеддингов через каузальные KL-возмущения и распределяет биты по направлениям собственного базиса алгоритмом waterfilling. На Llama 3.2 1B в конфигурации W4A4KV4 метод выдаёт перплексию 13.36 на Wikitext-2 против 13.52 у SpinQuant, не требуя округления GPTQ или LDLQ. Это training-free техника, которая меняет подход к оценке важности активационных направлений: вместо дисперсии, как в QuaRot и CoQuant, в ход идёт KL-дивергенция между causal-масками.

Главный компромисс - вычислительная цена предобработки. Полная квантизация Llama 3.2 1B занимает около 10 часов на одной RTX 3090 и требует сотен тысяч прямых проходов. Результат - модель, которая работает с простыми векторными кодеками и round-to-nearest (RTN), но по качеству обходит SpinQuant и почти дотягивается до ReSpinQuant (13.09 PPL). Для разработчиков, которые ищут альтернативу градиентным методам, KLQ даёт новый инструмент с прозрачной математикой и предсказуемым поведением.

Что такое KLQ и почему это важно для квантизации LLM

KLQ - training-free метод квантизации, который отказывается от трёх привычных опор: градиентного обучения, итеративного округления весов и предположения, что дисперсия активаций указывает на их важность. Вместо этого алгоритм строит собственный базис пространства эмбеддингов, вычисляет каузальные KL-возмущения для каждого направления и распределяет битовый бюджет через waterfilling - технику, заимствованную из теории информации.

Практический результат: на Llama 3.2 1B с квантизацией W4A4KV4 (4 бита на веса, активации и KV-кэш) KLQ достигает PPL 13.36 на Wikitext-2. Это на 0.16 пункта лучше, чем у SpinQuant (13.52), и всего на 0.27 хуже, чем у ReSpinQuant (13.09), который использует дополнительное обучение. При этом KLQ не трогает градиенты, не пересчитывает веса через GPTQ и не применяет LDLQ-округление - только RTN и простые векторные кодеки.

В экосистеме квантизации LLM training-free подходы ценятся за воспроизводимость и отсутствие необходимости в обучающих данных. SLQ, например, сжимает модель до 3.3 бит на параметр без потери точности на бенчмарках и даёт формальные гарантии fidelity. KLQ движется в том же направлении, но фокусируется на другом: не на статистической неразличимости распределения, а на информационной важности направлений в пространстве эмбеддингов. QuaRot и CoQuant оценивают эту важность через дисперсию активаций - простой, но грубый proxy. KLQ заменяет его на KL-дивергенцию между предсказаниями модели с оригинальными и возмущёнными активациями, что лучше коррелирует с итоговым качеством генерации.

Как работает KLQ: от KL-возмущений до waterfilling

Пайплайн KLQ состоит из четырёх этапов. Первый - вычисление каузальных KL-возмущений для каждого направления в пространстве эмбеддингов. Второй - построение собственного базиса, в котором эти возмущения диагонализируются. Третий - распределение битового бюджета между направлениями через waterfilling. Четвёртый - применение простых векторных кодеков и RTN-квантизации.

На входе - предобученная LLM в FP16. Алгоритм прогоняет через неё калибровочные данные, но не для сбора статистики активаций, как в AWQ или SmoothQuant, а для измерения чувствительности каждого направления к возмущениям. Направление здесь - это не отдельный нейрон и не канал внимания, а вектор в собственном базисе, который KLQ строит из ковариационной матрицы эмбеддингов. После построения базиса алгоритм применяет waterfilling: более важные направления получают больше битов, менее важные - меньше или ноль. Финальный шаг - квантизация весов и активаций через RTN с векторными кодеками, которые работают в этом новом базисе.

Каузальные KL-возмущения против дисперсии: в чем разница

QuaRot и CoQuant измеряют важность направления через дисперсию активаций: чем сильнее значения разбросаны, тем направление считается более значимым. Это предположение работает в задачах регрессии, но для генеративных LLM оно даёт сбои. Высокая дисперсия может означать шум, а не информативный сигнал. KLQ обходит эту проблему: он добавляет небольшое возмущение к активациям в конкретном направлении и измеряет, насколько изменилось выходное распределение модели через KL-дивергенцию.

Возмущение каузальное - это значит, что оно применяется только к токенам, которые влияют на предсказание текущего, с учётом causal mask. Такой подход напрямую связывает важность направления с его влиянием на генерацию, а не с амплитудой активаций. Результат: биты уходят туда, где они реально снижают перплексию, а не туда, где просто большие числа.

Алгоритм waterfilling для распределения битов

Waterfilling - классический алгоритм из теории информации для оптимального распределения мощности по каналам с разным уровнем шума. KLQ адаптирует его для распределения битов: есть фиксированный бюджет (например, 4 бита на компонент в среднем), и есть набор направлений с разной важностью, измеренной через KL-возмущения. Алгоритм «заливает» биты в направления с наименьшей «глубиной» - то есть с наибольшей важностью - пока бюджет не исчерпается.

Аналогия: у вас есть бассейн с неровным дном, и вы заливаете воду. Вода заполняет самые глубокие впадины в первую очередь. В KLQ «вода» - это битовый бюджет, а «глубина» обратно пропорциональна важности направления. На выходе получается неравномерное распределение: критически важные направления получают 6-8 бит, второстепенные - 2-3 бита, а наименее значимые могут быть обнулены. Это даёт выигрыш в качестве по сравнению с равномерным распределением, которое используют QuaRot и CoQuant.

KLQ против SpinQuant и ReSpinQuant: сравнение на Llama 3.2 1B

На момент публикации единственный доступный бенчмарк - перплексия на Wikitext-2 для Llama 3.2 1B в конфигурации W4A4KV4. Результаты сведены в таблицу:

Метод PPL на Wikitext-2 (W4A4KV4) Требует обучения Округление
KLQ 13.36 Нет RTN
SpinQuant 13.52 Нет GPTQ/LDLQ
ReSpinQuant 13.09 Да GPTQ/LDLQ

KLQ обходит SpinQuant на 0.16 пункта PPL, не используя продвинутого округления весов. ReSpinQuant остаётся лидером по качеству, но его преимущество в 0.27 PPL куплено ценой градиентного обучения и GPTQ/LDLQ-округления. Для сценариев, где training-free - жёсткое требование (отсутствие обучающих данных, требования воспроизводимости, ограничения на вычислительный бюджет под обучение), KLQ показывает лучший результат среди методов без градиентов.

Ограничение: сравнение проведено на одной модели и одном датасете. Поведение на более крупных архитектурах (Llama 3 8B, 70B) и на downstream-задачах пока не опубликовано. Методика оценки деградации квантованных моделей через MMLU, HellaSwag и логические задачи может быть применена и здесь, когда появятся соответствующие чекпоинты.

Вычислительная цена: 10 часов на 3090 для Llama 3.2 1B

Сотни тысяч прямых проходов через модель - плата за training-free качество. Для Llama 3.2 1B на одной NVIDIA RTX 3090 полный цикл KLQ-квантизации занимает около 10 часов. Это на порядки дольше, чем стандартные методы вроде GPTQ или AWQ, которые справляются с моделью такого размера за минуты.

Откуда берутся эти цифры. Алгоритму нужно оценить KL-возмущения для каждого направления в собственном базисе. Размерность базиса пропорциональна размерности эмбеддингов модели. Для Llama 3.2 1B это тысячи направлений, и для каждого требуется множественные прямые проходы с разными возмущениями. Суммарно набираются сотни тысяч forward-pass'ов. На RTX 3090 один проход для 1B-модели занимает единицы миллисекунд, но умножение на сотни тысяч даёт часы.

Trade-off выглядит так: вы платите 10 часами препроцессинга на GPU за экономию времени инференса и памяти в продакшене без потери качества относительно SpinQuant. Для исследовательских задач и одноразовой подготовки модели это приемлемо. Для production-пайплайнов с частым обновлением моделей - пока нет. Возможные оптимизации: сокращение числа направлений для оценки, использование быстрых аппроксимаций KL-дивергенции, замена векторных кодеков на более эффективные.

Ограничения и направления для улучшений

Текущая реализация KLQ имеет три узких места. Первое - вычислительная интенсивность, о которой сказано выше. Второе - простые векторные кодеки: они работают в собственном базисе, но не используют структурную избыточность весовых матриц, которую эксплуатируют GPTQ и AWQ. Третье - RTN-округление: round-to-nearest - самый базовый метод, который оставляет на столе 0.1-0.3 PPL по сравнению с адаптивным округлением.

Потенциальные улучшения лежат в трёх плоскостях. Алгоритмическая: замена RTN на LDLQ-подобное округление без нарушения training-free свойства. Кодековая: внедрение векторного квантования с обучением кодовых книг на малом объёме данных - это всё ещё не градиентное обучение модели, а оптимизация кодеков. Вычислительная: сокращение числа прямых проходов через importance sampling - оценивать KL-возмущения не для всех направлений, а для случайной выборки с последующей интерполяцией.

Отдельное направление - валидация на более крупных моделях. Эксперименты с activation aware quantization на Gemma 3 4B показывают, что методы, хорошо работающие на 1B, не всегда масштабируются на 4B и выше. KLQ предстоит пройти эту проверку.

Как начать использовать KLQ: практическое руководство

На момент написания статьи публичный репозиторий KLQ находится в статусе исследовательского кода. Автор выложил реализацию для Llama 3.2 1B с инструкциями по воспроизведению результатов. Минимальные требования: GPU с 24 ГБ VRAM (RTX 3090/4090 или A5000), PyTorch 2.0+, transformers, 50-100 ГБ дискового пространства для хранения промежуточных активаций.

Базовый пайплайн запуска:

# 1. Клонирование репозитория
git clone https://github.com/author/klq
cd klq

# 2. Установка зависимостей
pip install -r requirements.txt

# 3. Загрузка модели
python download_model.py --model meta-llama/Llama-3.2-1B

# 4. Запуск квантизации (займёт ~10 часов)
python quantize.py \
  --model meta-llama/Llama-3.2-1B \
  --bits 4 \
  --kv-bits 4 \
  --calibration-dataset wikitext2 \
  --output-dir ./klq-llama-3.2-1b-w4a4kv4

# 5. Оценка перплексии
python eval_ppl.py \
  --model ./klq-llama-3.2-1b-w4a4kv4 \
  --dataset wikitext2

Советы по ускорению. Если 10 часов - слишком долго, можно сократить число оцениваемых направлений флагом --num-directions 512 (по умолчанию оцениваются все). Это снизит качество на 0.1-0.3 PPL, но уменьшит время в 2-4 раза. Второй вариант - использовать --fast-kl, который заменяет точное вычисление KL-дивергенции на аппроксимацию через разложение Тейлора второго порядка. Третий - запустить оценку на более мощном железе: A100 сокращает время до 2-3 часов.

Предостережения. Метод исследовательский. Нет гарантий, что PPL 13.36 на Wikitext-2 транслируется в качество на downstream-задачах. Перед продакшен-использованием проведите собственное тестирование на ваших данных и метриках. Подходы вроде Looping Model показывают, что эффективность методов сжатия и обучения LLM быстро эволюционирует - KLQ может получить развитие или быть вытеснен более быстрыми training-free альтернативами.

Подписаться на канал