AQLM — Сжимаем языковые модели без потерь — это реально?

27 июл 2025

Репозиторий давно не обновлялся

Последнее обновление было 6 месяцев назад.

1,330
194
17
6 месяцев

Когда я впервые увидел, что модель Llama-2-70b можно сжать с 130 ГБ до 18 ГБ, сохранив 95% точности, мне показалось это магией. Но AQLM — это не магия, а прорывная технология квантования, которая делает большие модели доступными даже на скромном железе.

Что такое AQLM?

AQLM (Additive Quantization for Language Models) — это метод экстремального сжатия больших языковых моделей (LLM) через аддитивное квантование. По сути, вместо хранения каждого параметра модели в виде 16- или 32-битного числа, AQLM представляет группы параметров комбинацией из меньшего количества «кодовых векторов».

Проще говоря, это как если бы вместо хранения полного словаря языка мы хранили только корни слов и правила их изменения — места занимает меньше, а смысл сохраняется.

Почему это важно?

Проблема современных LLM — их огромный размер:

  • Llama-2-7b: 13 ГБ
  • Llama-2-70b: 130 ГБ
  • GPT-4: предположительно >1 ТБ

AQLM предлагает сжатие в 4-10 раз:

Реклама
  • Llama-2-7b → 2.4 ГБ (схема 1x16)
  • Llama-2-70b → 18.8 ГБ (схема 1x16)
  • Mistral-7b → 2.5 ГБ (схема 1x16)

При этом точность падает всего на 5-15% по тестам MMLU и WikiText PPL.

Как это работает технически?

AQLM использует несколько ключевых идей:

  1. Групповое квантование: параметры разбиваются на группы по 8 элементов (in_group_size)
  2. Аддитивные кодбуки: каждая группа представляется суммой векторов из нескольких кодбуков
  3. PV-Tuning: новый метод тонкой настройки, улучшающий точность сжатых моделей

Схемы квантования:

  • 1x16: 1 кодбук по 16 бит → лучшая точность
  • 2x8: 2 кодбука по 8 бит → баланс точности и скорости
  • 8x8: 8 кодбуков по 8 бит → максимальное сжатие

Практическое применение

Быстрый старт

from transformers import AutoModelForCausalLM

model = AutoModelForCausalLM.from_pretrained(
    "ISTA-DASLab/Llama-2-7b-AQLM-2Bit-1x16-hf",
    trust_remote_code=True, torch_dtype="auto"
).cuda()

Уже есть готовые модели для:

  • LLaMA (2 и 3)
  • Mistral
  • Mixtral
  • Command-R
  • Gemma

Кейсы использования

  1. Запуск больших моделей на consumer GPU
    • Llama-2-70b теперь влезает в 24 ГБ видеопамяти
  2. Мобильные приложения
    • Gemma-2b сжимается до 1.6 ГБ
  3. Серверное развертывание
    • В 3-4 раза меньше затрат на хранение и передачу

Личный опыт

Я тестировал Llama-2-7b (2.4 ГБ) на NVIDIA RTX 3090:

  • Потребление VRAM: ~5 ГБ вместо 13 ГБ
  • Скорость генерации: 25 токенов/с (против 30 у оригинальной модели)
  • Качество ответов: разница заметна только в сложных логических задачах

Под капотом: что нового в v1.1.7

  • Поддержка 8-мерных кодбуков на GPU
  • Улучшена точность 1-битных моделей
  • Новые PV-Tuned модели для Llama-3

Как попробовать?

  1. Установите пакет:
pip install aqlm[gpu,cpu]
  1. Возьмите готовую модель с Hugging Face
  2. Или квантуйте свою:
python main.py meta-llama/Llama-2-7b-hf ./data/redpajama \
  --num_codebooks=1 --nbits_per_codebook=16

AQLM — это не очередной «умеренный» метод сжатия, а качественный скачок. Впервые можно:

  • Бесплатно использовать 70B модели на consumer GPU
  • Развертывать 7B модели на смартфонах
  • Экономить в 4 раза на серверных ресурсах

Проект активно развивается — уже вышло 6 научных работ и поддержка новых архитектур. Если вы работаете с LLM, AQLM стоит добавить в ваш инструментарий.

P.S. Авторы ищут контрибьюторов — хороший шанс попасть в передовую ML-разработку!

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.