AQLM — Сжимаем языковые модели без потерь — это реально?
Репозиторий давно не обновлялся
Последнее обновление было 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 использует несколько ключевых идей:
- Групповое квантование: параметры разбиваются на группы по 8 элементов (in_group_size)
- Аддитивные кодбуки: каждая группа представляется суммой векторов из нескольких кодбуков
- 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
Кейсы использования
- Запуск больших моделей на consumer GPU
- Llama-2-70b теперь влезает в 24 ГБ видеопамяти
- Мобильные приложения
- Gemma-2b сжимается до 1.6 ГБ
- Серверное развертывание
- В 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
Как попробовать?
- Установите пакет:
pip install aqlm[gpu,cpu]
- Возьмите готовую модель с Hugging Face
- Или квантуйте свою:
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-разработку!
