Сколько VRAM нужно LLM: веса, контекст и KV-кеш

Веса модели — только часть расхода видеопамяти. Работающему движку нужны буферы, а распространённым transformer-моделям — KV-кеш внимания. Длинный контекст и параллельные запросы могут привести к ошибке памяти уже после успешной загрузки.

Нижняя граница памяти под веса

Для грубой оценки умножьте число параметров на байты на параметр: 2 для FP16/BF16, 1 для 8-битных и 0,5 для 4-битных весов. Формула не учитывает метаданные квантования, тензоры повышенной точности, буферы и KV-кеш.

Условный размер Веса FP16/BF16 Веса 8 бит Веса 4 бита
7B 14 ГБ 7 ГБ 3,5 ГБ
8B 16 ГБ 8 ГБ 4 ГБ
14B 28 ГБ 14 ГБ 7 ГБ
32B 64 ГБ 32 ГБ 16 ГБ
70B 140 ГБ 70 ГБ 35 ГБ

Это арифметика в десятичных ГБ, а не таблица гарантированной вместимости. Утилиты могут показывать GiB: 1 GiB = 1 073 741 824 байта. Число параметров в названии округляется, поэтому проверяйте конкретный checkpoint. Для mixture-of-experts число активных параметров на токен не равно всем весам, которые нужно хранить.

Модель 70B в BF16 не помещается в одну видеокарту на 80 ГБ: одни веса требуют примерно 140 ГБ. Аналогично, расчёт «32B × 4 бита = 16 ГБ» не означает, что модель безопасно запускать на карте с 16 ГБ.

Добавьте память под контекст

Для обычного transformer с полным KV-кешем можно использовать упрощённую оценку:

KV-байты ≈ 2 × число слоёв × число KV-голов × размерность головы
           × кешируемые токены × байты на элемент кеша

Для независимых параллельных последовательностей без совместного кеша расход суммируется. В формулу входят KV-головы, а не автоматически все query-головы внимания. GQA, скользящее окно, гибридная архитектура и сжатие кеша меняют расчёт.

Условный пример: 32 слоя, 8 KV-голов, размерность 128, 4 096 токенов и 2 байта дают 512 MiB на последовательность. При 16 384 токенах — 2 GiB. Это пример арифметики для заданной архитектуры, а не замер любой модели 7B.

Начальная конфигурация

  • Для небольшой квантованной модели задайте короткий контекст и одну последовательность. Проверьте полное размещение на GPU.
  • Если веса почти заполнили VRAM, сначала уменьшите модель или точность, а потом увеличивайте контекст.
  • Если модель загрузилась, но длинные запросы завершаются OOM, уменьшите контекст или параллелизм и повторите проверку.
  • Для нескольких GPU проверьте, умеет ли движок распределять именно эту модель и формат. Две карты не автоматически превращаются в одну с суммарной VRAM.

В каталоге GPU можно посмотреть доступные конфигурации. Сравнение конкретных видеокарт под нагрузки — отдельная тема; задача этой страницы — исключить заведомо невозможный вариант.

Проверьте реальное потребление

На сервере:

nvidia-smi --query-gpu=name,memory.total,memory.used,memory.free --format=csv
ollama ps

Вторая команда относится к Ollama. Проверяйте сразу после настоящего запроса, пока модель загружена. Файл весов на диске, пустой API-сервер и загруженная модель — разные состояния. Для vLLM прочитайте также сообщения о выделении кеша при запуске и ошибки во время запросов.

Повторите измерение с самым длинным нужным входом. Увеличивайте параллелизм отдельно. Сохраняйте неизменными квантование, контекст и версию модели при сравнении GPU.

Источники: контекст Ollama, память vLLM, KV-кеш Transformers.

Все инструкции по запуску своей LLM.

Готовы запустить?

Запустить GPU-сервер