Локальные модели на одной видеокарте: что реально запускается на 24–48 ГБ
Как прикинуть, какая модель влезет в видеопамять, что даёт квантизация, почему длинный контекст съедает память и как самому замерить скорость.
Запустить языковую модель на своём сервере сегодня можно за вечер. Сложнее понять заранее, какая модель влезет в вашу видеокарту, сколько текста она сможет держать в голове и будет ли это работать с приемлемой скоростью. В этой заметке — не таблица бенчмарков, которая устареет через месяц, а способ считать самому.
Главная формула: параметры умножить на байты
Модель — это набор чисел, весов. Их количество и есть «размер модели», который указывают в названии: 7B, 14B, 32B, 70B и так далее, где B — миллиарды параметров. Сколько памяти займут веса, зависит от того, сколько байт отводится на каждое число:
- 16 бит (FP16/BF16) — 2 байта на параметр. Это «полная» точность, в которой модели обычно публикуют.
- 8 бит — около 1 байта на параметр.
- 4 бита — около половины байта на параметр, на практике чуть больше из-за служебных данных.
Отсюда грубая прикидка для весов:
- модель на 7–8 млрд параметров: около 16 ГБ в полной точности, около 4–5 ГБ в 4 битах;
- модель на 30–35 млрд: около 65–70 ГБ в полной точности, порядка 18–20 ГБ в 4 битах;
- модель на 70 млрд: около 140 ГБ в полной точности, порядка 40 ГБ в 4 битах.
Видно, что без квантизации на одной карте с 24–48 ГБ живут только небольшие модели. С квантизацией картина другая: на 24 ГБ помещается модель класса 30B, на 48 ГБ — класса 70B. Но это только веса, а память нужна ещё кое на что.
Контекст тоже весит
Когда модель обрабатывает текст, она хранит промежуточные данные для каждого токена — так называемый KV-кэш. Его размер растёт линейно с длиной контекста и умножается на число одновременных запросов.
На практике это означает:
- модель, которая формально поддерживает очень длинный контекст, на вашей карте может работать только с его частью;
- если веса заняли почти всю память, на контекст остаётся пара тысяч токенов, и толку от такой конфигурации мало;
- при нескольких пользователях одновременно память под кэш нужна на каждого.
Рабочее правило: после загрузки весов должно оставаться хотя бы 20–30% памяти на контекст и служебные нужды. Если вы впритык затолкали модель 70B в 48 ГБ, лучше взять модель поменьше и получить нормальный контекст. Многие серверы для запуска моделей умеют квантизировать и сам кэш, что заметно экономит память ценой небольшой потери точности, — это стоит попробовать.
Квантизация: что теряется
Квантизация — это хранение весов с меньшей точностью. Модель становится меньше и обычно быстрее, но немного глупее. Насколько — зависит от метода и степени сжатия.
Общая картина, которая держится уже несколько поколений моделей:
- 8 бит — потери качества обычно на уровне шума, отличить от оригинала трудно.
- 5–6 бит — потери небольшие, для большинства рабочих задач незаметны.
- 4 бита — разумный компромисс, самый популярный вариант. Потери уже можно поймать на сложных задачах: длинные рассуждения, математика, точное следование формату.
- 3 бита и ниже — модель заметно деградирует. Иногда это всё равно лучше, чем меньшая модель в высокой точности, но проверять надо обязательно.
Полезное наблюдение: большая модель в 4 битах часто работает лучше, чем модель вдвое меньше в 8 битах, при сопоставимом объёме памяти. Но это не закон, а тенденция, и на вашей задаче может оказаться иначе.
Форматы квантизации различаются в зависимости от того, чем вы запускаете модель. Одни лучше подходят для запуска на смеси видеокарты и процессора, другие — для чистой работы на GPU с высокой пропускной способностью. Выбирайте формат под сервер, а не наоборот.
Скорость: от чего зависит
Генерация текста — это в основном чтение весов из памяти. Для каждого нового токена модели нужно пройти по всем своим весам. Поэтому скорость генерации для одного пользователя упирается в пропускную способность видеопамяти, а не в вычислительную мощность.
Отсюда несколько следствий:
- чем меньше модель в байтах, тем быстрее она генерирует текст — квантизация ускоряет;
- две видеокарты с одинаковым объёмом памяти, но разной пропускной способностью дадут разную скорость;
- если модель не влезла целиком и часть слоёв ушла в оперативную память компьютера, скорость падает в разы — оперативная память намного медленнее видеопамяти.
Есть два разных показателя, и их полезно мерить отдельно:
- Время до первого токена. Сколько ждать, пока модель «прочитает» ваш запрос и начнёт отвечать. Растёт с длиной входного текста. Для RAG с большими кусками документов это может быть заметнее, чем сама генерация.
- Скорость генерации. Сколько токенов в секунду модель выдаёт после начала ответа.
Порядки для одной современной видеокарты и одного пользователя: модели среднего размера в 4 битах генерируют текст быстрее, чем человек его читает, — это десятки токенов в секунду. Крупные модели на пределе памяти — заметно медленнее, ближе к скорости чтения или ниже. При нескольких параллельных пользователях суммарная пропускная способность может расти, но скорость для каждого снижается.
Модели «смесь экспертов»
Отдельный класс — модели, где для каждого токена работает только часть весов. У них два числа: общее число параметров и число активных. Память нужна под все веса, а скорость определяется активными.
Для одной видеокарты это двоякая история. Если модель целиком влезает в видеопамять, она будет быстрой. Если не влезает, такие модели лучше остальных переносят частичную выгрузку весов в оперативную память, потому что на каждом шаге читается не всё. Это делает их интересным вариантом для сервера с одной картой и большим объёмом обычной памяти.
Как проверить самому за час
Вместо поиска чужих бенчмарков сделайте свой замер. План такой:
- Выберите сервер для запуска. Для экспериментов удобны простые инструменты, которые ставятся одной командой и скачивают модели сами. Для продуктивной работы с несколькими пользователями стоит посмотреть на серверы, ориентированные на высокую пропускную способность.
- Возьмите 2–3 кандидата разного размера и квантизации, которые по формуле выше должны поместиться с запасом.
- Подготовьте реальные запросы из вашей задачи: короткий вопрос, запрос с документом на несколько страниц, запрос с максимальным контекстом, который вам нужен.
- Замерьте время до первого токена, скорость генерации и потребление видеопамяти. Большинство серверов выводят эти цифры в лог, видеопамять показывает стандартная утилита драйвера.
- Нагрузите параллельно. Запустите несколько одновременных запросов простым скриптом и посмотрите, как меняется скорость для каждого.
- Оцените качество на своём тестовом наборе — тех же 30–100 примерах, которые вы используете для сравнения с облачными моделями.
После такого часа у вас будут цифры именно для вашей карты, ваших запросов и вашей модели. Это ценнее любой сводной таблицы из интернета.
Типичные ошибки
- Смотреть только на веса. Модель «влезла», а контекст на 2000 токенов — это не рабочая конфигурация.
- Мерить на коротком «привет». Скорость на коротком запросе ничего не говорит о работе с документами.
- Не проверять качество после квантизации. Особенно если задача требует строгого формата ответа — JSON, таблицы, конкретные поля.
- Забывать про охлаждение и питание. Карта под постоянной нагрузкой греется, и в плохо продуваемом корпусе начинает сбрасывать частоты.
- Строить продуктив на экспериментальном инструменте. То, что удобно для пробы на рабочей станции, не всегда держит десяток одновременных пользователей.
Что в итоге
Одна видеокарта на 24 ГБ — это уверенная работа с моделями малого и среднего класса в квантизации, с нормальным контекстом. Карта на 48 ГБ открывает модели крупного класса в 4 битах или средние модели с длинным контекстом и несколькими пользователями. Для внутренних задач вроде классификации, извлечения данных, черновиков и поиска по документам этого часто хватает. Для сложных рассуждений разница с топовыми облачными моделями обычно ещё заметна, и это стоит честно учитывать при выборе.