Skip to main content

Квантування (Model Quantization)(Квантування та компресія нейронних мереж)

Технологія математичного стиснення вагових коефіцієнтів та активацій нейромережі шляхом переходу від високої точності (FP16/BF16) до низькорозрядних форматів (FP8, INT8, INT4, GGUF) для радикальної економії пам'яті.

1. Огляд концепції та системна проблема

Оригінальні мовні моделі навчаються у форматі чисел із плаваючою комою високої точності (FP16 або BF16), де кожен варіативний параметр займає 16 біт (2 байти). Для запуску сучасної відкритої моделі на 70 мільярдів параметрів (наприклад, Llama 3.3 70B) лише під завантаження статичних вагів необхідно: $$70 \times 10^9 \times 2 \text{ байти} \approx 140 \text{ ГБ VRAM}$$

Це робить інференс неможливим на споживчому залізі: інженеру потрібен сервер із щонайменше двома відеокартами рівня NVIDIA A100 (80GB), вартістю понад $30,000. Ба більше, швидкість генерації токенів обмежується пропускною здатністю шини пам'яті (Memory Bandwidth), яка змушена перекачувати 140 ГБ даних на кожен згенерований символ.

Model Quantization (квантування моделей) — це математичний метод оптимізації та компресії нейромереж. Замість 16-бітних чисел ваги відображаються у 8-бітні, 4-бітні або навіть 2-бітні цілі числа чи оптимізовані формати плаваючої коми. Квантування стискає модель у 2–4 рази, дозволяючи запускати 70B моделі на доступних відеокартах або ноутбуках із практично нульовою втратою якості кодогенерації.

2. Архітектурна таксономія та ментальна модель

Ландшафт технологій квантування класифікується за глибиною аналізу та цільовим апаратним середовищем:

┌─────────────────────────────────────────────────────────────┐
│                 QUANTIZATION METHODS TAXONOMY               │
├─────────────────────────────────────────────────────────────┤
│ 1. Post-Training Quantization (PTQ - Без повторного навчання)│
├─────────────────┬───────────────────────────┬───────────────┤
│ GGUF (K-quants) │ AWQ (Activation-aware)    │ FP8 (Native)  │
│ • llama.cpp     │ • Захист 1% важливих вагів│ • NVIDIA Ada/ │
│ • CPU / Metal   │ • NVIDIA Tensor Cores     │   Hopper/vLLM │
│ • Q4_K_M, Q5_K  │ • 4-бітний інференс (W4A16│ • Zero loss   │
├─────────────────┴───────────────────────────┴───────────────┤
│ 2. Quantization-Aware Training (QAT - Навчання зі стисненням)│
└─────────────────────────────────────────────────────────────┘
  1. GGUF K-Quants (Екосистема llama.cpp):
    • Використовує блочне масштабування (Block-wise scaling). Важливі шари уваги зберігаються у вищій розрядності (5–6 біт), а менш критичні шари Feed-Forward — у 4 бітах. Ідеально підходить для Apple Silicon (Metal) та системної оперативної пам'яті.
  2. AWQ (Activation-Aware Weight Quantization):
    • Визначає найбільш чутливі до помилок ваги («Outlier Weights», близько 1% від загального обсягу) на основі калібрувального датасету і залишає їх без агресивного квантування. Це усуває руйнування логіки у 4-бітних моделях на графічних картах NVIDIA.
  3. Апаратний формат FP8 (E4M3 / E5M2):
    • Нативний 8-бітний формат чисел із плаваючою комою, підтримуваний на апаратному рівні чіпами NVIDIA H100 та RTX 4090. Забезпечує подвійне прискорення обчислень матриць (GEMM) без будь-якої втрати перплексії.
  4. Квантування KV-кешу (KV Cache Quantization):
    • Стиснення історії контексту з FP16 до INT8 або INT4, що дозволяє утримувати вікна контексту на 128k токенів без переповнення пам'яті.

3. Технічний пайплайн та внутрішня механіка

Життєвий цикл пост-тренувального квантування моделі:

  1. Аналіз вихідних вагів (FP16 Base Model): Скрипт зчитує тензори у форматі SafeTensors із високою точністю.
  2. Калібрування розподілу (Calibration Phase): Через модель пропускається невелика вибірка тексту (наприклад, 512 послідовностей коду). Алгоритм фіксує амплітуду активацій у кожному шарі.
  3. Математичне масштабування та зміщення: Діапазон дійсних чисел $[x_{\min}, x_{\max}]$ відображається у дискретний цілочисельний діапазон (наприклад, $[-8, 7]$ для INT4): $$q = \text{round}\left(\frac{x}{S}\right) + Z$$ де $S$ — масштабний коефіцієнт (Scale), а $Z$ — нульова точка (Zero-point).
  4. Пакування у бінарний контейнер: Квантовані ваги пакуються по блоках (наприклад, по 32 або 256 чисел) разом із їхніми локальними коефіцієнтами масштабування та зберігаються у файл .gguf або .safetensors.
  5. Де-квантування на льоту (On-the-fly Dequantization): Під час генерації токенів ядра прискорювача миттєво зчитують стиснуті 4-бітні ваги з пам'яті і розпаковують їх у регістрах для швидкого множення.

4. Практичні інженерні сценарії в продакшені

01. Розгортання Llama 3.3 70B на двох споживчих відеокартах

Інженер будує корпоративний сервер для команди розробників:

  • Оригінальна FP16 модель вимагає 140 ГБ VRAM (необхідний дорогий сервер з 8x GPU).
  • Після квантування в AWQ 4-bit розмір моделі скорочується до 38 ГБ.
  • Модель вільно поміщається у зв'язку з двох карт RTX 3090 (24 ГБ + 24 ГБ = 48 ГБ VRAM), забезпечуючи швидкість 30 токенів/с для всієї команди за бюджет у $1,500.

02. Високонавантажений сервінг на кластері H100 у форматі FP8

Фінтех-компанія обробляє тисячі запитів на секунду через vLLM:

  • Моделі переводяться у формат FP8.
  • Пропускна здатність кластера подвоюється за рахунок апаратних блоків FP8 Tensor Cores, а витрати на оренду хмари AWS/Lambda Labs падають на 50%.

03. Запуск 32B моделі кодування на MacBook Pro

Розробник запускає Qwen 2.5 Coder 32B у дорозі:

  • Файл формату qwen2.5-coder-32b-instruct-q4_k_m.gguf займає всього 19 ГБ на диску.
  • Модель завантажується в об'єднану пам'ять ноутбука (36 ГБ RAM), споживаючи мінімум енергії акумулятора при високій швидкості відповіді.

5. Підводні камені, типові помилки та безпека

  • Екстремальне надлишкове квантування (Quantization Cliff): Спроба стиснути модель нижче 3 біт (наприклад, Q2_K) призводить до різкого зламу семантики: модель починає пропускати закриваючі дужки у коді, генерувати нескінченні цикли та втрачати контекст.
  • Помилка вибору формату під конкретне залізо: Спроба запустити GGUF-моделі на кластері серверних відеокарт під високим багатопотоковим навантаженням буде значно повільнішою, ніж використання спеціалізованих рушіїв vLLM з форматом AWQ або FP8.
  • Втрата точності у критичних математичних обчисленнях: Якщо модель використовується для складних чисельних симуляцій, наївне 4-бітне квантування може накопичувати похибку округлення у вихідних розрахунках.
  • Некоректні калібрувальні дані: Якщо модель квантувалася з використанням калібрувального датасету, де була лише художня література англійською, її навички написання коду на Rust або розуміння української мови можуть суттєво постраждати.
/ Часті запитанняSchema.org FAQPage

FAQ: Квантування (Model Quantization)

Завдяки сучасним алгоритмам (AWQ, GPTQ, GGUF K-quants) втрата перплексії (Perplexity) становить менше 1–2%. Модель зберігає понад 98% якості міркувань оригінальної версії, зменшуючи вимоги до пам'яті майже в 4 рази.
/ Внутрішня перелінковка
Всі терміни
Моделі & Інференс

Локальний запуск LLM (Local LLM Inference)

Практика автономного виконання великих мовних моделей безпосередньо на апаратному забезпеченні розробника (Apple Silicon, NVIDIA GPU) із гарантією абсолютної конфіденційності та нульової залежності від інтернету.

Читати термін
Моделі & Інференс

Ollama (Платформа локального запуску моделей)

Провідний відкритий інструмент для простого завантаження, конфігурації та локального виконання мовних моделей (Llama, DeepSeek, Qwen) із вбудованим REST API, сумісним з OpenAI.

Читати термін
Моделі & Інференс

vLLM (Високопродуктивний рушій інференсу)

Провідний відкритий серверний рушій інференсу та обслуговування LLM, що здійснив революцію у пропускній здатності завдяки алгоритму віртуалізації пам'яті PagedAttention та неперервному батчингу.

Читати термін
Моделі & Інференс

Сімейство Llama (Meta Llama)

Серія фундаментальних відкритих мовних моделей від Meta (Llama 3, 3.1, 3.3), що стали промисловим стандартом екосистеми Open Weights, локального ШІ та корпоративного файн-тюнінгу.

Читати термін