Перейти к содержанию

Как рассчитать размер модели в памяти?

Языковая модель состоит из параметров (весов), каждый из которых занимает определённое количество байт в зависимости от формата хранения (precision).

Формула оценки объема в памяти (без учёта оптимизаций и буферов):

Объем модели в памяти (байт) = Кол-во параметров × Размер одного параметра

Размер одного параметра:

Формат Тип данных Размер 1 параметра
FP32 float32 4 байта
FP16 float16 (half) 2 байта
BF16 bfloat16 2 байта
INT8 int8 1 байт
INT4 int4 0.5 байта
INT3 int3 0.375 байта
INT2 int2 0.25 байта
GPTQ (4bit) INT4 + мета ~0.6 байта
GPTQ (3bit) INT3 + мета ~0.45 байта
GGUF зависит 0.3 – 0.6 байта

Таблица памяти по размеру модели:

Размер модели FP32 FP16/BF16 INT8 INT4 GPTQ 4bit GGUF (int4)
125M 0.5GB 0.25GB 125MB ~65MB ~75MB ~50MB
350M 1.4GB 0.7GB 350MB 175MB ~210MB ~150MB
1.3B 5.2GB 2.6GB 1.3GB 650MB ~780MB ~600MB
6.7B 26.8GB 13.4GB 6.7GB 3.3GB ~4.0GB ~3.0GB
13B 52GB 26GB 13GB 6.5GB ~7.8GB ~6.0GB
30B 120GB 60GB 30GB 15GB ~18GB ~14GB
65B 260GB 130GB 65GB 32GB ~36–40GB ~28–32GB

Важно: Это только веса модели, без учета активаций, буферов, оптимизаторов и прочего. Для inference нужен запас 10–30%, для обучения — гораздо больше.

Что ещё влияет на потребление GPU-памяти:

Фактор Как влияет
Batch Size Увеличивает буферы активаций и внимание
Sequence Length Больше токенов = больше self-attention операций
Number of Layers Больше слоёв = больше активаций и промежуточных тензоров
Model Parallelism Делит модель на несколько GPU, снижает требования на 1 GPU
Precision (FP16 vs INT8) Меньшая точность = меньше памяти
Use of KV Cache (e.g., Transformers) Хранение контекста требует памяти ∝ sequence_length × hidden_size
Framework (Transformers, vLLM, Exllama, llama.cpp) Некоторые фреймворки эффективнее по памяти
LoRA / PEFT / adapters Добавляет веса, но незначительно (+1–5%)
Gradient Checkpointing (в обучении) Снижает потребление памяти за счёт recomputation
Tokenizer / Embeddings Не сильно влияет, но в больших моделях может быть ощутимо

Расширенный пример — LLaMA 33B:

  • Параметров: ~33 миллиардов
  • В FP16: 33e9 × 2 байта = ~66 GB только на веса

  • Inference с batch size 1, seq len 128, no KV cache:

    • В FP16: GPU с 80–90GB VRAM может справиться
    • В 4bit: GPU с 16–24GB VRAM достаточно

Практические рекомендации:

Сценарий Рекомендованное решение
Инференс 7B модели RTX 3060+ (12GB), особенно с квантизацией
Инференс 13B модели A100 40GB или 4bit модель на RTX 3090
Инференс 30B–33B модели A100 40/80GB или 4bit модель + оптимизации
Инференс 65B модели 2×A100 80GB или GGUF 4bit модель
Обучение 7B модели с FP16 4×A100 40GB с DeepSpeed или FSDP

Вывод:

  • Расчет зависит от параметров модели и precision.
  • A100 40GB — очень мощная карта, но full precision 32B+ модели уже “на грани”.
  • С квантизацией (4bit) модели до 65B можно запускать даже на 24–40GB.