localaiforum
Войти
Руководство › Железо

Математика VRAM

Каждый вопрос «запустится ли это на моей карте» — арифметика, а не фольклор. Общий VRAM — это веса, плюс KV-кэш, плюс фиксированный кусок активаций и накладных расходов движка. Если вы умеете умножать параметры на биты, вы можете рассчитать машину, ничего на неё не тратя. Эта страница даёт формулу, таблицы и разбор для 16 GB, который можно скопировать для любой карты.

Формула

итоговый VRAM = веса + KV-кэш + накладные расходы
веса (GB)     = параметры (B) × бит на вес ÷ 8
KV-кэш        = байт на токен × длина контекста   (см. [KV-кэш](/guide/kv-cache))
накладные     ≈ 1–2 GB (активации, контекст драйвера, буферы, фрагментация)

Эффективные биты на вес для распространённых квантов GGUF: Q4_K_M ≈ 4.8, Q5_K_M ≈ 5.7, Q6_K ≈ 6.6, Q8_0 ≈ 8.5. Умножьте параметры на это, поделите на 8 — и вы в пределах нескольких процентов от размера файла на диске.

Правила, которые стоит запомнить, в GB на миллиард параметров:

  • Q4_K_M ≈ 0.6 GB — повседневная рабочая лошадка
  • Q5_K_M ≈ 0.7 GB
  • Q6_K ≈ 0.8 GB — почти без потерь на глаз
  • Q8_0 ≈ 1.1 GB — прозрачно, примерно вдвое дороже Q4
  • fp16/bf16 = 2.0 GB — территория обучения и серьёзного дообучения

Разборы

Размер KV-кэша зависит от архитектуры. Современные GQA-модели дают примерно 128–256 KB на токен при fp16 KV для классов 8B–32B и около 320 KB для класса 70B. Точная формула — на странице KV-кэш; здесь мы просто прибавляем. Накладные расходы заложены в 1.5 GB на строку.

Q4_K_M (~4.8 бита на вес):

Модель Веса KV @ 8k KV @ 32k Итого @ 8k Итого @ 32k
8B 4.8 GB 1.0 GB 4.2 GB 7.3 GB 10.5 GB
14B 8.4 GB 1.6 GB 6.4 GB 11.5 GB 16.3 GB
32B 19.2 GB 2.1 GB 8.4 GB 22.8 GB 29.1 GB
70B 42.0 GB 2.6 GB 10.5 GB 46.1 GB 54.0 GB

Q6_K (~6.6 бита на вес):

Модель Веса KV @ 8k KV @ 32k Итого @ 8k Итого @ 32k
8B 6.6 GB 1.0 GB 4.2 GB 9.1 GB 12.3 GB
14B 11.6 GB 1.6 GB 6.4 GB 14.7 GB 19.5 GB
32B 26.4 GB 2.1 GB 8.4 GB 30.0 GB 36.3 GB
70B 57.8 GB 2.6 GB 10.5 GB 61.9 GB 69.8 GB

Два паттерна стоит усвоить. Q6_K стоит ~35–40% дороже Q4_K_M — часто это разница между одним уровнем GPU и следующим. И KV при 32k контекста — не ошибка округления: на маленьких моделях он соперничает с самими весами. Старые MHA-дизайны (эпоха Llama-2) таскали KV-кэши в 4–8 раз больше — вот почему 32k контекста раньше требовали экзотического железа, а GQA-модели — нет.

OOM при загрузке против OOM посреди генерации

  • При загрузке: одни веса превышают свободный VRAM. Движок отказывается стартовать или выгружает слои на CPU и ползёт. Честно, сразу, легко диагностируется.
  • Посреди генерации: веса влезли, но KV-кэш растёт токен за токеном. Свежая сессия работает прекрасно; сорок реплик спустя, после выгрузки RAG или вставленного файла, кэш съедает ваш запас, и процесс умирает посреди ответа. Это коварный случай — всегда рассчитывайте под контекст, которого реально достигнете, а не под первый промпт.

Посмотрите, как это происходит, вживую:

watch -n1 nvidia-smi --query-gpu=memory.used,memory.total --format=csv

Рабочий лист: разбор для 16 GB

  1. Доступный бюджет: 16 GB × 0.85 ≈ 13.6 GB. Десктоп, браузер и драйвер уже резервируют 0.5–1 GB; запас 10–20% — правило, а не роскошь.
  2. Мечта: 32B Q4_K_M — 19.2 GB одних весов. Мертворождено.
  3. Реалистично: 14B Q4_K_M при 8k контекста: 8.4 + 1.6 + 1.5 = 11.5 GB. Влезает с ~15% запаса. В путь.
  4. Теперь хочется 32k контекста: 8.4 + 6.4 + 1.5 = 16.3 GB. За бюджетом.
  5. Три фикса — выберите один или скомбинируйте:
    • Квантуйте KV-кэш в q8_0: 6.4 → 3.2 GB, итого 13.1 GB. Влезает.
    • Опустите веса до Q4_K_S или IQ4_XS — ещё ~0.5–1 GB экономии.
    • Перейдите на 8B Q6_K: 6.6 + 4.2 + 1.5 = 12.3 GB, просторно.

Те же пять шагов работают для карты на 8 GB, 24 GB или бокса с двумя GPU на 48 GB. Бюджет, мечта, вычитание, корректировка.

Всегда оставляйте запас

Движки выделяют скретч-буферы на каждый слот батча, фрагментация накапливается за время долгоживущего сервера, а параллелизм умножает KV на каждый активный запрос. Конфиг, который «только-только влезает» в одноразовом бенче, упадёт с OOM в продакшене. 10–20% свободных — налог за стабильность. Что реально влезает на каждом уровне карт — см. классы GPU; почему биты кванта такие, какие есть — см. квантизация.

Связанные разделы: квантизация · KV-кэш · классы GPU