Диагностика Mock-интервью
Главная · Железо и развёртывание

Видеокарты и VRAM: железо для нейросетей

Почему нейросети живут на GPU, а не на CPU, что такое видеопамять (VRAM) и как по простой арифметике заранее сказать, влезет ли модель в вашу карту — или придётся квантовать, делить на несколько GPU и офлоадить слои в RAM.

Интуиция: почему GPU, а не CPU

Нейросеть — это по сути гигантский поток умножений матриц: миллиарды одинаковых операций «умножь и сложи», не зависящих друг от друга. Тут важно не быть умным, а быть массовым. Центральный процессор (CPU, central processing unit) — это десяток очень мощных ядер, заточенных под сложную последовательную логику: ветвления, работу с операционной системой, «умные» одиночные задачи. Графический процессор (GPU, graphics processing unit) — наоборот, тысячи простых ядер, которые все вместе перемалывают однотипную арифметику.

Аналогия: нужно сложить десять тысяч пар чисел. Восемь профессоров (CPU) сделают это блестяще, но по очереди. Десять тысяч студентов (GPU), каждый со своей парой, закончат за один шаг. Матричное умножение — ровно такая задача «много одинаковых сложений сразу», поэтому на GPU обучение и инференс идут в десятки раз быстрее.

VRAM против RAM: где узкое место

У GPU своя память — видеопамять (VRAM, video RAM), распаянная прямо на плате рядом с чипом. Её главное свойство — не объём, а пропускная способность (bandwidth): современная VRAM отдаёт данные на скорости порядка терабайт в секунду (ТБ/с), тогда как обычная системная память (RAM) — десятки гигабайт в секунду (ГБ/с), в 10–30 раз медленнее. Разница критична, потому что на каждый шаг генерации через чип нужно прокачать все веса модели.

Отсюда железное правило: веса модели должны поместиться в VRAM целиком. Как только часть весов не влезла и лежит в RAM или на диске, каждый токен ждёт, пока их перекачают по медленной шине — скорость падает в разы. Именно поэтому инференс LLM называют memory-bandwidth-bound (упирающимся в пропускную способность памяти, а не в вычисления): арифметики на токен мало, а байтов гонять через чип — очень много.

Арифметика памяти: считаем честно

Сколько VRAM нужно под саму модель? Вес модели — это число параметров, умноженное на число байт, которыми кодируется один параметр. Байт на параметр задаёт точность (precision):

память весов = число параметров × байт/параметр

fp32 — 4 байта, fp16 / bf16 — 2 байта, int8 — 1 байт, int4 — 0.5 байта. Отсюда простое правило прикидки: модель 7B (7 миллиардов параметров) в fp16 ≈ 7 × 2 = 14 ГБ. В int4 та же модель — уже ~3.5 ГБ.

Но веса — не единственный жилец VRAM. К ним прибавляется:

Итоговая формула планирования: VRAM ≈ (веса + KV-cache × число запросов + активации) × 1.2. Для обучения всё намного тяжелее — там к весам добавляются градиенты и состояния оптимизатора, и с Adam получается ~16 байт на параметр (порядка ×8 к fp16-весам), поэтому полный файнтюн 7B требует ~112 ГБ (подробно — в теме про fine-tuning).

💡 Ключевая мысль Прежде чем спорить о «мощности» карты, посчитайте байты. Влезет ли модель в VRAM решает не число ядер, а арифметика: веса + KV-cache × запросы + оверхед. Если сумма больше объёма карты — никакие терафлопсы не помогут, всё упрётся в перекачку памяти.

Попробуйте поставить 70B в fp16 на RTX 4090 (24 ГБ) — стопка вылетает за рамку, красный вердикт. Переключите точность на int4: веса ужимаются вчетверо, и та же 70B внезапно почти помещается там, где fp16 не влезала. А теперь потяните контекст к 128k — синий блок весов стоит на месте, но оранжевый KV-cache растёт и снова выталкивает стопку за границу. Это и есть два главных рычага планирования: квантизация давит веса, длина контекста и число запросов раздувают кэш.

Как запускают огромные модели

Что делать, когда модель честно не влезает? Инструментов несколько, и на собеседовании ждут, что вы назовёте их по порядку цены:

Отдельно стоит помнить про разницу инференса и обучения. На инференсе в VRAM живут веса + кэш. На обучении к весам добавляются градиенты и состояния оптимизатора — с Adam это ~16 байт на параметр, в 8 раз больше fp16-весов. Поэтому обучать большие модели без PEFT/LoRA и кластера нереально.

Потребительские против дата-центровых карт

Игровые карты (RTX 4090, 24 ГБ) дёшевы и отлично подходят для локальных экспериментов и инференса моделей до ~30B в int4. Дата-центровые (A100, H100 — 80 ГБ) стоят в десятки раз дороже, но дают втрое больше VRAM, выше пропускную способность и NVLink для сборки в кластер — их берут под обучение и высоконагруженный сервинг. Выбор «своё железо или облако/API» — отдельная тема (локальные модели против SaaS).

⚠️ Подводный камень Считать только веса — классическая ошибка. «7B в fp16 = 14 ГБ, влезет в 16 ГБ» — и на длинном контексте с несколькими запросами карта внезапно переполняется: KV-cache у каждого запроса свой и на 32k может весить как сами веса. Планируя память, всегда прибавляйте кэш × число запросов и ~18% оверхеда.
🎤 На собеседовании
  • «Сколько VRAM нужно для 13B в 4 бита?» — веса ≈ 13 × 0.5 = 6.5 ГБ, плюс KV-cache и ~18% оверхеда: реально закладывают 8–10 ГБ, а на длинном контексте больше. Голая формула — веса; полный ответ — веса + кэш + оверхед.
  • «Почему инференс упирается в пропускную способность памяти?» — на каждый токен через чип гонятся все веса и весь кэш; арифметики мало, байтов много, поэтому скорость определяет bandwidth VRAM, а не терафлопсы.
  • «Зачем квантизация?» — она вдвое-вчетверо уменьшает и объём весов (модель влезает в карту), и трафик на токен (генерация ускоряется почти пропорционально), ценой малой потери качества.
  • «Модель не влезает — что делать?» — по порядку: квантизация, затем offload слоёв в RAM (ценой скорости), затем тензорный/пайплайн-параллелизм на несколько GPU.