Форматы квантизации LLM: INT8, INT4, GPTQ, AWQ, GGUF — что выбрать?

70B модель в fp16 весит 140 ГБ — не влезает на две RTX 3090. Квантизация LLM — единственный способ ужать до 35 ГБ с минимальной потерей качества. За 5 лет мы помогли более 100 проектам оптимизировать инференс, сократив затраты на оборудование до 75%.

Направления AI-разработки

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1439
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    997
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1264
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    712
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    1002

70B модель в fp16 весит 140 ГБ — не влезает на две RTX 3090. Квантизация LLM — единственный способ ужать до 35 ГБ с минимальной потерей качества. За 5 лет мы помогли более 100 проектам оптимизировать инференс, сократив затраты на оборудование до 75%.

Почему квантизация LLM критична для деплоя?

Нехватка VRAM — главная проблема при деплое больших языковых моделей. Модель 70B в fp16 не влезает в одну consumer GPU, а две RTX 3090 дают 48 ГБ — после квантизации до INT4 остаётся запас для пакетной обработки. Скорость инференса вырастает с 50 до 200+ tok/s, а стоимость аренды GPU (например, 8×A100) снижается в 4 раза — достаточно 2×L40. Экономия оборудования — ключевой драйвер: квантизация 70B модели до INT4 позволяет развернуть её на двух RTX 3090 вместо восьми A100, снижая капитальные затраты в 4 раза. Снижение расходов на аренду GPU при переходе с fp16 на INT4 составляет до 75% за счёт сокращения требуемого числа ускорителей.

Сравнение форматов квантизации

Формат Точность Сжатие (vs fp16) Качество Применение
fp16 16-bit float Baseline GPU inference
INT8 (bitsandbytes) 8-bit int -0.5–1% GPU, легко
GPTQ INT4 4-bit group-quant -1–2% GPU, production
AWQ INT4 4-bit activation-aware -0.5–1.5% GPU, лучше GPTQ
GGUF Q4_K_M 4-bit mixed -1–2% CPU/GPU llama.cpp
GGUF Q8_0 8-bit -0.3–0.5% CPU/GPU llama.cpp
GGUF Q2_K 2-bit -5–10% Крайний случай
EXL2 2–8 bit mixed 2–8× Configurable GPU, ExLlamaV2

Каждый формат требует calibration dataset (128–512 примеров), репрезентативного для задач модели. Неправильный calibration ухудшает качество — мы подбираем его под проект.

Какой формат квантизации выбрать?

GPTQ: Post‑Training Quantization с коррекцией ошибок

GPTQ квантизирует послойно, минимизируя ошибку на небольшом calibration датасете:

from transformers import AutoModelForCausalLM, GPTQConfig gptq_config = GPTQConfig( bits=4, dataset="c4", desc_act=True, group_size=128, damp_percent=0.1, ) model = AutoModelForCausalLM.from_pretrained( "meta-llama/Meta-Llama-3.1-8B-Instruct", quantization_config=gptq_config, device_map="auto" ) model.save_pretrained("./llama3-8b-gptq-int4") 

Calibration занимает 30–120 минут на CPU или GPU. Как показано в GPTQ, этот метод обеспечивает качество, близкое к fp16, при 4-кратном сжатии.

AWQ: Activation‑Aware Weight Quantization

AWQ определяет «важные» веса по активациям и защищает их от агрессивной квантизации:

from awq import AutoAWQForCausalLM from transformers import AutoTokenizer model = AutoAWQForCausalLM.from_pretrained("meta-llama/Meta-Llama-3.1-8B-Instruct") tokenizer = AutoTokenizer.from_pretrained("meta-llama/Meta-Llama-3.1-8B-Instruct") quant_config = { "zero_point": True, "q_group_size": 128, "w_bit": 4, "version": "GEMM" } model.quantize(tokenizer, quant_config=quant_config) model.save_quantized("./llama3-8b-awq") 

AWQ даёт прирост ~0.5–1% по perplexity на задачах reasoning по сравнению с GPTQ (см. AWQ).

GGUF: универсальный формат для llama.cpp

GGUF — формат для деплоя через llama.cpp, поддерживающий CPU-инференс и partial GPU offloading:

# Конвертация HuggingFace модели в GGUF python convert_hf_to_gguf.py \ --model meta-llama/Meta-Llama-3.1-8B-Instruct \ --outtype f16 \ --outfile llama3-8b-f16.gguf # Квантизация в Q4_K_M (рекомендуется) ./quantize llama3-8b-f16.gguf llama3-8b-q4km.gguf Q4_K_M 

Варианты квантизации GGUF (от лучшего качества к меньшему размеру):

  • Q8_0: 8-bit, ~8.5GB для 8B модели, отличное качество
  • Q6_K: 6-bit, ~6.1GB, высокое качество
  • Q5_K_M: 5-bit mixed, ~5.1GB, хорошее качество
  • Q4_K_M: 4-bit mixed, ~4.1GB, рекомендуется для большинства задач
  • Q3_K_M: 3-bit, ~3.2GB, заметная деградация

Пошаговый алгоритм выбора формата

  1. Определите железо: какая GPU, сколько VRAM, допустим ли CPU-инференс.
  2. Замерьте baseline: latency и throughput на fp16/bf16.
  3. Выберите 2–3 кандидата: для NVIDIA GPU — AWQ и GPTQ; для CPU/гибрида — GGUF.
  4. Проведите квантизацию и протестируйте на ваших данных: perplexity, метрики задачи, latency P95.
  5. Сравните и выберите оптимум. Если разница незаметна — берите формат с лучшей поддержкой (AWQ или GGUF).

Практический пример: деплой на 2×RTX 3090

Задача: деплой fine-tuned Llama 3.1 8B на сервере с 2×RTX 3090 (48GB VRAM суммарно) для 50 concurrent users.

Требования: latency P95 < 3с, throughput > 100 tok/s.

Формат VRAM Throughput (vLLM) Latency P95 Качество (оценка)
bf16 16 GB 180 tok/s 1.8с 100%
AWQ INT4 5 GB 280 tok/s 1.2с 98.5%
GPTQ INT4 5 GB 260 tok/s 1.3с 98%
GGUF Q4_K_M 4.1 GB (CPU) 40 tok/s 98%

Выбор: AWQ INT4 — умещается в одну 3090 24GB с резервом, throughput 280 tok/s перекрывает требование, качество минимально деградирует.

Инференс квантизованной модели через vLLM

from vllm import LLM, SamplingParams # AWQ модель llm = LLM( model="./llama3-8b-awq", quantization="awq", dtype="auto", gpu_memory_utilization=0.85, ) # GPTQ модель llm = LLM( model="./llama3-8b-gptq-int4", quantization="gptq", dtype="auto", ) outputs = llm.generate(["Привет, как дела?"], SamplingParams(max_tokens=200)) 

Когда квантизация неэффективна?

Если модель уже работает с приемлемым временем ответа и не упирается в VRAM — квантизация избыточна. Также она не подходит для задач, где критична каждая десятая процента качества (medical, legal). В таких случаях оставляют fp16 или bf16, но жертвуют скоростью.

Что входит в работу и сроки

  • Анализ модели и железа, подбор 2–3 форматов для теста
  • Квантизация (GPTQ/AWQ/GGUF) с calibration на ваших данных
  • Интеграция через vLLM, llama.cpp или Triton Inference Server
  • Тестирование latency P50/P95/P99, throughput, качества (perplexity + метрики задачи)
  • Документация по развёртыванию и эксплуатации
  • Обучение команды работе с квантизованной моделью

Ориентировочные сроки:

  • GPTQ/AWQ для 8B модели: 1–3 часа. Для 70B: 6–18 часов.
  • GGUF конвертация: 15–60 минут.
  • Тестирование и выбор формата: 1–3 дня.
  • Итого: 2–5 дней под ключ.

Оценим ваш проект за 1 день — свяжитесь с нами, мы подберём оптимальный формат квантизации. Закажите аудит модели и получите рекомендацию по квантизации. Опыт — более 5 лет и 100+ успешных кейсов.