Сколько видеопамяти нужно для нейросети: как посчитать под свою модель

Видеопамять - главный ограничитель при работе с нейросетями. Не скорость карты, не число ядер: если модель не помещается в память, она просто не запустится, и никакой запас по вычислительной мощности этого не изменит. Поэтому подбор GPU почти всегда начинается с вопроса, сколько гигабайт нужно.

Разберём, из чего складывается потребление памяти, как посчитать требования под конкретную модель, чем инференс отличается от обучения по аппетитам и что делать, когда модель в карту не влезает.

Из чего складывается потребление

сколько видеопамяти занимают модели разного размера при разной точности.
сколько видеопамяти занимают модели разного размера при разной точности.

Память под нейросеть тратится на три вещи.

Веса модели. Основная часть. Считается просто: число параметров умножить на количество байт, которым кодируется один параметр.

KV-кеш (для языковых моделей). Хранит уже обработанный контекст, чтобы не пересчитывать его на каждом новом токене. Растёт вместе с длиной контекста и числом одновременных запросов - именно он часто съедает тот запас, которого не хватило.

Активации и служебные буферы. Промежуточные вычисления. При инференсе это немного, при обучении - весьма существенно.

Практический ориентир: к весам добавляйте 15-25% на всё остальное, а при длинном контексте и нескольких параллельных запросах закладывайте больше.

Как считать веса

Формула ровно одна:

память на веса (ГБ) = число параметров (млрд) × байт на параметр

Байт на параметр зависит от точности, в которой вы запускаете модель:

  • fp16 или bf16 - 2 байта. Стандартная точность, максимальное качество.
  • int8 - 1 байт. Квантизация вдвое, потери качества обычно небольшие.
  • int4 - 0,5 байта. Агрессивная квантизация, качество заметно проседает на сложных задачах, но модель влезает почти куда угодно.

Отсюда таблица ориентиров по весам, без учёта кеша и активаций:

Модельfp16int8int4
7B14 ГБ7 ГБ3,5 ГБ
13B26 ГБ13 ГБ6,5 ГБ
30B60 ГБ30 ГБ15 ГБ
70B140 ГБ70 ГБ35 ГБ

Читается это так: модель на 13 миллиардов параметров в полной точности требует 26 ГБ только под веса, то есть в карту на 24 ГБ она не поместится, а в карту на 48 ГБ войдёт с запасом на контекст.

Инференс и обучение: разница в разы

Здесь чаще всего и ошибаются, считая по одной и той же таблице.

Инференс - модель только отвечает. Нужны веса плюс KV-кеш. Это тот расчёт, что выше.

Полное дообучение - в память дополнительно кладутся градиенты и состояния оптимизатора. На практике требования вырастают примерно в три-четыре раза относительно инференса в той же точности. Модель на 7B, которая отвечает на 14 ГБ, для полного дообучения потребует уже под 60-80 ГБ.

LoRA и другие лёгкие методы обучают не всю модель, а небольшие добавочные матрицы. Основные веса при этом можно держать квантованными. За счёт этого дообучение 7B помещается в одну карту, а не в стойку. Для большинства прикладных задач - адаптация под свой домен, стиль, формат ответов - этого достаточно.

Правило: если вы не тренируете модель с нуля, почти наверняка вам нужна LoRA, а не полное дообучение.

Генерация изображений

С картинками требования скромнее и считаются иначе - там объём определяется не столько числом параметров, сколько разрешением и размером батча.

  • Базовые модели Stable Diffusion работают от 8-12 ГБ.
  • Модели нового поколения и высокое разрешение комфортно себя чувствуют на 24 ГБ и выше.
  • Пакетная генерация - несколько картинок за проход - масштабирует потребление почти линейно.

Для видеогенерации и апскейла запас нужен ощутимо больший: там в память одновременно попадает несколько кадров.

Что делать, если модель не влезает

Вариантов четыре, в порядке от дешёвого к дорогому.

Квантовать. Перейти с fp16 на int8 или int4. Самый быстрый способ: модель уменьшается вдвое или вчетверо. Для задач вроде поиска по документам или классификации потери часто незаметны, для сложных рассуждений заметны.

Уменьшить контекст и параллельность. Если упирается KV-кеш, а не веса, сократите длину контекста или число одновременных запросов. Иногда этого достаточно.

Взять модель поменьше. Хорошо дообученная 7B на узкой задаче нередко работает лучше универсальной 70B и стоит в двадцать раз дешевле в эксплуатации.

Добавить карт. Модель распределяется между несколькими GPU. Работает, но добавляет накладные расходы на обмен между картами и усложняет запуск.

Оффлоад части весов в оперативную память формально тоже вариант, но скорость падает так сильно, что для production он не годится - разве что чтобы разово проверить гипотезу.

Что ещё нужно, кроме карты

Видеопамять определяет, запустится ли модель. На то, насколько комфортно с ней работать, влияет остальная конфигурация.

  • Оперативная память - при загрузке модель проходит через неё, поэтому RAM закладывают не меньше объёма VRAM, а лучше вдвое больше.
  • Диск - веса моделей весят десятки гигабайт, и читаются они при каждом запуске. Здесь NVMe экономит минуты на каждой загрузке.
  • Процессор - отвечает за подготовку данных и токенизацию, в инференсе редко становится узким местом.
  • Root-доступ - без него не поставить свою версию CUDA, PyTorch или vLLM, а версии в этой области меняются быстро. Что это такое, разобрано в статье что такое root-доступ.

Как соотносить память, ядра и диск между собой в общем случае, разобрано в статье как выбрать конфигурацию сервера.

Частые ошибки

Считают только веса. Модель на 26 ГБ в карту на 24 ГБ не влезет никогда, но и в 28 ГБ будет падать на длинном контексте: KV-кеш забыли.

Берут максимальную модель под простую задачу. Классификация или извлечение данных отлично решаются небольшой моделью, а 70B в этом случае просто дороже.

Планируют полное дообучение по таблице инференса. Разница в три-четыре раза обнаруживается уже после аренды.

Экономят на оперативной памяти. Карта мощная, а модель загружается минутами, потому что RAM не хватает и система уходит в swap.

Покупают железо до эксперимента. Требования выясняются на практике за несколько часов работы. Почасовая аренда для этого и существует, см. почасовая оплата.

Частые вопросы

Сколько видеопамяти нужно для запуска LLM? Умножьте число миллиардов параметров на 2 для fp16, на 1 для int8 и на 0,5 для int4, затем добавьте 15-25% на контекст и служебные буферы. Модель 13B в fp16 требует около 30 ГБ с запасом.

Хватит ли 24 ГБ для нейросетей? Для моделей до 7B в полной точности, до 13B в int8 и до 30B в int4 - да. Для генерации изображений этого достаточно почти во всех сценариях. Для 70B и для полного дообучения - нет.

Что даёт 48 ГБ по сравнению с 24 ГБ? Возможность держать модель вдвое крупнее в той же точности, длинный контекст и несколько параллельных запросов без квантизации. На практике это разница между экспериментом и рабочим сервисом.

Сколько памяти нужно для дообучения? Для полного дообучения примерно в три-четыре раза больше, чем для инференса той же модели. Для LoRA - немногим больше, чем для инференса, поэтому лёгкие методы и стали стандартом.

Влияет ли квантизация на качество? int8 обычно даёт минимальные потери, int4 заметно упрощает модель на сложных рассуждениях. На простых задачах разница часто в пределах погрешности, но проверять надо на своих данных.

Можно ли разделить модель между несколькими картами? Да, это стандартная практика для крупных моделей. Появляются накладные расходы на обмен данными между GPU, поэтому одна карта большего объёма обычно предпочтительнее двух маленьких.


Нужна карта под вашу модель? Серверы с RTX 4090 на 48 ГБ видеопамяти - от одной до четырёх карт, почасовая оплата от 149 руб или помесячно. Полный root-доступ: ставите свой стек CUDA, PyTorch и vLLM без ограничений.