Коротко (TL;DR)
- Від Q8 до Q5 якість майже не рухається. На моделі 7B приріст perplexity до вихідних 16 біт становить 0,0004 у Q8_0 і 0,0142 у Q5_K_M — це соті частки, яких у відповіді не видно.
- Обрив проходить не між Q4 і Q8, а нижче Q4. На Llama-3.1-8B шкільна математика GSM8K тримається на 77,4 бала в Q4_K_M проти 77,6 у вихідній точності, а на Q3_K_S падає до 68,3.
- Прискорення живе тільки в генерації. На M2 Ultra перехід із 16 біт на Q4_0 піднімає видачу з 41,0 до 94,3 токена за секунду, але обробку промпту опускає з 1401,9 до 1238,5 — квант не пришвидшує читання вашого запиту, він пришвидшує відповідь.
- Малій моделі втрачати нічого. На чотирьох бітах Qwen3-0.6B зберігає 70,8% власного результату, а Qwen3-14B — 98,1%.
- Першими ламаються математика, дотримання інструкції та рідкісні мови, останньою — побутова розмова. Розрив між автоматичними метриками та живою оцінкою на неанглійській сягає дев’ятикратного.
- KV-кеш квантизується окремо й додає свою втрату: у q8_0 вона вимірюється тисячними частками perplexity, у q4_0 на моделях з агресивною GQA відповіді починають ламатися.
Дані актуальні на 15 серпня 2026 року. Власних замірів у редакції з цієї теми немає: усі цифри нижче — чужі, і в кожної названо модель, тест і бекенд.
- Коротко (TL;DR)
- Що квантизація робить із вагами моделі: округлення блоками
- Q4_K_M, Q5_K_S, Q8_0: як читати позначення GGUF
- Importance matrix: чому два різні Q4 одного розміру не рівні
- Методика замірів: чия модель, який тест, скільки прогонів
- Таблиця втрат: скільки якості коштує кожен крок униз від Q8
- Швидкість упирається в шину пам’яті, а не в обчислення
- Де втрата помітна: код, математика й українська проти балачки
- Велика модель у Q4 проти маленької у Q8 за рівної пам’яті
- KV-кеш квантизується окремо — і це друге джерело втрат
- Слабкі місця чужих замірів: де методики не сходяться між собою
- Часті запитання
Що квантизація робить із вагами моделі: округлення блоками
Квантизація моделі — це округлення чисел (трапляється й варіант «квантування», це те саме). Навчена модель зберігає мільярди ваг, кожна вага — дробове число в 16 бітах. Квантизація переводить їх у цілі числа меншої розрядності: 8, 5, 4 або 3 біти на вагу. Файл стискається пропорційно, а разом із ним падає обсяг пам’яті, який модель займає під час роботи.
Округлюють не кожне число окремо, а блоками. Ваги ріжуться на короткі відрізки — наприклад, по 32 штуки, — і всередині відрізка шукається спільний множник (масштаб), на який множиться ціле число, щоб повернути приблизне вихідне значення. У найпростішій схемі вага відновлюється як w = d × q, де q — збережене ціле, d — масштаб блока. У схемі трохи складнішій до цього додається мінімум блока: w = d × q + m. Саме ці дві схеми в іменах файлів позначені нулем і одиницею: Q4_0, Q4_1.
Звідси два неочевидні наслідки.
Перший: «4-бітний» квант — не 4 біти на вагу. Масштаб і мінімум теж треба десь зберігати, і вони займають місце. У сучасного формату Q4_K реальна витрата — 4,5 біта на вагу, у Q5_K — 5,5, у Q6_K — 6,5625. Так влаштовані k-кванти, введені в llama.cpp: супер-блок із 8 блоків по 32 ваги, масштаби й мінімуми всередині супер-блока квантизуються шістьма бітами.
Другий: помилка накопичується. Модель — це десятки шарів, і вихід кожного йде на вхід наступному. Крихітна неточність першого шару проходить крізь усі інші й на виході перетворюється вже не на «трохи інше число», а на інший вибір наступного слова. Тому втрата нелінійна: доки помилка мала, вона гаситься, а після певного порога починає рости лавиною. Поріг цей — приблизно чотири біти, і далі в статті видно, як він виглядає в цифрах.
Q4_K_M, Q5_K_S, Q8_0: як читати позначення GGUF
GGUF — це формат файлу, у якому модель лежить на диску; сам собою він нічого не квантизує. Квант задається суфіксом імені, і читається він за трьома частинами.
| Частина імені | Що означає | Приклад |
|---|---|---|
Q + цифра | цільова розрядність: 2, 3, 4, 5, 6 або 8 біт | Q4, Q8 |
_0 / _1 | старі схеми: без мінімуму блока і з мінімумом | Q4_0, Q5_1 |
_K | k-кванти: супер-блоки, масштаби всередині супер-блока теж стиснуті | Q4_K |
_S / _M / _L | наскільки щедро квантизуються найчутливіші тензори | Q4_K_S, Q4_K_M |
IQ | i-кванти: підбір під калібрувальні дані, нижче 4 біт | IQ3_M, IQ4_XS |
Літери S, M, L — це не «маленький, середній, великий файл», а різна щедрість до різних частин моделі. У варіанті M матриці attention.wv, attention.wo і feed_forward.w2 квантизуються на щабель вище, ніж усе решта: ці тензори виявилися найчутливішими до округлення. У варіанті S вся модель квантизується одним типом. Різниця в розмірі при цьому невелика — на 8B-моделі між Q4_K_S і Q4_K_M усього 0,23 ГБ.
Наскільки k-кванти виграли в старих схем, видно на одному порівнянні. За таблицею llama.cpp для моделі 7B старий Q4_0 важить 3,50 ГБ і додає 0,2499 до perplexity, а Q4_K_M важить 3,80 ГБ і додає 0,0535. За 0,3 ГБ різниці в розмірі — майже п’ятикратне скорочення втрати. Завантажувати сьогодні Q4_0 сенсу немає, і саме тому в картках моделей на Hugging Face цей формат стоїть без позначки «рекомендовано».
Окрема практична порада для пошуку. Матеріалів із цифрами українською по темі майже немає, а живі запити в пошуку — переважно латинські: gguf quantization types шукають, коли треба розшифрувати суфікси, gguf quantization comparison — коли потрібне порівняння рівнів між собою, gguf quantization explained — коли потрібна механіка. Усі три питання закриті нижче, але якщо копатимете глибше, шукати варто саме цими формулюваннями.
Importance matrix: чому два різні Q4 одного розміру не рівні
Два файли з однаковим іменем Q4_K_M і однаковою вагою, викладені різними людьми, можуть поводитися по-різному. Причина — importance matrix, вона ж imatrix.
Без неї квантизація розв’язує просте завдання: округлити блок так, щоб середня помилка відновлення ваг була мінімальною. Усі ваги при цьому вважаються рівноцінними. Але вони не рівноцінні: частина ваг майже не бере участі в роботі, а частина спрацьовує на кожному другому токені.
imatrix — це таблиця, знята заздалегідь: модель проганяють по калібрувальному тексту й записують, наскільки сильно активувалася кожна ділянка вагової матриці. Далі квантизація мінімізує вже зважену помилку — береже те, що реально працює, і не витрачає точність на баласт.
Яким має бути калібрувальний текст — питання, у якому інтуїція підводить. Логічно припустити, що калібрувати треба на текстах тієї галузі, де модель працюватиме. Замір в обговоренні llama.cpp показав протилежне: 8 тисяч майже випадкових токенів дали результат кращий, ніж 90 тисяч «чистих» текстів у стилі навчального корпусу — на профільних даних perplexity 8,3157 проти 8,3577 за еталона q8_0 8,1901, і на сторонніх даних (тексти пісень) той самий порядок: 15,4084 проти 15,6798 за еталона 14,8318. Різниця невелика, але стійка й в обидва боки.
Практичні наслідки три:
- Той самий рівень кванта в різних складальників дає різну якість — і за іменем файлу цього не видно. Дивитися треба в картку моделі: в акуратних складальників на кшталт bartowski прямо вказано, що квантизація йшла з
imatrixі на якому калібрувальному наборі. - Що нижчий квант, то сильніший внесок калібрування. На восьми бітах вона майже не важлива, на трьох і нижче — визначальна.
- «Каліброване нашою мовою» саме собою не гарантує кращого результату — судячи із заміру вище, склад калібрувального набору важливіший за його тематику. Перевіряти доводиться на своїх задачах, готової відповіді тут немає.
Методика замірів: чия модель, який тест, скільки прогонів
Кожна цифра в цій статті належить конкретному заміру, і без методики вона незіставна з іншою. Ось хто і що вимірював.
| Джерело | Модель | Що вимірювали | Як |
|---|---|---|---|
| llama.cpp, discussion #2094 | LLaMA-v1 7B | розмір файлу і приріст perplexity до 16 біт | історична таблиця проєкту, вивід quantize --help |
| arXiv 2601.14277 | Llama-3.1-8B-Instruct | GSM8K, HellaSwag, IFEval, MMLU, TruthfulQA + perplexity на WikiText-2 | llama.cpp b7600, harness lm_eval 0.4.9.2, GSM8K 5-shot, один прогін, два Xeon Platinum 8488C |
| llama.cpp, discussion #4167 | LLaMA-7B v2 | токени за секунду окремо на промпті й на генерації | llama-bench, бекенд Metal, усі шари на GPU, еталонний коміт |
| arXiv 2608.08188 | 10 моделей п’яти сімейств, 0,6–14B | частка від власного результату в 16 бітах | RTN, GPTQ, AWQ, SPQR; 76 конфігурацій, 11 бенчмарків, понад 800 прогонів |
| IJCAI 2025, робота 902 | instruct-моделі 1B–405B | 13 датасетів, включно з оцінкою моделлю-суддею | чотири методи квантизації |
| arXiv 2407.03211 (Cohere) | багатомовні моделі | автотести, LLM-суддя і живі люди | порівняння трьох видів оцінки на реальних промптах |
Тепер про метрику, яка трапляється частіше за всі інші разом узяті.
Perplexity — це міра «здивування» моделі текстом, а не міра якості відповіді. Моделі дають прочитати еталонний текст і дивляться, наскільки впевнено вона передбачала кожне наступне слово. Число зручне: обчислюється швидко, порівнюється легко, зростає монотонно в міру стиснення моделі. Але перекладається в «стала гірше відповідати» воно погано, і цьому є два прямі докази.
Перший — із тієї самої роботи, де обчислювалися бенчмарки Llama-3.1-8B. Формати Q5_0 і Q5_K_S дають одну й ту саму perplexity 7,43, а на шкільній математиці розходяться на 3,42 бала: 79,08 проти 75,66. Однакове «здивування» текстом, різна поведінка на задачі.
Другий — із розбору KL-дивергенції на Mistral 7B, опублікованого на Хабрі. У Q3_K_M середній приріст розходження з вихідною моделлю становить 0,037, а в найгірших 5% токенів — 0,263, розрив у сім разів. У Q2_K — 0,082 проти 0,713, розрив у 8,6 раза. Інакше кажучи, середня цифра ховає рівно ті випадки, де модель ламається: на дев’яти токенах із десяти квант непомітний, а на десятому дає інше рішення.
Третій доказ — багатомовний, і про нього окремий розділ нижче.
Таблиця втрат: скільки якості коштує кожен крок униз від Q8
Почнемо з формату, який цитують найчастіше. Історична таблиця llama.cpp знята на моделі 7B і показує приріст perplexity до вихідних 16 біт.
| Квант | Розмір файлу 7B | Приріст perplexity |
|---|---|---|
| Q2_K | 2,67 ГБ | +0,8698 |
| Q3_K_M | 3,06 ГБ | +0,2437 |
| Q4_0 (старий) | 3,50 ГБ | +0,2499 |
| Q4_K_S | 3,56 ГБ | +0,1149 |
| Q4_K_M | 3,80 ГБ | +0,0535 |
| Q5_K_S | 4,33 ГБ | +0,0353 |
| Q5_K_M | 4,45 ГБ | +0,0142 |
| Q6_K | 5,15 ГБ | +0,0044 |
| Q8_0 | 6,70 ГБ | +0,0004 |
| F16 | 13,00 ГБ | — |
Читати її треба із застереженням, якого немає майже ні в кого з тих, хто її передруковує: це LLaMA першого покоління, модель 2023 року. Архітектури відтоді змінилися, і переносити конкретні значення на свіжу 8B не можна. Що переноситься — форма кривої: від Q8 до Q5 втрата вимірюється сотими, між Q5 і Q4 подвоюється, нижче Q4 росте кратно.
Свіжий замір на Llama-3.1-8B-Instruct — робочій конячці локального запуску в сімействі Llama — цю форму підтверджує й додає те, чого в таблиці perplexity немає: поведінку на задачах.
| Квант | Розмір файлу | GSM8K (математика) | IFEval (інструкції) | MMLU (знання) | HellaSwag | Perplexity |
|---|---|---|---|---|---|---|
| F16 | ≈15,0 ГіБ | 77,63 | 78,93 | 63,50 | 72,51 | 7,32 |
| Q8_0 | 8,54 ГБ | 77,48 | 78,79 | 63,43 | 72,52 | 7,33 |
| Q6_K | 6,60 ГБ | 78,17 | 77,63 | 63,17 | 72,48 | 7,35 |
| Q5_K_M | 5,73 ГБ | 78,54 | 78,67 | 62,80 | 72,33 | 7,40 |
| Q4_K_M | 4,92 ГБ | 77,41 | 79,06 | 62,43 | 72,35 | 7,56 |
| Q4_K_S | 4,69 ГБ | 77,33 | 80,26 | 62,06 | 72,79 | 7,62 |
| Q3_K_M | 4,02 ГБ | 73,16 | 77,19 | 62,01 | 73,41 | 7,96 |
| Q3_K_S | 3,66 ГБ | 68,31 | 73,89 | 59,31 | 71,87 | 8,96 |
Розміри файлів — із картки готових збірок на Hugging Face; відсотки стиснення в самій роботі їм відповідають (у Q8_0 файл менший за вихідний на 46,9%, у Q4_K_M — на 69,4%).

Що тут видно.
Від Q8 до Q4 різниці майже немає, і вона не завжди на користь старшого кванта. На математиці Q5_K_M і Q6_K обійшли вихідну модель у 16 бітах, а Q4_K_S поставив найкращий результат на дотриманні інструкції. Це не «квантизація покращує модель» — це шум вимірювання в один прогін. Саме так і треба читати різницю в частки бала: як нуль.
Обрив починається на трьох бітах. Від Q4_K_S до Q3_K_M математика втрачає 4,2 бала, а до Q3_K_S — 9,0. Perplexity за той самий шлях росте з 7,62 до 8,96.
Джерела не сходяться, і це варто сказати прямо. Робота з оцінкою десяти моделей і робота IJCAI дають одне: великі моделі тримають удар краще. Замір компанії Latitude дає протилежний приклад — Llama 3.3 70B втрачає 7,8 бала MMLU під час переходу на чотири біти. Усереднювати таке не можна: у замірів різні методи квантизації та різні набори задач. Висновок, який витримують усі три, — втрата нелінійна й сильно залежить від конкретної моделі, а не лише від кількості біт.
Самостійний прогін на Хабрі на тій самій Llama-3.1-8B, де perplexity обчислювалася на російськомовному тексті, показує ту саму картину в інших абсолютних числах: Q5_K_S дає +1% до perplexity відносно 32 біт, Q2_K — +49%. Абсолютні значення з англомовними таблицями незіставні, бо текст інший, — а от форма кривої збігається.
Швидкість упирається в шину пам’яті, а не в обчислення
Поширене пояснення «Q4 швидший, бо менше обчислень» неправильне. Обчислень під час квантизації стає навіть більше: перед множенням цілі числа треба розгорнути назад у дробові. Виграш береться з іншого місця.
Щоб видати один токен, модель зобов’язана прочитати з пам’яті всі свої ваги. Не частину, а всі. Отже, швидкість генерації впирається не в потужність чипа, а в пропускну здатність шини пам’яті: скільки гігабайтів за секунду залізо здатне прокачати. Стиснули файл удвічі — удвічі менше даних на токен — швидша відповідь.
З обробкою промпту все навпаки. Ваш запит модель обробляє пачкою токенів одразу, ваги при цьому читаються один раз на всю пачку, і вузьким місцем стає арифметика. Тут квантизація не допомагає, а заважає — деквантизація забирає такти.
Саме це видно в загальній таблиці замірів llama.cpp на Apple Silicon. Стовпець pp512 — обробка промпту, tg128 — генерація; інструмент llama-bench, усі шари на GPU, модель 7B.
| Чип | Шина, ГБ/с | F16: промпт / генерація | Q8_0: промпт / генерація | Q4_0: промпт / генерація |
|---|---|---|---|---|
| M2 | 100 | 201,3 / 6,72 | 181,4 / 12,21 | 179,6 / 21,91 |
| M1 Max | 400 | 599,5 / 23,03 | 537,4 / 40,20 | 530,1 / 61,19 |
| M4 Max | 546 | 922,8 / 31,64 | 891,9 / 54,05 | 885,7 / 83,06 |
| M2 Ultra | 800 | 1401,9 / 41,02 | 1248,6 / 66,64 | 1238,5 / 94,27 |
Генерація від кванта росте у 2,2–3,3 раза, обробка промпту падає на 4–12%. Той самий ефект незалежно отримано на процесорному сервері з двома Xeon Platinum: генерація 8B-моделі йде 2,83 токена за секунду в 16 бітах і 4,65 у Q4_K_S, а обробка промпту — 79,6 проти 92,5 за 61,4 у Q5_0, тобто скаче без жодного зв’язку з розміром файлу.
Тепер наш розрахунок, якого немає в жодного з розібраних матеріалів. Візьмемо M2 Ultra з шиною 800 ГБ/с і помножимо розмір файлу на швидкість генерації — отримаємо, скільки гігабайтів за секунду реально прокачується.
| Квант 7B | Розмір | Генерація | Реальний потік | Частка від шини |
|---|---|---|---|---|
| F16 | 13,00 ГБ | 41,02 т/с | ≈533 ГБ/с | 67% |
| Q8_0 | 6,70 ГБ | 66,64 т/с | ≈446 ГБ/с | 56% |
| Q4_0 | 3,50 ГБ | 94,27 т/с | ≈330 ГБ/с | 41% |
Розміри взяті з таблиці llama.cpp для 7B, тому розрахунок дає порядок величини, а не точне значення. Але висновок стійкий: файл стискається у 3,7 раза, а швидкість росте лише у 2,3. Що нижчий квант, то гірше залізо утилізує власну шину — накладні витрати на розгортання чисел з’їдають частину виграшу. Практичний сенс простий: не чекайте від Q4 чотирикратного прискорення відносно 16 біт, чекайте дво-трикратного, а між Q8 і Q4 — приблизно півторакратного.
Скільки гігабайтів за секунду прокачує конкретно ваша машина — питання вже не до моделі: цифри по відеокартах, Mac і міні-ПК зібрані в гіді по залізу для локального ШІ.
Де втрата помітна: код, математика й українська проти балачки
Середня цифра по моделі марна, бо ви не користуєтеся моделлю «в середньому». Розкладемо втрату за типами задач — це і є та частина, заради якої зазвичай і шукають відповідь.
Переживають Q4 спокійно. Здоровий глузд і побутова розмова: на HellaSwag падіння від 16 біт до Q3_K_S становить 0,64 бала — менше за розкид між прогонами. Переказ, переформулювання, чернетка листа, рольовий діалог — та сама зона. Тут Q4_K_M справді еквівалентний старшим квантам.
Ламаються першими. Порядок деградації на Llama-3.1-8B під час переходу на Q3_K_S обчислюється прямо за таблицею вище:
- шкільна математика GSM8K — мінус 9,32 бала;
- дотримання інструкції IFEval — мінус 5,04;
- фактичні знання MMLU — мінус 4,19;
- здоровий глузд HellaSwag — мінус 0,64.
Той самий порядок незалежно підтверджує робота з деградації на десяти моделях: на трьох бітах задачі на здоровий глузд зберігають помітно більше, ніж задачі на знання та міркування. Робота IJCAI додає нюанс, який варто проговорити: квантизація не так б’є по «складному», як посилює власні слабкі місця конкретної моделі — складні задачі не завжди втрачають більше за всіх. Окремо там же відзначені проблеми з дотриманням інструкції та з розпізнаванням власних вигадок.
Код. Прямий замір на HumanEval і MBPP по дванадцяти варіантах моделей чотирьох сімейств дає падіння «чистої» точності на 0,36% при восьми бітах і 1,19% при чотирьох. Цифра маленька, але в неї є два застереження: замір зроблено на bitsandbytes, а не на GGUF, і він про середню за набором задач точність. Оцінка моделлю-суддею в роботі IJCAI фіксує по коду і STEM помітне падіння там, де автоматичний рахунок його майже не показує. Практичний висновок: якщо модель пише код в агенті, де помилка в одному рядку руйнує запуск, зайвий біт вартий своїх гігабайтів.
Довгі ланцюжки міркувань. Окремого чистого заміру на GGUF-квантах тут немає, але механізм очевидний із математики: що довший ланцюжок кроків, то більше шансів, що хоча б на одному кроці округлення відведе вибір убік, а далі помилка не виправляється.
Рідкісні мови — включно з українською. Тут найбільша знахідка ресерчу. Робота Cohere порівняла три види оцінки квантизованих багатомовних моделей і отримала розрив: падіння в японській 1,7% за автоматичними тестами обертається 16,0% за оцінкою живих людей на реальних промптах. Найгірше страждають мови з нелатинським письмом, а із задач найшвидше деградує математичне міркування. Другою незалежною роботою з машинного перекладу підтверджено: що менше мова представлена в навчальних даних, то сильніший удар.
Українську в цих роботах прямо не вимірювали, тому конкретного числа для неї немає. Але клас визначається: кирилиця, не топ навчальних корпусів, калібрування складальників — англомовне. Якщо модель потрібна вам для українських текстів, орієнтуватися на англомовні графіки perplexity не можна — вони занижують шкоду. Розумний практичний хід: тримати на один щабель більше запасу, ніж радять англомовні гайди, тобто там, де англійцю вистачає Q4_K_M, брати Q5_K_M.
Велика модель у Q4 проти маленької у Q8 за рівної пам’яті
Питання звучить так: у 16 ГБ пам’яті влазить або модель на 14B у восьми бітах, або на 27B у чотирьох. Що брати?
Відповідь на нього дано не думкою, а законом масштабування. Робота Тіма Деттмерса й Люка Зеттлмоєра прогнала понад 35 000 експериментів на моделях від 19 млн до 176 млрд параметрів у розрядностях від трьох до восьми біт і сформулювала висновок одним рядком: за фіксованої загальної кількості біт чотири біти майже завжди оптимальні для якості. Тобто за рівної пам’яті велика модель у Q4 обіграє меншу в Q8.
Робота IJCAI на моделях від 1B до 405B приходить до того самого з іншого боку: квантизовані моделі часто обходять FP16-версії моделей меншого розміру.
Межі в правила дві, і обидві важливі.
Знизу. Нижче трьох біт правило розвертається: 70B-модель у двох бітах гірша, ніж 7B у чотирьох. Практична стеля стиснення — Q3, і то із застереженнями; Q2 беруть, коли альтернатива — не запускати взагалі.
Зверху по дрібних моделях. У маленької моделі немає запасу міцності, і це видно в цифрах — нижче лінійка Qwen3, найзручнішого сімейства для локального запуску за кількістю розмірів. Частка від власного результату в 16 бітах:
| Модель | 8 біт | 4 біти | 3 біти |
|---|---|---|---|
| Qwen3-0.6B | 100,7% | 70,8% | 30,6% |
| Qwen3-1.7B | 100,8% | 80,7% | 44,2% |
| Qwen3-4B | 100,1% | 95,4% | 72,4% |
| Qwen3-8B | 100,2% | 95,9% | 81,2% |
| Qwen3-14B | 100,1% | 98,1% | 87,9% |
Замір зроблено на GPTQ, а не на GGUF K-квантах, тому переносити сюди абсолютні відсотки не можна — переноситься закономірність. А вона однозначна: що менша модель, то раніше в неї обрив. Для 0,6B чотири біти вже майже катастрофа, для 14B — плата у два відсотки.
Звідси робоче правило вибору:
- Модель до 4B — беріть Q6_K або Q8_0, економія на квантах тут безглузда: файл і так маленький, а втрата велика.
- Модель 7–14B — Q4_K_M базовий вибір, Q5_K_M якщо пам’яті вистачає і задачі складні. Це діапазон, у якому живе більшість робочих моделей під одну відеокарту, включно з Gemma 3 від Google.
- Модель 27B і вище — Q4_K_M майже завжди вигідніший, ніж модель менша у Q8. Нижче Q4 спускайтеся, тільки якщо інакше не запуститься. Окремо варто тримати на думці архітектури з експертів на кшталт Solar Open 2 на 250 млрд параметрів: у роботі активна лише частина ваг, і переносити на таку модель цифри щільних моделей не можна.
- Ніколи не оцінюйте вибір за однією цифрою біт:
Q4_K_Mіз калібруванням іQ4_0без нього — різні речі за однакової четвірки в імені.
Яка саме модель стане у ваш бюджет пам’яті — питання окреме, і розібране воно в добірці локальних моделей під задачу та залізо.
KV-кеш квантизується окремо — і це друге джерело втрат
Про кванти ваг пишуть усі. Про те, що поруч є другий, незалежний контур стиснення, не пише майже ніхто.
Поки модель працює з контекстом, вона тримає в пам’яті KV-кеш — проміжні ключі та значення по кожному вже обробленому токену. Цей кеш не має стосунку до файлу моделі: він живе окремо, росте лінійно з довжиною контексту і на довгих діалогах спокійно з’їдає більше пам’яті, ніж самі ваги. У 8B-моделі з контекстом 32 тисячі токенів кеш у 16 бітах займає близько 6 ГБ.
Кеш можна квантизувати окремим ключем запуску, і ціна цього виміряна. На Qwen 2.5 Coder 7B за довжини тексту 6114 токенів perplexity з кешем у 16 бітах становила 8,3891 ± 0,02016, а з кешем у q8_0 — 8,3934 ± 0,02017. Різниця 0,0043 не виходить за межі довірчого інтервалу. Пам’ять при цьому падає вдвічі: ті самі 6 ГБ перетворюються на 3 ГБ, а на q4_0 — приблизно на 2 ГБ.
Що важливо знати до того, як вмикати:
- Flash Attention обов’язковий. Без нього квантизація кешу не працює.
- q8_0 безпечний, q4_0 — ні. На моделях з агресивним груповим пакуванням голів уваги (у Qwen2 воно восьмикратне) чотирибітний кеш дає помітно зіпсовані відповіді там, де восьмибітний працює нормально. Робочий компроміс, який знайшли в обговоренні, — ключі тримати в q8_0, значення в q4_0.
- Замір один. Це не серія: одна модель, один прогін, зроблений автором самої реалізації. Незалежної перевірки у відкритому доступі я не знайшов.
- Порядок дій теж має значення. Якщо пам’яті не вистачає, спершу є сенс опустити кеш до q8_0 і залишити ваги на Q5_K_M, а не навпаки: судячи з цифр, восьмибітний кеш коштує дешевше, ніж крок униз по вагах.
Слабкі місця чужих замірів: де методики не сходяться між собою
Це не наші заміри, і ставитися до них треба відповідно.
Власного стенду в нас немає. Жодної з машин, на яких зняті наведені числа, у редакції немає; усе, що тут є, — зведення чужих публікацій із названою методикою в одну картину. Жанр матеріалу — порівняння, а не бенчмарк.
Канонічна таблиця застаріла. Ряд «Q4_K_M +0,0535, Q8_0 +0,0004» знято на LLaMA першого покоління. Його передруковують у 2026 році як актуальний, і це неправильно: у сучасних архітектур із розрідженими експертами й агресивним груповим пакуванням уваги чутливість інша.
Дані про розмір моделі отримані на іншому інструменті. Таблиця Qwen3 за розрядностями знята на GPTQ, AWQ, RTN і SPQR, а не на GGUF K-квантах. Закономірність переноситься, відсотки — ні.
Замір KV-кешу єдиний. Одна модель, один прогін, автор — розробник самої функції. Це краще, ніж нічого, але це не серія.
Прямого порівняння Q4 проти Q8 на одній GeForce з опублікованою методикою знайти не вдалося. Відкрита база замірів викладає RTX 4090 лише у Q4_K medium, і зіставити її з вісьмома бітами немає з чим. Механіка швидкості в статті показана на Apple Silicon і на процесорному сервері — там доступні обидві точки.
Один прогін — це один прогін. У роботі по Llama-3.1-8B декодування детерміноване і прогін єдиний. Різниця в частки бала між сусідніми квантами всередині такого заміру нічого не означає.
Локальні розбори містять прямі помилки. У матеріалі з конвертації в GGUF на форумі DOU написано, що Q8_0 погіршує якість приблизно на 50% відносно 16 біт. Насправді вдвічі падає розмір файлу, а виміряна дельта perplexity становить 0,0004. Якщо ви зустрічаєте відсотки якості без зазначення моделі й тесту — це майже завжди переказ переказу.
Що застаріє першим. Найшвидше — конкретні значення по моделях: нове сімейство виходить раз на кілька тижнів, і Unsloth викладає GGUF-збірки в день релізу. Механіка — блоки, шина пам’яті, порядок деградації задач — тримається довше. Свіжі цифри завжди варто дивитися в картці конкретної моделі на Hugging Face і в обговореннях llama.cpp.
Часті запитання
Який квант обрати, якщо відеопам’яті всього 8 ГБ?
Модель на 7–8B у Q4_K_M займає близько 4,9 ГБ, і це залишає запас під контекст — базовий робочий варіант. Якщо задачі розмовні, можна опуститися до Q4_K_S і заощадити ще 0,2 ГБ. Спускатися до Q3 на такій моделі не варто: саме там починається обрив, а виграш у пам’яті менший за гігабайт.
Q4_K_M чи Q4_K_S — чи є між ними різниця на практиці?
Різниця в розмірі — близько 0,23 ГБ на моделі 8B, різниця в perplexity в замірі на Llama-3.1-8B — 0,06 (7,56 проти 7,62). У варіанті M на щабель вище квантизуються найчутливіші тензори уваги. Якщо 0,23 ГБ у вас є, беріть M. Якщо не вистачає буквально цих гігабайтів під контекст, S — чесний компроміс.
Чи варто брати Q6_K замість Q8_0, якщо пам’яті вистачає на обидва?
Як правило, так. На 8B-моделі Q6_K важить 6,60 ГБ проти 8,54 ГБ у Q8_0, а приріст perplexity становить 0,0044 проти 0,0004 на семимільярдній моделі — різниця між двома способами не втратити нічого. Майже два гігабайти, що звільнилися, корисніше витратити на довжину контексту, ніж на восьмий біт.
Чому той самий Q4_K_M від різних авторів на Hugging Face працює по-різному?
Через калібрування. Квантизація з importance matrix береже ті ваги, які реально активуються на калібрувальному тексті, а без неї всі ваги вважаються рівноцінними. Ім’я файлу і його розмір при цьому збігаються. Дивіться в картці моделі, чи вказано imatrix і на якому наборі його знято; що нижчий квант, то сильніша ця різниця.
Чи потрібно квантизувати KV-кеш, якщо контекст невеликий?
Немає сенсу. На коротких діалогах кеш займає небагато, і виграш у пам’яті буде символічним, а ризик ненульовий. Квантизація кешу окупається на довгих контекстах, де він зрівнюється за обсягом із самою моделлю. Починати завжди варто з q8_0: його ціна в якості виміряна в тисячних частках perplexity.
Чи псується українська мова в моделі сильніше, ніж англійська?
За наявними даними — так, у неанглійських мов втрати більші, і особливо в мов із нелатинським письмом. Прямого заміру українською немає, але на японській розрив показовий: 1,7% падіння за автоматичними тестами проти 16,0% за оцінкою людей. Практичний висновок — тримати на один щабель кванта більше запасу, ніж радять англомовні гайди.
