Введение
Современные языковые модели (LLM) содержат миллиарды параметров, что создает огромные требования к вычислительным ресурсам. Например:
-
BERT: <1 млрд параметров
-
GPT-2: >1 млрд параметров
-
GPT-3: сотни млрд параметров
-
DeepSeek: 671 млрд параметров
Такие модели сложно запускать не только на домашних компьютерах, но даже на серверах среднего уровня. Квантизация – это метод уменьшения размера моделей для более эффективного использования памяти.
Форматы хранения чисел в нейросетях
Стандартные форматы
Формат |
Размер |
Применение |
---|---|---|
FP64 |
64 бита |
Научные вычисления с высокой точностью |
FP32 |
32 бита |
Стандартный формат для нейросетей |
FP16 |
16 бит |
Экономия памяти в 2 раза |
BF16 |
16 бит |
Похож на FP32 по структуре, но экономнее |
Квантизированные форматы
Формат |
Размер |
Экономия памяти |
---|---|---|
INT8 |
8 бит |
В 4 раза меньше FP32 |
INT4 |
4 бита |
В 8 раз меньше FP32 |
1.58-бит |
~1.58 бита |
До 20 раз меньше FP32 |
Существуют даже эксперименты с квантизацией до 2 бит и 1 бита!
Как работает квантизация
Квантизация преобразует числа с плавающей запятой в целочисленный формат с меньшей точностью.
-
Определяются границы (min/max) для весов модели
-
Все веса за пределами этих границ обрезаются до крайних значений:
-
Все значения > max → 127
-
Все значения < min → -128
-
-
Остальные значения распределяются по диапазону от -128 до 127 (для INT8)
-
Более частые значения получают более плотное распределение
Проблемы квантизации
-
Модель может выдавать некорректные результаты
-
Модель может зацикливаться
-
Потеря точности
QAT (Quantization-Aware Training)
Современный подход, при котором модель на этапе обучения “знает”, что будет квантизирована, что позволяет сохранить качество работы.
GGUF формат
GGUF – популярный формат для хранения квантизированных моделей, разработанный создателем Llama.cpp.
Структура GGUF файла
- Магические байты (4 байта)
- Версия (сейчас v3)
- Количество тензоров
- Метаданные (пары ключ-значение)
- Тензоры
- Контрольная сумма
Преимущества GGUF
-
Один файл содержит всё необходимое (веса, метаданные, токенизатор)
-
Memory mapping для быстрой загрузки моделей
-
Удобное хранение метаданных
-
Встроенная поддержка различных типов квантизации
Пример: Квантизация DeepSeek
DeepSeek – крупная языковая модель с 671 млрд параметров:
-
Оригинальный размер: 720 ГБ
-
После квантизации до 1.58 бит: 131 ГБ
Особенности 1.58-битной квантизации
-
Используются только 3 значения: -1, 0, 1
-
log₂(3) ≈ 1.58 бита
-
Не все слои квантизируются одинаково (иначе модель зацикливается)
Требования для запуска
-
Минимум 20 ГБ оперативной памяти
-
131+ ГБ свободного места на диске
-
Для комфортной работы: сумма RAM + VRAM ≥ 80 ГБ
Производительность
-
На CPU: очень медленно, но работает
-
RTX 4090 (24 ГБ VRAM): ~9-10 токенов/сек
-
Две H100: 13-14 токенов/сек (1 пользователь) или до 140 токенов/сек (много пользователей)
Сравнение качества
Интересный эксперимент: модель написала игру в стиле Flappy Bird до и после квантизации:
-
Оригинальная модель: код запускается, есть различные фигуры, подсчет очков
-
Квантизированная до 1.58 бит: практически такое же качество!
Заключение
Квантизация – мощный метод для уменьшения размера LLM без значительной потери качества. С развитием техник квантизации всё более крупные модели становятся доступными для запуска на обычном оборудовании.
Автор: rk-helper