Сколько 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.
Готовы запустить?
Запустить GPU-сервер