Коротко (TL;DR)
- Зайнята відеопам’ять — це не «розмір моделі». Це чотири доданки: ваги, KV-кеш, службові буфери рушія і те, що вже забрав робочий стіл. Новачків ламає другий: KV-кеш росте разом із довжиною діалогу, тому модель спокійно завантажується і падає за півгодини роботи.
- Правило «Q4 — це 0,5 байта на параметр» занижує результат приблизно на 20%. Ми порахували реальні розміри GGUF-файлів восьми моделей від 3B до 70B: Q4_K_M дає 4,86 біта на параметр (діапазон 4,78–5,03), Q8_0 — 8,47 біта. На 70B різниця з ходовим правилом — 6,8 ГіБ.
- KV-кеш залежить від кількості шарів і KV-голів, а не від кількості параметрів. Qwen3 32B їсть 256 КіБ на токен, Llama 3.1 8B — 128 КіБ, а MoE-модель Qwen3 30B-A3B — усього 96 КіБ, менше за щільну восьмимільярдну.
- Живий приклад провалу: Qwen3 32B у Q4_K_M на карті 24 ГБ займає 21,6 ГіБ за контексту 8k і 27,6 ГіБ за 32k. Модель стартує, працює, а на довгому документі виходить за межі карти.
- Формула важливіша за таблицю. Таблиця застаріє з наступним релізом, формула — ні: щоб порахувати будь-яку нову модель, потрібні чотири числа з її картки та розмір файлу.
Усі розміри файлів, параметри моделей і значення прапорців у цьому матеріалі звірені 16 серпня 2026 року. Що застаріє першим і як перевірити — наприкінці. Матеріал відповідає на питання «чи влізе»; якщо ви ще не вирішили, що саме ставити, почніть із розбору того, яку локальну модель обрати під завдання, і повертайтеся сюди по розрахунок.
- Коротко (TL;DR)
- З чого складається зайнята відеопам’ять: чотири доданки
- Формула розрахунку на прикладі Llama 3.1 8B: шість чисел із картки
- Скільки важить квант: реальні байти GGUF проти правила 0,5
- Таблиця: скільки відеопам’яті потрібно під модель і квант
- KV-кеш і довжина контексту: чому модель падає на довгому діалозі
- Ковзне вікно уваги зрізає кеш Gemma 3 у п’ять разів
- MoE-моделі: чому 117 млрд параметрів не означає 117 ГБ пам’яті
- Модель не влазить: чотири важелі й ціна кожного
- Звірка розрахунку з чужими замірами: де формула сходиться і де ні
- Ризики розрахунку: рушій, репозиторій кванта і платформа
- Часті запитання
З чого складається зайнята відеопам’ять: чотири доданки
Питання «скільки відеопам’яті потрібно нейромережі» майже завжди ставлять у формі «модель на 8 мільярдів параметрів — скільки це гігабайтів». І майже завжди відповідь неповна, бо в карту вантажиться не лише модель.
Розберімося по доданках. Опорою буде документація сервера llama.cpp — це рушій, на якому працюють і Ollama, і LM Studio, і саме його значення за замовчуванням визначають, скільки пам’яті піде під кеш. Супровідник проєкту окремо розбирав лог завантаження порядково і назвав рівно чотири буфери, які виділяються на відеокарті; про буфер ваг там сказано: «The total size should be very close to the size of the model file on disk». Це перший і головний висновок для розрахунку: рахувати треба від реального файлу, а не від арифметики «параметри × півбайта».
Ось усі чотири доданки.
1. Ваги моделі. Займають рівно стільки, скільки важить файл GGUF на диску. Не приблизно — практично байт у байт, бо рушій відображає файл у пам’ять як є.
2. KV-кеш. Внутрішня пам’ять моделі про те, що вже сказано в діалозі. Кожен новий токен додає до неї фіксовану порцію байтів. За контексту в чотири тисячі токенів це частки гігабайта, за ста двадцяти восьми тисяч — десятки. Це і є доданок, якого немає в більшості таблиць і через який розрахунки новачків розходяться з реальністю.
3. Службові буфери рушія. У розібраному лозі це CUDA0 compute buffer size = 507.00 MiB — місце під проміжні результати обчислень, плюс зовсім маленький вихідний буфер на 1,95 МіБ. Понад надруковане драйвер CUDA забирає ще кілька сотень мегабайтів під власний контекст, і в лозі рушія ця частина не видна взагалі. Робоча оцінка на обидва буфери разом — 1–1,5 ГіБ; далі в таблицях ми беремо 1,2 ГіБ. Це оцінка, а не замір, і ми її так і позначаємо.
4. Те, що вже зайнято. На Windows робочий стіл, браузер і композитор віконного менеджера тримають від 0,5 до 1,5 ГіБ відеопам’яті ще до запуску моделі. На Linux без графічної оболонки — майже нуль. Різниця між цими двома випадками більша, ніж увесь службовий буфер рушія.
Складається це так:
зайнята відеопам'ять = розмір файлу GGUF
+ KV-кеш (росте з довжиною контексту)
+ 1–1,5 ГіБ буферів рушія і драйвера
+ те, що забрала ОС
Перші два доданки обчислюються точно. Третій оцінюється. Четвертий читач бачить у диспетчері завдань сам.
Формула розрахунку на прикладі Llama 3.1 8B: шість чисел із картки
Розберімо один розрахунок повністю — далі за цим зразком обчислюється будь-яка модель, включно з тією, що вийде за місяць.
Беремо Llama 3.1 8B у кванті Q4_K_M і контекст 8192 токени.
Крок 1. Розмір файлу. Ідемо в репозиторій із готовими GGUF на Hugging Face і дивимося точний розмір блоба: Meta-Llama-3.1-8B-Instruct-Q4_K_M.gguf — 4 920 739 232 байти, тобто 4,58 ГіБ. Ollama для того самого кванта друкує округлене «4.9GB» — збігається.
Крок 2. Чотири числа з config.json. У картці моделі відкриваємо файл config.json і виписуємо:Поле Значення в Llama 3.1 8B Що це num_hidden_layers32 скільки шарів у моделі num_key_value_heads8 скільки KV-голів (не плутати з головами уваги) head_dim128 розмірність однієї голови max_position_embeddings131072 максимальний рідний контекст
Окремо потрібен п’ятий параметр — байтів на елемент кешу. За замовчуванням llama.cpp зберігає KV-кеш у f16, тобто 2 байти. Це прямо записано в документації рушія: --cache-type-k, -ctk: KV cache data type for K allowed values: f32, f16, bf16, q8_0, q4_0, q4_1, iq4_nl, q5_0, q5_1 (default: f16). І шосте число — довжина контексту, яку ви задасте прапорцем -c.
Крок 3. KV-кеш на один токен. Формула:
KV на токен = 2 × шарів × KV-голів × head_dim × байтів_на_елемент
Двійка на початку — бо кешуються і ключі (K), і значення (V), причому симетрично: у лозі рушія це видно як K (f16): 672.00 MiB, V (f16): 672.00 MiB.
Підставляємо: 2 × 32 × 8 × 128 × 2 = 131 072 байти = 128 КіБ на токен.
Крок 4. KV-кеш на весь контекст. 128 КіБ × 8192 токени = 1,00 ГіБ. За 32 768 токенів буде 4,00 ГіБ, за 131 072 — 16,00 ГіБ.
Крок 5. Додаємо.
4,58 ГіБ (ваги)
+ 1,00 ГіБ (KV за 8k)
+ 1,20 ГіБ (буфери)
= 6,78 ГіБ
Плюс те, що забрала ОС. На карті 8 ГБ (це 8 ГіБ за фактом, відеопам’ять маркують у двійкових гігабайтах) лишається близько 1,2 ГіБ — на голому Linux вистачить, на Windows із відкритим браузером уже впритул. На 12 ГБ конфігурація живе спокійно і з запасом під більший контекст.
Чому KV-голів саме 8, а не 32. У Llama 3.1 8B тридцять дві голови уваги, але лише вісім KV-голів — це механізм GQA (grouped-query attention, згрупована увага): кілька голів уваги ділять один набір ключів і значень. Для розрахунку пам’яті важливі саме KV-голови, і різниця тут чотириразова. Якщо взяти у формулу num_attention_heads замість num_key_value_heads, відповідь буде завищена вчетверо — це найчастіша арифметична помилка в цій темі.
Ось ті самі чотири числа для всіх моделей нашої таблиці, щоб не відкривати десять карток:Модель Шарів KV-голів head_dim KV на токен (f16) Рідний контекст Llama 3.2 3B 28 8 128 112 КіБ 131 072 Llama 3.1 8B 32 8 128 128 КіБ 131 072 Qwen3 8B 36 8 128 144 КіБ 40 960 Qwen3 14B 40 8 128 160 КіБ 40 960 Mistral Small 3.2 24B 40 8 128 160 КіБ 131 072 Gemma 3 27B 62 16 128 496 КіБ 131 072 Qwen3 32B 64 8 128 256 КіБ 40 960 Llama 3.3 70B 80 8 128 320 КіБ 131 072 Qwen3 30B-A3B (MoE) 48 4 128 96 КіБ 32 768 gpt-oss-120b (MoE) 36 8 64 72 КіБ 131 072
Уже з цієї таблиці видно головне: кількість параметрів і апетит до KV-кешу пов’язані слабко. У Qwen3 32B кеш удвічі товщий, ніж у Llama 3.1 8B, хоча параметрів учетверо більше — бо шарів рівно вдвічі більше. А в Gemma 3 27B KV-кеш формально найгірший у добірці, і винні не параметри, а шістнадцять KV-голів замість восьми. Що з цим робить рушій — розберемо окремо, бо там усе не так страшно.
Скільки важить квант: реальні байти GGUF проти правила 0,5
Ходове правило звучить так: FP16 — 2 байти на параметр, Q8 — 1 байт, Q4 — 0,5 байта. Воно повторюється в усіх восьми матеріалах, які ми розібрали для цієї статті, і воно хибне.
Ми взяли точні розміри блобів з API Hugging Face (поле siblings[].size — це байти, а не округлення картки) і поділили на точну кількість параметрів із метаданих safetensors. Ось що вийшло на восьми моделях від 3B до 70B:Квант Виміряно, біт на параметр Діапазон по 8 моделях Ходове правило Q3_K_M 3,91 3,82–4,00 3,0 Q4_K_M 4,86 4,78–5,03 4,0 Q5_K_M 5,68 5,59–5,78 5,0 Q6_K 6,54 6,45–6,58 6,0 Q8_0 8,47 8,35–8,52 8,0 MXFP4 (gpt-oss-120b) 4,34 — 4,0
Розбіжність із правилом — від 6 до 21 відсотка, і завжди в один бік: реальний файл більший за очікуваний. Причин дві. Перша — K-кванти тримають частину тензорів у вищій точності, тому «Q4» не означає, що всі ваги лежать у чотирьох бітах. Друга — службові дані формату й таблиці масштабів усередині блоків.
Перевірити це можна, не вірячи нам на слово. Ollama друкує для Llama 3.3 70B розмір q4_K_M — 43GB і fp16 — 141GB. Відношення 43 до 141 дає 4,88 біта на параметр — тобто незалежний реєстр приходить до тієї самої цифри, що й наш розрахунок за байтами Hugging Face, а не до заявлених чотирьох бітів.
Практичний висновок простий: беріть розмір конкретного файлу, а не рахуйте за правилом. Порахуємо недобір прямо за цифрами вище. У Llama 3.1 8B правило обіцяє 3,74 ГіБ, файл важить 4,58 — недобір 0,84 ГіБ. У Qwen3 32B: обіцяно 15,26, реально 18,40 — недобір 3,15 ГіБ. У Llama 3.3 70B: обіцяно 32,85, реально 39,60 — недобір 6,75 ГіБ.
Майже сім гігабайтів на 70B — це рівно та величина, яка вирішує, чи вміститься модель у дві карти по 24 ГБ. Хто рахував за правилом, побачить 32,85 ГіБ і вирішить, що запас величезний; насправді ваги займуть 39,6, і з KV-кешем на довгому контексті збірка на двох RTX 3090 заради 48 ГБ виявиться не «із запасом», а впритул.
Найближче з англомовного топу підійшли ті, хто дає 0,57 байта на параметр для Q4_K_M — це 4,56 біта, уже тепліше, але все ще нижче за виміряне.
Таблиця: скільки відеопам’яті потрібно під модель і квант
Перша таблиця — лише ваги, тобто розмір файлу GGUF у ГіБ. Це нижня межа: без контексту й без буферів модель працювати не буде, але менше за це число вона не займе ніколи.Модель Q3_K_M Q4_K_M Q5_K_M Q6_K Q8_0 Llama 3.2 3B 1,7 1,9 2,2 2,5 3,2 Llama 3.1 8B 3,7 4,6 5,3 6,1 8,0 Qwen3 14B 6,8 8,4 9,8 11,3 14,6 Mistral Small 3.2 24B 10,7 13,3 15,6 18,0 23,3 Gemma 3 27B 12,5 15,4 17,9 20,6 26,7 Qwen3 32B 14,9 18,4 21,6 25,0 32,4 Qwen3 30B-A3B (MoE) 13,7 17,3 20,2 23,4 30,3 Llama 3.3 70B 31,9 39,6 46,5 53,9 69,8 gpt-oss-120b (MoE) — — — — —
У gpt-oss-120b прочерки не через недогляд: модель публікується одразу у форматі MXFP4 і важить 59,0 ГіБ, а звичних K-квантів у неї просто немає. Докладніше — у розділі про MoE.
Друга таблиця — повна: ваги в Q4_K_M плюс KV-кеш у f16 плюс 1,2 ГіБ буферів. Остання колонка — реалістичний мінімум карти за контексту 8192 токени, з поправкою на те, що частину пам’яті забере система.Модель (Q4_K_M) Ваги За 4k За 8k За 32k За 128k Карта за 8k Llama 3.2 3B 1,9 3,5 4,0 6,6 17,1 6–8 ГБ Llama 3.1 8B 4,6 6,3 6,8 9,8 21,8 8 ГБ впритул, 12 ГБ спокійно Qwen3 14B 8,4 10,2 10,8 14,6 29,6 12 ГБ Mistral Small 3.2 24B 13,3 15,2 15,8 19,5 34,5 16 ГБ впритул, 24 ГБ спокійно Gemma 3 27B 15,4 17,3 17,6 19,5 27,0 24 ГБ Qwen3 30B-A3B (MoE) 17,3 18,9 19,2 21,5 30,5 24 ГБ Qwen3 32B 18,4 20,6 21,6 27,6 51,6 24 ГБ лише на короткому контексті Llama 3.3 70B 39,6 42,1 43,3 50,8 80,8 48 ГБ (дві по 24) gpt-oss-120b (MXFP4) 59,0 60,4 60,5 61,4 64,7 64–96 ГБ або вивантаження експертів
Значення для Gemma 3 27B і gpt-oss-120b пораховані з урахуванням ковзного вікна — якщо рахувати їх наївною формулою, цифри вийдуть у рази більші, і саме так роблять усі чужі таблиці. Чому так — наступні два розділи.
Три речі, які в цій таблиці легко проґавити.
Перше: у Llama 3.3 70B колонка «за 128k» дає 80,8 ГіБ — тобто на довгому контексті KV-кеш цієї моделі важить приблизно стільки ж, скільки її власні ваги. Друге: у Qwen3 32B розкид між 4k і 128k — двадцять вісім гігабайтів, більше, ніж важить сама модель. Третє: gpt-oss-120b на 117 мільярдів параметрів від 4k до 128k додає всього 4,3 ГіБ — менше, ніж восьмимільярдна Llama.
Зверніть увагу і на рядок Qwen3 32B: 21,6 ГіБ за 8k роблять її межовою для однієї карти на 24 ГБ, а от на RTX 5090 з її стелею у 32 ГБ та сама модель живе вже з контекстом 32k.
KV-кеш і довжина контексту: чому модель падає на довгому діалозі
Найчастіший сценарій виглядає так. Модель поставили, вона запустилася, відповідає швидко. За півгодини роботи, на довгому документі або після десятка повідомлень, рушій падає з помилкою нестачі пам’яті або починає видавати токени вдесятеро повільніше.
Причина в тому, що ваги — константа, а KV-кеш — змінна. Він росте лінійно з кількістю токенів у контексті й живе в тій самій відеопам’яті.Модель KV на токен 4k 8k 16k 32k 128k Llama 3.2 3B 112 КіБ 0,44 0,88 1,75 3,50 14,00 Llama 3.1 8B 128 КіБ 0,50 1,00 2,00 4,00 16,00 Qwen3 14B 160 КіБ 0,62 1,25 2,50 5,00 20,00 Mistral Small 3.2 24B 160 КіБ 0,62 1,25 2,50 5,00 20,00 Gemma 3 27B (з вікном) 496 КіБ 0,72 1,03 1,66 2,91 10,41 Qwen3 32B 256 КіБ 1,00 2,00 4,00 8,00 32,00 Llama 3.3 70B 320 КіБ 1,25 2,50 5,00 10,00 40,00 Qwen3 30B-A3B (MoE) 96 КіБ 0,38 0,75 1,50 3,00 12,00 gpt-oss-120b (з вікном) 72 КіБ 0,15 0,29 0,57 1,13 4,50
Значення в таблиці — гібібайти (ГіБ), тобто двійкові гігабайти.
Розберімо кейс цілком. Qwen3 32B у Q4_K_M на карті 24 ГБ — популярна конфігурація, її радять майже всі довідники.Контекст Ваги KV-кеш Буфери Разом Уміщується в 24 ГіБ 4 096 18,4 1,0 1,2 20,6 так, із запасом 3,4 ГіБ 8 192 18,4 2,0 1,2 21,6 так, запас 2,4 ГіБ 16 384 18,4 4,0 1,2 23,6 формально так, але на Windows із робочим столом уже ні 32 768 18,4 8,0 1,2 27,6 ні, промах на 3,6 ГіБ
Ось звідки береться відчуття «працювало, а потім зламалося»: під час запуску з прапорцем -c 32768 рушій виділяє весь кеш одразу і чесно падає на старті, а от за автоматичного або зростаючого контексту проблема вистрілює вже в процесі.
Зверніть увагу, що рідний контекст у Qwen3 32B — 40 960 токенів, а не 131 072, як у Llama 3.x. Колонка «128k» для цієї родини описує режим із YaRN, який треба вмикати окремо; без нього такий контекст просто недоступний. У чужих таблицях це застереження зазвичай відсутнє, і читач рахує пам’ять під режим, якого в нього немає.
Як перевірити свій розрахунок. llama.cpp друкує розмір кешу просто під час завантаження, рядком на кшталт size = 6791.50 MiB (69632 cells, 47 layers, 1/1 seqs), K (f16): 3595.50 MiB, V (f16): 3196.00 MiB. Якщо ваше число і число рушія розходяться більш ніж на пару відсотків — найімовірніше, у формулу підставлені голови уваги замість KV-голів, або в моделі ковзне вікно.
Ковзне вікно уваги зрізає кеш Gemma 3 у п’ять разів
За таблицею архітектур Gemma 3 27B виглядає найгіршою моделлю в добірці: 62 шари й 16 KV-голів дають 496 КіБ на токен — удвічі більше, ніж у Llama 3.3 70B. Наївний розрахунок на 32k контексту дає 15,50 ГіБ лише під кеш. Разом із вагами в Q4_K_M це майже 32 ГіБ, і модель, яку Google називає «такою, що працює на одній відеокарті», у 24 ГБ не влазить узагалі.
Так роблять усі чужі таблиці. І так не працює жоден сучасний рушій.
У config.json у Gemma 3 є два поля, які в розрахунок зазвичай не беруть: sliding_window: 1024 і sliding_window_pattern: 6. Технічний звіт Gemma 3 розшифровує їх дослівно: «a pattern of 5 local layers for every global layer» і «assign a smaller span of only 1024 tokens to the local layers».
По-людськи: з 62 шарів лише кожен шостий бачить увесь контекст. Таких шарів десять. Решта п’ятдесят два дивляться назад не далі ніж на 1024 токени — і тримати в кеші більше їм не потрібно.
llama.cpp це враховує, причому за замовчуванням: у документації сервера є прапорець --swa-full: use full-size SWA cache (default: false). Значення за замовчуванням false означає рівно те, що кеш локальних шарів обмежений вікном, а не довжиною контексту.
Рахуємо правильно. Десять глобальних шарів тримають повний контекст, п’ятдесят два локальних — по 1024 токени кожен:Контекст Наївна формула З урахуванням вікна У скільки разів менше 8 192 3,88 ГіБ 1,03 ГіБ 3,8 32 768 15,50 ГіБ 2,91 ГіБ 5,3 131 072 62,00 ГіБ 10,41 ГіБ 6,0
Автори моделі міряють той самий ефект у частках, і тут потрібна точність у цитуванні. Конкретний відсоток у тексті звіту наведено для абляційного варіанта зі співвідношенням 1:3 і вікном 1024: за контексту 32k накладні витрати на кеш падають із 60 відсотків до менш ніж 15. Для продакшен-схеми 5:1, яка й стоїть у Gemma 3 27B, окремого числа в прозі звіту немає — тільки графік. Глобальних шарів у 5:1 менше, ніж у 1:3, тобто економія має бути не гіршою, але приписувати продакшен-моделі рівно ці 15 відсотків було б натяжкою.
Практичний підсумок: Gemma 3 27B у Q4_K_M за 32k контексту займає 19,5 ГіБ, а не 32 — тобто спокійно живе на карті 24 ГБ, тоді як «легша» за параметрами Qwen3 32B на тому самому контексті не живе. З таблиці «модель × квант» цього не видно ніяк.
Важливе застереження. Ковзне вікно — властивість зв’язки моделі й рушія, а не лише моделі. Запустіть ту саму Gemma 3 з прапорцем --swa-full, або на бекенді, який цей режим не реалізує, і повернеться чесна наївна цифра в 15,50 ГіБ. Тому перевіряти треба не тільки картку моделі, а й те, що друкує рушій під час завантаження.
MoE-моделі: чому 117 млрд параметрів не означає 117 ГБ пам’яті
Mixture of Experts — архітектура, у якій модель складається з багатьох «експертів», а на кожен токен працює лише кілька з них. У Qwen3 30B-A3B це 128 експертів, з яких активні 8; у gpt-oss-120b — теж 128 експертів, активні 4.
Звідси росте стійка хиба в обидва боки, і обидва варіанти неправильні.
Хиба перша: «активних параметрів 3 мільярди, отже потрібно як під 3B». Ні. Роутер заздалегідь не знає, які експерти знадобляться на наступному токені, тому всі ваги зобов’язані лежати в пам’яті. Qwen3 30B-A3B у Q4_K_M важить 17,3 ГіБ — рівно як щільна модель на 30 мільярдів параметрів. Активні параметри заощаджують обчислення і швидкість, а не пам’ять.
Хиба друга: «якщо пам’ять як у щільної, то й вимоги як у щільної». Теж ні — і ось тут починається цікаве. KV-кеш у MoE обчислюється за тими самими шарами і KV-головами, а кількість експертів на нього не впливає взагалі.Модель Параметрів KV-голів Шарів KV на токен Qwen3 8B (щільна) 8,2 млрд 8 36 144 КіБ Qwen3 32B (щільна) 32,8 млрд 8 64 256 КіБ Qwen3 30B-A3B (MoE) 30,5 млрд 4 48 96 КіБ
MoE-модель на 30 мільярдів параметрів тримає кеш менший, ніж щільна на вісім. Причина не в експертах, а в чотирьох KV-головах замість восьми і сорока восьми шарах замість шістдесяти чотирьох. На контексті 32k це різниця між 3,00 і 8,00 ГіБ — ті самі п’ять гігабайтів, через які одна модель на карті 24 ГБ живе, а інша ні.
Окремий випадок — gpt-oss-120b. Модель на 117 мільярдів параметрів, з яких активні 5,1 мільярда. Публікується одразу в MXFP4: картка OpenAI прямо пише, що «the models were post-trained with MXFP4 quantization of the MoE weights, making gpt-oss-120b run on a single 80GB GPU». Файл важить 63,4 ГБ, тобто 59,0 ГіБ — 4,34 біта на параметр за нашим розрахунком, і 4,25 біта за заявою Ollama (розбіжність пояснюється тим, що увага, роутер і ембединги лишаються в BF16).
При цьому її KV-кеш — найскромніший в усій добірці: 36 шарів, 8 KV-голів, розмірність голови всього 64, і на додачу половина шарів працює з ковзним вікном на 128 токенів. За повного контексту 131 072 токени кеш займає 4,50 ГіБ. Для порівняння, у щільної Llama 3.3 70B стільки ж кешу набирається вже за 16k.
Тобто «120B» лякає цифрою в назві, а по пам’яті поводиться як велика модель із дуже дешевим контекстом. Якщо ваги вміщуються — контекст майже нічого не додасть.
Як рахувати MoE взагалі:
- Ваги — за повною кількістю параметрів і реальним розміром файлу, як у щільної моделі. Жодних знижок на активні параметри.
- KV-кеш — за шарами і KV-головами з
config.json. Експертів у формулі немає. - Якщо ваги не влазять, у MoE є окремий важіль: у llama.cpp прапорець
--n-cpu-moeтримає ваги експертів перших N шарів в оперативній пам’яті, лишаючи увагу і спільні частини на відеокарті. Для щільної моделі такого важеля не існує — там вивантажуються шари цілком.
Модель не влазить: чотири важелі й ціна кожного
Розрахунок показав перебір. Далі є рівно чотири важелі, і в кожного своя ціна. Порядок нижче — від найдешевшого до найдорожчого.
Важіль 1. Вкоротити контекст. Найнедооціненіший і часто найбезболісніший. Прапорець -c у llama.cpp задає довжину контексту безпосередньо; за замовчуванням рушій бере її з моделі, а моделі зараз заявляють 128 тисяч токенів. Якщо ви ведете звичайний діалог, а не розбираєте стосторінковий документ, 8192 токени закривають майже все. У Qwen3 32B перехід із 32k на 8k вивільняє 6 ГіБ — більше, ніж дає зниження кванта на щабель.
Ціна: модель просто перестане пам’ятати початок довгої розмови. Жодної деградації якості всередині вікна не відбувається.
Важіль 2. Квантувати KV-кеш. Прапорці --cache-type-k q8_0 і --cache-type-v q8_0 переводять кеш із двох байтів на елемент на один, тобто ріжуть його рівно вдвічі. У Qwen3 32B за 32k це 4,00 ГіБ замість 8,00, і конфігурація повертається в 23,6 ГіБ — на карті 24 ГБ знову працює, хай і впритул.
Ціна за якістю — єдиний опублікований замір із методикою, який ми знайшли, дає різницю перплексії на Qwen 2.5 Coder 7B у 0,0043 (8,3891 проти 8,3934), і це в межах довірчого інтервалу обох вимірювань. Команду запуску й дані наведено в обговоренні в репозиторії llama.cpp. Це замір учасника спільноти, не наш і не вендорський, і він один — другого з числами знайти не вдалося.
Застереження з того самого обговорення важливе: безпечний саме q8_0. Про q4_0 там-таки пишуть, що він «produces weird results» на Qwen2-7B. Ділити кеш навпіл можна, на чотири — на власний ризик і з перевіркою на своїх завданнях.
Важіль 3. Спуститися на квант нижче. Q5_K_M замість Q6_K, Q4_K_M замість Q5_K_M. Кожен щабель за нашою виміряною шкалою — приблизно 0,8–1,4 біта на параметр, тобто на 32B-моделі близько 3 ГіБ.
Ціна — втрата якості відповідей, і вона нелінійна: різниця між Q6 і Q5 майже непомітна, між Q4 і Q3 — помітна добре. Докладний розбір того, що саме ламається на кожному щаблі, — тема окремого матеріалу, тут ми даємо лише цифри пам’яті.
Важіль 4. Вивантажити шари в оперативну пам’ять. Прапорець -ngl задає, скільки шарів тримати у відеопам’яті; усе, що не вмістилося, рахує процесор. Формально це дозволяє запустити що завгодно на чому завгодно. Практично це найдорожчий важіль із чотирьох.
Два незалежних сторонніх заміри дають уявлення про масштаб. На одній 14B-моделі в одному й тому самому кванті повна робота на GPU дає 43,18 токена за секунду, повністю на CPU — 2,89, розрив приблизно п’ятнадцятиразовий. На RTX 4060 з 8 ГБ перехід від повного завантаження до часткового вивантаження роняє швидкість із 40,58 до 8,62 токена за секунду — у 4,7 раза.
Важливіша за абсолютні числа форма кривої: втрата не пропорційна частці вивантажених шарів. Вона обвальна, бо на кожному кроці генерації відеокарта простоює, чекаючи ваги із системної пам’яті через шину PCIe. Вивантажити два шари з вісімдесяти — майже безкоштовно. Вивантажити двадцять — модель перетворюється на слайд-шоу.
Де вивантаження прийнятне:
- Прийнятне: пакетна обробка, де ви віддали завдання і пішли; вивантаження одного-двох останніх шарів; MoE-моделі через
--n-cpu-moe, де в оперативну пам’ять їдуть експерти, а не шари цілком, і втрати помітно менші. - Неприйнятне: інтерактивний чат, робота асистента в редакторі коду, будь-який сценарій, де ви чекаєте відповідь на екрані. Тут краще взяти модель на щабель менше і отримати її цілком у відеопам’яті.
Загальне правило за всіма чотирма важелями: спершу контекст і KV-кеш, потім квант, вивантаження — останнім. Перші два нічого не забирають у якості моделі, третій забирає передбачувано і потроху, четвертий убиває швидкість.
П’ятий важіль існує, але він не про налаштування: докупити пам’яті. Коли розрахунок показує перебір на всіх квантах, питання переходить із площини прапорців у площину заліза — яку карту чи міні-ПК брати під локальний ШІ, розібрано окремо.
Звірка розрахунку з чужими замірами: де формула сходиться і де ні
Своїх карт у редакції немає, тому перевірити формулу ми можемо лише зіставленням із чужими опублікованими цифрами. Ось усі точки звірки, які вдалося знайти, включно з розбіжностями.Що звіряємо Наш розрахунок Зовнішнє джерело Сходиться KV на токен, Llama 3.3 70B 327 680 Б (320 КіБ) 327 680 Б — англомовний довідник з вимог до VRAM так, точно KV за 8k, Llama 3.3 70B 2,50 ГіБ (2,68 ГБ) «about 2.6 GB» так KV за 128k, Llama 3.3 70B 40,00 ГіБ (42,9 ГБ) «roughly 41 GB», в іншого джерела «~42 GB (BF16)» так KV за 32k, модель 8B 4,00 ГіБ (4,29 ГБ) «approximately 4.5 GB» майже, розбіжність пояснювана Біт на параметр, Q4_K_M 4,86 43 ГБ / 141 ГБ за даними Ollama = 4,88 так Розміри GGUF Llama 3.1 8B 4,0 / 4,9 / 5,7 / 6,6 / 8,5 ГБ Ollama: 4.0 / 4.9 / 5.7 / 6.6 / 8.5 GB так, точно Розміри GGUF Llama 3.3 70B 34,3 / 42,5 / 49,9 / 57,9 / 75,0 ГБ Ollama: 34 / 43 / 50 / 58 / 75 GB так Ефект ковзного вікна, Gemma 3 за 32k кеш менший у 5,3 раза звіт авторів: «з 60% до менш ніж 15%», але для абляції 1:3, не для продакшен-схеми 5:1 порядок той самий, прямого порівняння немає Надбавка на контекст, 70B за 8k 2,50 ГіБ один із довідників: «+20 GB» ні, розбіжність увосьмеро Частка KV у загальній пам’яті у Qwen3 32B за 32k — 43% інший довідник: «~5-10% extra VRAM» ні
Перші вісім рядків сходяться, і це головний аргумент на користь того, що формула робоча. Розбіжність за рядком «4,5 ГБ проти 4,29» пояснюється просто: у джерела інша восьмимільярдна модель і в цифру, судячи з формулювання, включено службовий буфер.
Два останніх рядки — це помилки в топі видачі, а не в нашому розрахунку. Надбавка «+20 ГБ на 8k для 70B» завищена увосьмеро, і читач за нею купить зайву карту. Твердження «KV-кеш додає 5-10 відсотків» правильне лише для дуже короткого контексту: у Qwen3 32B за 32k кеш дає 8,00 ГіБ проти 18,4 ГіБ ваг, тобто 43 відсотки.
Чого ми не перевіряли і про що тому не пишемо: реальну швидкість генерації на конкретних картах, поведінку за кількох одночасних користувачів (там KV-кеш множиться на кількість сесій) і точну витрату на бекендах поза llama.cpp та Ollama.
Ризики розрахунку: рушій, репозиторій кванта і платформа
Розрахунок дає нижню межу, а не гарантію. Ось усе, від чого результат може поїхати, і що з цього застаріє першим.
Репозиторій кванта. Той самий «Q4_K_M» у різних складальників відрізняється. Приклад із нашої ж таблиці: Qwen3 14B у Q4_K_M — 9,0 ГБ в одного репозиторію і 9,3 ГБ за даними Ollama. Три відсотки різниці. У динамічних квантів, де точність добирається за шарами, розбіжність буває більшою. Завжди дивіться розмір того файлу, який завантажуєте.
Версія рушія. Прапорці й значення за замовчуванням змінюються. Значення, які ми наводимо, звірені з гілкою master 16 серпня 2026 року: KV-кеш за замовчуванням у f16, --swa-full за замовчуванням false, -ngl за замовчуванням auto. За півроку щось із цього може бути іншим, і насамперед варто перечитати документацію сервера, а не чужу статтю.
Бекенд. Усе в цьому матеріалі пораховано для llama.cpp і надбудов над ним (Ollama, LM Studio). У vLLM своя модель пам’яті з переднім виділенням під пул KV-кешу, там розрахунок інший. У бекендів без підтримки ковзного вікна Gemma 3 вимагатиме наївні 15,50 ГіБ за 32k, а не 2,91.
Платформа. На Apple Silicon пам’ять єдина, і «скільки лишилося відеопам’яті» — питання налаштувань, а не специфікації карти. Наші цифри за вагами і кешем там застосовні, а от колонка «карта» — ні.
Кількість одночасних сесій. Усі розрахунки зроблені на одного користувача. KV-кеш множиться на кількість паралельних запитів майже лінійно: чотири сесії по 32k у Qwen3 32B дають уже 32 ГіБ кешу.
Службові буфери. Наші 1,2 ГіБ — оцінка, зібрана з надрукованого рушієм буфера обчислень (507 МіБ у розібраному лозі) і невідображуваного контексту драйвера. У іншої моделі, іншого розміру батча та іншої версії CUDA це число буде іншим. Лишайте запас.
Що застаріє першим. Іменами моделей у таблиці — вони змінюються кожні кілька місяців. Реальними розмірами файлів — під час перевипуску квантів. Найдовше проживе формула: вона не залежить ні від імені моделі, ні від року, і потребує лише чотирьох чисел із config.json плюс розміру файлу.
Де перевіряти. Матеріалу англійською з теми на порядок більше, ніж українською, і він ділиться на два класи. Зведені довідники вимог до відеопам’яті (в англомовній видачі це llm vram requirements) дають готові таблиці по моделях; інтерактивні сторінки на кшталт vram llm calculator обчислюють за вашими параметрами. Користуватися ними варто саме як перехресною перевіркою, а не як відповіддю: майже всі вони беруть ваги за правилом «0,5 байта на параметр» і ковзне вікно не враховують — тобто відтворюють рівно ті дві помилки, заради яких написано цей матеріал. Розбіжність із нашою таблицею більш ніж на 15 відсотків майже завжди пояснюється однією з них.
Часті запитання
Скільки відеопам’яті потрібно для моделі на 7 мільярдів параметрів?
У кванті Q4_K_M така модель важить близько 4,6 ГіБ. З контекстом 8192 токени і службовими буферами виходить 6,8 ГіБ. На карті 8 ГБ це працює, але впритул: вільного місця лишиться близько гігабайта, і на Windows із відкритим браузером його може забракнути. На 12 ГБ конфігурація живе спокійно і дозволяє підняти контекст до 32k.
Чи влізе модель на 32 мільярди параметрів у відеокарту на 24 ГБ?
Залежить від контексту. Qwen3 32B у Q4_K_M займає 21,6 ГіБ за 8192 токенів і вміщується. За 32 768 токенів потрібно вже 27,6 ГіБ, і карта не справляється. Проміжний варіант — лишити 32k, але перевести KV-кеш у q8_0 прапорцями --cache-type-k q8_0 --cache-type-v q8_0: це дає 23,6 ГіБ, тобто працює, але без запасу на робочий стіл.
Чому модель завантажилася, а за півгодини діалогу вилетіла з помилкою пам’яті?
Бо ваги займають фіксований обсяг, а KV-кеш росте з кожним токеном діалогу. Якщо рушій не виділив увесь контекст одразу, пам’ять закінчується в міру наповнення вікна. Лікується одним із двох: задати контекст явно прапорцем -c менший, щоб падіння сталося на старті й передбачувано, або перевести кеш у q8_0 і отримати вдвічі більше місця під ту саму довжину.
Чи можна рахувати MoE-модель за активними параметрами, а не за всіма?
Ні. Роутер не знає заздалегідь, які експерти знадобляться на наступному токені, тому всі ваги зобов’язані бути в пам’яті. Qwen3 30B-A3B із трьома мільярдами активних параметрів важить стільки ж, скільки щільна тридцятимільярдна. Активні параметри заощаджують обчислення і дають швидкість маленької моделі, але не пам’ять. А от KV-кеш у MoE обчислюється за шарами і KV-головами й часто виявляється меншим, ніж у щільної моделі втричі меншого розміру.
Наскільки безпечно квантувати KV-кеш до q8_0?
Єдиний знайдений замір з опублікованою методикою дає різницю перплексії 0,0043 на Qwen 2.5 Coder 7B — величину, яка вкладається в довірчий інтервал самого вимірювання. Економія при цьому рівно дворазова. Це замір одного учасника спільноти, а не редакції, тому на своїх завданнях результат варто перевірити. Про q4_0 у тому самому обговоренні відгукуються помітно гірше: ділити кеш навпіл безпечно, на чотири — ні.
Чи заміняє оперативна пам’ять відеопам’яті, якщо модель не влазить?
Технічно так: прапорець -ngl у llama.cpp лишає частину шарів на процесорі, і запустити можна майже що завгодно. Практично ціна висока й нелінійна. Сторонні заміри дають падіння з 43,18 до 2,89 токена за секунду за повного перенесення на процесор і з 40,58 до 8,62 за часткового вивантаження. Для пакетних завдань це терпимо, для інтерактивного чату — ні.
Як перевірити, що мій розрахунок збігся з реальністю?
llama.cpp друкує розмір KV-кешу під час завантаження рядком на кшталт size = 6791.50 MiB (69632 cells, 47 layers, 1/1 seqs), K (f16): ..., V (f16): .... Порівняйте його зі своїм числом. Розбіжність удвічі-учетверо майже завжди означає, що у формулу підставлені голови уваги замість KV-голів. Розбіжність у рази в менший бік — що в моделі ковзне вікно уваги.
