Квантизация
Подробно о методах сжатия языковых моделей для запуска на ограниченном железе.
🇬🇧 English version: quantization.md
Что такое квантизация
Квантизация - это процесс уменьшения точности представления весов нейронной сети (обычно с 32-битной плавающей точки до меньшего количества битов) для уменьшения размера модели и ускорения вычислений при минимальной потере качества.
Почему это важно для локального запуска
Без квантизации большие языковые модели просто не поместятся в оперативную память большинства потребительских устройств:
- GPT-3 175B в формате FP32 занял бы ~350 GB памяти
- Даже 7B модель в FP32 занимает ~14 GB
- После квантизации до 4 бит - всего ~3.5-4.5 GB
Основные форматы квантизации
GGUF (GPT-Generated Unified Format)
Основной формат для llama.cpp и сопутствующих инструментов (Ollama, LM Studio, etc.)
Kванты (K-quants) в GGUF
Это специальные схемы квантизации, разработанные для llama.cpp, которые используют разное количество битов для разных типов весов в зависимости от их важности.
| Тип | Среднее битов/вес | Описание | Когда использовать |
|---|---|---|---|
| Q2_K | 2.0 | Очень низкое качество | Только при экстремальной нехватке памяти |
| Q3_K_S | 2.5 | Низкое качество | Очень ограниченные ресурсы |
| Q3_K_M | 3.0 | Низкое-среднее качество | При очень tight fit |
| Q4_0 | 4.0 | Удовлетворительное | Базовый 4-bit uniform |
| Q4_K_S | 4.3 | Хорошее качество | Баланс размера и качества |
| Q4_K_M | 4.8 | Отличное качество | Рекомендуется по умолчанию |
| Q4_K_M | 4.8 | Отличное + | Хороший выбор для большинства задач |
| Q5_0 | 5.0 | Очень хорошее | Когда нужно чуть больше качества |
| Q5_K_S | 5.3 | Отличное качество | Превосходный баланс |
| Q5_K_M | 5.5 | Отличное + | Для требовательных задач |
| Q6_K | 6.0 | Высокое качество | Для кода, математики, точных вычислений |
| Q8_0 | 8.0 | Почти как FP16 | Когда памяти достаточно и нужно максимум качества |
| F16 | 16.0 | Максимальное качество | Эксперименты, сравнение baseline |
Как это работает на примере
В Q4_K_M:
- Большинство весовых тензоров квантуются до 4 бит
- Некоторые критические тензоры (например, в слоях внимания) используют больше битов (6 или 8)
- Среднее значение получается ~4.8 бита на вес
- Это дает качество близкое к 5-битной uniform квантизации, но с размером ближе к 4-битной
Сравнение качества (пример для 7B модели)
| Метод | Размер | Perplexity (ниже = лучше) | Относительная скорость | |—|—|—|—| | F16 (FP16) | ~13.5 GB | Baseline (5.12) | 1.0x | | Q8_0 | ~10.4 BC | 5.15 (~+0.6%) | ~0.9x | | Q6_K | ~7.8 GB | 5.20 (~+1.6%) | ~0.7x | | Q5_K_M | ~6.2 GB | 5.25 (~+2.5%) | ~0.6x | | Q4_K_M | ~4.9 GB | 5.30 (~+3.5%) | ~0.5x | | Q4_0 | ~4.5 GB | 5.45 (~+6.4%) | ~0.5x | | Q3_K_M | ~3.6 GB | 5.80 (~+13.3%) | ~0.4x | | Q2_K | ~2.3 GB | 6.50 (~+27.0%) | ~0.3x |
Примечание: 실제 цифры зависят от конкретной модели и задачи
Форматы квантизации для разных инструментов
Ollama / llama.cpp
- Основной формат: GGUF
- Квантизации: Q2_K, Q3_K_S/M, Q4_0, Q4_K_S/M, Q5_0, Q5_K_S/M, Q6_K, Q8_0
- Где искать: модели с суффиксом типа
Q4_K_M,Q5_K_Sв названии
LM Studio
- Основной формат: GGUF (автоматически определяет и использует лучший вариант)
- Поддерживает: все основные GGUF квантизации
- Особенность: имеет встроенный калькулятор размера и рекомендации
mlx-lm (Apple Silicon)
- Формат: MLX (специфичный для Apple Silicon)
- Квантизации: 2-bit, 3-bit, 4-bit, 6-bit (сгруппированные)
- Преимущество: на Apple Silicon может быть 20-40% быстрее чем GGUF через Metal
- Недостаток: меньше доступных предобученных моделей, нужна конвертация
GPTQ
- Для: NVIDIA GPU через трансформер фреймворки (vLLM, text-generation-inference, etc.)
- Квантизации: 3-bit, 4-bit, 8-bit
- Особенность: групповая квантизация, часто лучше сохзывает качество при той же битовой ширине чем GGUF
AWQ
- Аналог GPTQ, но с другим алгоритмом выбора весовых векторов для квантизации
- Хорошо работает с: модели от 7B до 72B на NVIDIA GPU
Как рассчитать, влезает ли модель
Простой способ (для GGUF моделей)
- Посмотрите размер файла .gguf (например, 7.2 GB)
- Добавьте примерно 1-2 GB для KV cache (зависит от длины контекста)
- Добавьте 0.5-1 GB для накладных расходов фреймворка
- Итого: размер_файла + 1.5-3.0 GB должно быть меньше доступной RAM
Пример: модель 6.8 GB + 2.0 GB = 8.8 GB должно поместиться в 16 GB RAM с запасом
Для mlx-lm форматов
Аналогично, но обычно требуется на 10-20% меньше места из-за более эффективного хранения на Apple Silicon
Инструменты для работы с квантизациями
llama.cpp
quantize- конвертирует модели в разные квантизацииmain/server- запускает модели- Поддерживает все GGUF квантизации
MLX
mlx_lm.convert- конвертирует модели HF в MLX форматmlx_lm.generate- генерирует текст
HuggingFace Transformers + bitsandbytes
- Позволяет загружать модели с 8-bit, 4-bit quantization напрямую через PyTorch
- Хорошо для экспериментов и fine-tuning
- Требует совместимого GPU
Практические советы
- Начните с Q4_K_M - для большинства задач это оптимальный выбор
- Если нужно больше качества и есть память - переходите на Q5_K_M или Q6_K
- Если критична скорость или очень мало памяти - рассмотрите Q3_K_M
- Для кода и математических задач - Q6_K часто дает заметное улучшение качества
- Не гонитесь за Q8_0/F16 если у вас ограниченные ресурсы - прирост качества часто неоправданно мал по сравнению с увеличением размера
- Проверяйте конкретную модель - некоторые модели лучше переносят квантизацию чем другие
- Следите за обновлениями - методы квантизации постоянно улучшаются
Ресурсы для дальнейшего чтения
Что дальше
| Если хотите | Переходите |
|---|---|
| Посмотреть бенчмарки разных квантизаций на Mac | benchmarks/apple-silicon.md |
| Сравнить инструменты по поддержке квантизаций | tools.md |
| Выбрать модель под свою задачу | models.md |
| Вернуться к навигации | README.md |
В разделе: getting-started · running-models · models · catalog · quantization · memory-and-context · tools · advanced-setup · troubleshooting · apple-silicon
Связанные разделы: Нулевой уровень · AI-агенты · Use Cases
Навигация: ← Локальные модели · ↑ На главную · 🇬🇧 English