Квантование моделей AWQ, GGUF и FP8: что выбрать и сколько VRAM экономится
Разбираемся в типах квантования LLM без академического занудства: AWQ для GPU, GGUF для CPU, FP8 для серверных карт. Таблицы расхода памяти и потерь качества.
Квантование снижает размер LLM в памяти за счёт уменьшения точности весов. 4-битное квантование (Q4_K_M / AWQ) уменьшает VRAM в 3.5–4 раза при потере менее 2% качества. AWQ оптимален для GPU-инференса через vLLM, GGUF (llama.cpp) — для CPU и гибридного режима, FP8 — для серверных карт A100/H100 с минимальной потерей точности.
- Q4_K_M (4-бит) экономит ~75% VRAM по сравнению с FP16, теряя менее 2% качества на большинстве бенчмарков.
- AWQ — формат для GPU-инференса (vLLM, TGI), GGUF — универсальный формат llama.cpp (работает на CPU и GPU).
- FP8 — полупрецизионный формат для серверных GPU (A100, H100) с потерей <0.5% качества.
- Для моделей до 14B параметров квантование не критично — они помещаются в FP16 на одной RTX 4090.
Сравнение форматов квантования для Llama 3.3 70B
| Формат | Размер модели | Потребление VRAM | Потеря качества | Совместимость |
|---|---|---|---|---|
| FP16 (baseline) | ~140 ГБ | ~155 ГБ | 0% | vLLM, TGI, HuggingFace |
| FP8 | ~70 ГБ | ~78 ГБ | <0.5% | vLLM (A100/H100), TensorRT-LLM |
| AWQ (4-bit) | ~38 ГБ | ~45 ГБ | ~1.2% | vLLM, AutoAWQ, TGI |
| GPTQ (4-bit) | ~38 ГБ | ~46 ГБ | ~1.5% | vLLM, ExLlamaV2, TGI |
| GGUF Q4_K_M | ~42 ГБ | ~48 ГБ | ~1.5% | llama.cpp, Ollama |
| GGUF Q8_0 | ~74 ГБ | ~80 ГБ | <1% | llama.cpp, Ollama |
| GGUF Q2_K | ~26 ГБ | ~32 ГБ | ~6% | llama.cpp, Ollama |
Зачем квантовать: экономика видеопамяти
Стандартные веса нейросети хранятся в формате FP16 — 16 бит (2 байта) на каждый параметр. Модель на 70B параметров занимает 70 × 2 = 140 ГБ чистых весов. Добавьте KV-кэш, буферы активации и накладные расходы рантайма — получите ~160 ГБ. Это две карты A100 80GB, и стоит это от 60 000 ₽/мес.
Квантование — процесс снижения точности весов с 16 до 8, 4 или даже 2 бит. Идея простая: большинство весов нейросети не требуют 16-битной точности. 4-битное представление (Q4) снижает размер в 4 раза, а деградация ответов на практике едва заметна — менее 2% на стандартных бенчмарках (MMLU, HellaSwag, ARC).
AWQ: GPU-native квантование для vLLM
Activation-Aware Weight Quantization — метод 4-битного квантования, который учитывает распределение активаций при калибровке. В отличие от простого round-to-nearest, AWQ сохраняет «важные» веса с большей точностью. Результат — менее 1.5% потери качества при сжатии в 4 раза.
AWQ — формат первого выбора для vLLM. Поддерживается нативно, работает быстрее GPTQ на 10–15%, и доступен для большинства популярных моделей на HuggingFace (ищите суффикс -AWQ в названии).
Ограничение: AWQ работает только на GPU. Для CPU-инференса или гибридного режима (часть слоёв на GPU, часть в RAM) нужен GGUF.
# Запуск AWQ-модели через vLLM
python -m vllm.entrypoints.openai.api_server \
--model TheBloke/Llama-3.3-70B-Instruct-AWQ \
--quantization awq \
--tensor-parallel-size 2 \
--port 8000GGUF: универсальный формат llama.cpp
GGUF — бинарный формат, разработанный для llama.cpp и Ollama. Поддерживает множество уровней квантования от Q2_K (агрессивное сжатие) до Q8_0 (почти без потерь). Главное преимущество — работает на CPU, GPU и в гибридном режиме.
Популярные варианты: Q4_K_M — золотая середина (потеря ~1.5%, экономия ~75% памяти). Q8_0 — для тех, кому критично качество (потеря <1%, экономия ~50%). Q2_K — если памяти совсем мало, но готовы терпеть заметную деградацию.
В GGUF можно часть слоёв выгрузить на GPU, а остальные держать в RAM. Это позволяет запускать 70B модели на одной RTX 4090 + 64 ГБ RAM, пусть и с просадкой скорости.
# Ollama — автоматически выбирает GGUF
ollama run llama3.3:70b-instruct-q4_K_M
# llama.cpp — ручной контроль
./llama-server \
-m llama-3.3-70b-instruct-Q4_K_M.gguf \
--n-gpu-layers 40 \
--ctx-size 4096 \
--host 0.0.0.0 --port 8080FP8: серверный формат для A100 и H100
FP8 (8-bit floating point) — формат для серверных GPU с аппаратной поддержкой 8-битных операций. A100 поддерживает FP8 через софтверную эмуляцию, H100 — нативно через Transformer Engine. Потеря качества — менее 0.5%, что делает FP8 предпочтительным для продакшена, где важна точность ответов.
Размер модели в FP8 — ровно в 2 раза меньше FP16. Llama 3.3 70B в FP8 — ~70 ГБ, помещается на одну A100 80GB с запасом на KV-кэш.
FP8 — формат для тех, кто готов платить за серверные GPU, но хочет максимальное качество при разумном расходе памяти. Если у вас H100 — используйте FP8, не мучайтесь с 4-битным квантованием.
Проверенные серверы от надежных провайдеров
Timeweb Cloud
Cloud Start
CPU
1 ядер • 3.3 ГГц
RAM
1 ГБ
Диск
15 ГБ NVMe
Канал
200 Мбит/с
299 ₽/мес
Selectel
Cloud Lite 1
CPU
1 ядер • 2.6 ГГц
RAM
1 ГБ
Диск
10 ГБ SSD
Канал
200 Мбит/с
550 ₽/мес
Часто задаваемые вопросы (FAQ)
Квантование ухудшает качество ответов модели?
Q4 квантование снижает качество на 1–2% по стандартным бенчмаркам. На практике для чатботов и генерации текста разница незаметна. Для задач с точными вычислениями (code generation, математика) лучше использовать FP8 или FP16.
Можно ли квантовать модель самостоятельно?
Да. Для AWQ — библиотека AutoAWQ, для GGUF — llama.cpp (скрипт convert-hf-to-gguf.py). Процесс калибровки занимает 1–4 часа на GPU. Но проще скачать готовые квантованные модели с HuggingFace.
Какой формат поддерживает Ollama?
Ollama работает с GGUF. При запуске ollama run модель автоматически скачивается в оптимальном квантовании для вашего GPU. Можно указать конкретный квант: ollama run llama3.3:70b-instruct-q4_K_M.