Квантизація LLM (INT8/INT4/GPTQ/AWQ/GGUF) для оптимізації

Проектуємо та впроваджуємо системи штучного інтелекту: від прототипу до production-ready рішення. Наша команда поєднує експертизу в машинному навчанні, дата-інжинірингу та MLOps, щоб AI працював не в лабораторії, а в реальному бізнесі.
Показано 1 з 1Усі 1566 послуг
Квантизація LLM (INT8/INT4/GPTQ/AWQ/GGUF) для оптимізації
Середній
від 1 дня до 3 днів
Часті запитання

Напрямки AI-розробки

Етапи розробки AI-рішення

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1284
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1196
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    901
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1119
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    586
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    853

Квантизація LLM (INT8/INT4/GPTQ/AWQ/GGUF) для оптимізації

Квантизація — зниження точності представлення ваг моделі (з fp32 або bf16 до INT8, INT4, INT3 і нижче). Це зменшує розмір моделі та прискорює інференс при мінімальній втраті якості. Для LLM квантизація — ключовий інструмент розгортання на обмеженому залізі.

Формати квантизації: порівняльна таблиця

Формат Точність Стиснення (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

GPTQ: Post-Training Quantization з коригуванням помилок

GPTQ квантизує послойно, мінімізуючи помилку на малому calibration датасеті:

from transformers import AutoModelForCausalLM, GPTQConfig

gptq_config = GPTQConfig(
    bits=4,
    dataset="c4",           # Calibration dataset
    desc_act=True,          # Краще для perplexity
    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 залежно від розміру моделі.

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"  # або "GEMV" для малих batches
}

model.quantize(tokenizer, quant_config=quant_config)
model.save_quantized("./llama3-8b-awq")

AWQ зазвичай дає краще якість, ніж GPTQ при тій же бітності, особливо на завданнях reasoning.

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

GGUF (GGML Universal Format) — формат для розгортання через 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, помітна деградація

Практичний приклад: вибір формату для on-premise розгортання

Завдання: розгортання fine-tuned Llama 3.1 8B на сервері з 2×RTX 3090 (48GB VRAM разом) для 50 одночасних користувачів.

Вимоги: latency P95 < 3s, 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))

Часові рамки квантизації

  • GPTQ/AWQ квантизація 8B моделі: 1–3 години
  • GPTQ/AWQ квантизація 70B моделі: 6–18 годин
  • GGUF конвертація: 15–60 хвилин
  • Тестування та вибір оптимального формату: 1–3 дні
  • Всього: 2–5 днів