Технологии

Сколько нужно VRAM для локальной LLM: формула и таблица

Формула из двух слагаемых — вес модели и KV-кэш под контекст, — по которой вы посчитаете требования любой модели сами, вместо поиска её в чужой таблице.

«Сколько видеопамяти нужно для модели на 7 миллиардов параметров?» — вопрос, на который в интернете лежат сорок разных таблиц с разными числами. Все они правильные и все бесполезные, потому что ответ зависит от квантизации и длины контекста, а в таблицах эти параметры зафиксированы чужим выбором.

Полезнее не искать свою строку в чужой таблице, а уметь посчитать. Расчёт занимает минуту и состоит из двух слагаемых.

#Короткий ответ

Нужная память = вес файла модели + KV-кэш под ваш контекст + примерно 1 ГБ накладных расходов.

Вес файла берётся из карточки модели на странице загрузки — его не надо считать, он там написан. KV-кэш считается по формуле ниже и на длинном контексте способен превысить вес самой модели. Накладные расходы — это контекст CUDA, промежуточные буферы вычислений и то, что видеопамять уже занята рабочим столом и браузером.

Для практики: модель класса 7–8B в квантизации Q4_K_M с контекстом 8192 требует примерно 6–6,5 ГБ. Та же модель с контекстом 32768 — уже около 9 ГБ. Разница целиком в KV-кэше.

#Как это устроено

#Слагаемое первое: веса

Файл модели — это её параметры, записанные с определённой точностью. Число параметров умножается на число байт на параметр:

Вес в ГБ ≈ (параметры в миллиардах) × (бит на вес) / 8

В неквантованном виде (FP16) на вес уходит 2 байта, то есть 16 бит: модель 8B весит около 16 ГБ. В квантизации Q8 — примерно 8,5 ГБ, в Q4_K_M — около 4,9 ГБ.

Коэффициенты не идеально круглые, потому что квантизация неоднородна: часть тензоров хранится точнее остальных, а токенизатор и эмбеддинги добавляют свой вес. Практические коэффициенты «гигабайт на миллиард параметров»: Q4_K_M — около 0,6, Q5_K_M — около 0,7, Q6_K — около 0,85, Q8_0 — около 1,1, FP16 — около 2,0. Что именно теряется на каждом уровне, разбирает материал о квантизации LLM и разнице между Q4, Q5 и Q8.

#Слагаемое второе: KV-кэш

Чтобы не пересчитывать весь диалог на каждом новом токене, модель хранит промежуточные векторы внимания — ключи и значения. Это и есть KV-кэш, и он растёт линейно с длиной контекста:

KV-кэш = 2 × число_слоёв × число_KV-голов × размер_головы × длина_контекста × байт_на_элемент

Двойка — потому что хранятся и ключи, и значения. Байт на элемент — 2 при обычном FP16-кэше, 1 при квантизации кэша в 8 бит.

Все параметры модели, кроме длины контекста, лежат в её конфигурации. Для Llama 3.1 8B: 32 слоя, 8 KV-голов, размер головы 128. Считаем на один токен:

2 × 32 × 8 × 128 × 2 байта = 131 072 байта = 128 КиБ на токен

Значит, контекст 8192 токена стоит ровно 1 ГиБ, а контекст 32768 — 4 ГиБ. Для модели, которая сама весит 4,9 ГБ, это очень существенная добавка.

Ключевая деталь, которую часто упускают: считаются KV-головы, а не головы внимания. В современных моделях с групповым вниманием (GQA) KV-голов в 4–8 раз меньше, чем голов внимания, и именно поэтому Qwen2.5 7B с четырьмя KV-головами тратит на контекст вдвое меньше, чем Llama 3.1 8B с восемью. Механику подробно разбирает статья о том, почему большой контекст съедает видеопамять.

#Слагаемое третье: накладные расходы

Сюда входит инициализация вычислительного контекста драйвера, буферы под батч обработки промпта и то, что операционная система уже занимает часть видеопамяти. На Windows с подключённым монитором стоит закладывать 1–1,5 ГБ, на Linux без графической оболочки — 0,5 ГБ.

#Таблица: двенадцать связок

Ниже — готовые расчёты по формуле выше. Столбец «итого» включает накладный гигабайт. Веса файлов — порядок величины для популярных сборок на момент написания; конкретный файл может отличаться на 10%, точное число всегда указано на странице загрузки модели.

Модель и квант Веса Контекст KV-кэш Итого
Llama 3.2 3B Q4_K_M 2,0 ГБ 4096 0,44 ГБ ~3,4 ГБ
Llama 3.2 3B Q8_0 3,4 ГБ 8192 0,88 ГБ ~5,3 ГБ
Qwen2.5 7B Q4_K_M 4,7 ГБ 4096 0,22 ГБ ~5,9 ГБ
Qwen2.5 7B Q4_K_M 4,7 ГБ 32768 1,75 ГБ ~7,5 ГБ
Llama 3.1 8B Q4_K_M 4,9 ГБ 8192 1,0 ГБ ~6,9 ГБ
Llama 3.1 8B Q4_K_M 4,9 ГБ 32768 4,0 ГБ ~9,9 ГБ
Llama 3.1 8B Q8_0 8,5 ГБ 8192 1,0 ГБ ~10,5 ГБ
Qwen2.5 14B Q4_K_M 9,0 ГБ 8192 1,5 ГБ ~11,5 ГБ
Qwen2.5 14B Q4_K_M 9,0 ГБ 32768 6,0 ГБ ~16 ГБ
Qwen2.5 32B Q4_K_M 20 ГБ 8192 2,0 ГБ ~23 ГБ
Qwen2.5 32B Q4_K_M 20 ГБ 32768 8,0 ГБ ~29 ГБ
Llama 3.3 70B Q4_K_M 42,5 ГБ 8192 2,5 ГБ ~46 ГБ

Что в этой таблице смотреть. Не строку про свою модель — а разницу между парами строк одной модели. Llama 3.1 8B при переходе с контекста 8k на 32k прибавляет 3 гигабайта: это ровно та величина, из-за которой модель, спокойно работавшая утром, вечером падает с ошибкой памяти на длинном диалоге. И это же объясняет, почему карта на 8 ГБ формально «тянет 8B», но на практике вынуждает держать короткий контекст.

Второе наблюдение: строка с Q8_0 показывает, что удвоение точности весов стоит дороже, чем учетверение контекста. Если выбирать, куда потратить свободные гигабайты, контекст обычно приносит больше пользы, чем переход с Q4_K_M на Q8.

#Что из этого следует на практике

Считайте до покупки, а не после. Если целитесь в модель класса 14B с контекстом 16k, вам нужно около 13 ГБ — карта на 12 ГБ не подойдёт, придётся либо жать контекст, либо выгружать слои. Расклад по конкретным моделям карт — в разборе того, какую видеокарту взять под локальные LLM.

Не занимайте видеопамять под завязку. Оставляйте 10–15% свободными. Заполненная на 99% память приводит не к ошибке, а к худшему: драйвер начинает вытеснять данные в оперативную, и скорость падает в разы без единого сообщения об ошибке.

Контекст — первый рычаг, а не последний. Когда не хватает памяти, инстинкт подсказывает взять модель меньше. Сократить контекст вдвое почти всегда дешевле по качеству. Полная лестница решений — в материале о том, что делать, если модель не влезает в память.

Оперативная память — не замена видеопамяти, но и не ноль. Слои, не поместившиеся в VRAM, можно считать на процессоре. Первые выгруженные слои стоят удивительно мало, дальше скорость обваливается — нелинейность разбирает статья о выгрузке слоёв в оперативную память.

#Где интуиция подводит

«У модели контекст 128k, значит она поместится с контекстом 128k». Заявленная длина контекста — это то, что модель архитектурно способна обработать, а не то, что влезет в вашу карту. Для Llama 3.1 8B контекст 128k стоил бы 16 ГиБ одного только KV-кэша — втрое больше самих весов. Заявленный контекст и доступный вам контекст — разные числа.

«Ошибка нехватки памяти означает, что модель слишком большая». Чаще она означает, что слишком большой контекст или что видеопамять занята чем-то ещё. Прежде чем менять модель, посмотрите, что вообще занимает карту: nvidia-smi покажет список процессов и их потребление.

«Квантизация KV-кэша испортит ответы». Восьмибитный кэш даёт почти незаметную разницу в качестве при вдвое меньшем расходе памяти. Четырёхбитный кэш уже заметен, особенно на длинном контексте. Это самый дешёвый гигабайт из всех доступных.

«Видеопамять — единственное узкое место». Объём определяет, что запустится. Скорость определяется пропускной способностью памяти карты, и это независимый параметр: карта на 24 ГБ с медленной памятью может генерировать медленнее, чем карта на 12 ГБ с быстрой. Что такое видеопамять и чем её объём отличается от её скорости, разбирает справка о VRAM.

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

#Сколько VRAM нужно для модели 7B?

Для Q4_K_M с контекстом 4096 — около 6 ГБ с учётом накладных расходов. С контекстом 32768 — около 7,5–10 ГБ в зависимости от архитектуры модели. Карта на 8 ГБ справится при умеренном контексте, на 12 ГБ — с запасом.

#Можно ли компенсировать нехватку VRAM обычной оперативной памятью?

Частично. Движки вроде llama.cpp умеют держать часть слоёв в оперативной памяти и считать их на процессоре. Скорость при этом падает, причём нелинейно: выгрузка 10% слоёв почти незаметна, выгрузка половины замедляет генерацию в несколько раз.

#Почему у двух моделей одного размера разные требования к памяти под контекст?

Из-за числа KV-голов и размера головы в архитектуре. Qwen2.5 7B с четырьмя KV-головами тратит на токен контекста примерно вдвое меньше, чем Llama 3.1 8B с восемью. Разница в весах при этом минимальна, а на контексте 32k она превращается в пару гигабайт.

#Считать в гигабайтах или гибибайтах?

Драйверы и утилиты обычно показывают гибибайты (1024³ байта), а страницы моделей — гигабайты (1000³). Разница около 7% и на границе вместимости может решать. Если считаете впритык — считайте в гибибайтах и добавляйте запас.

#Влияет ли размер запроса на расход памяти?

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

Хотите ИИ, который помнит вас?

Persona держит контекст между чатами и работает на вашем железе — если развернуть её у себя и подключить локальную модель.

Создать аккаунт