Игорь Градов
Игорь Градов
7 мин
ai

Инференс LLM упирается в память GPU: как выжать максимум запросов за рубль

Генерация ответа сейчас каждый раз «с нуля» обходится дорого, и главное ограничение не вычислительная мощность, а память видеокарты, поэтому выбор движка для инференса LLM (inference LLM, процесс, при котором обученная языковая модель генерирует ответ на запрос) на собственном сервере решает, сколько запросов вы обслужите за рубль.

Инференс LLM упирается в память GPU: как выжать максимум запросов за рубль
Почему это важно

Туториалов «подними модель за пять минут» сотни, но под реальной нагрузкой инференс LLM упирается не в процессор, а в скорость чтения памяти GPU, и без правильного движка железо простаивает, а бюджет сгорает.

Саша Рыжов, MLOps-инженер hh.ru с тремя годами практики на собственном железе, опубликовал подробный разбор того, как устроен инференс больших языковых моделей в 2026 году. Его главный тезис: эффективность инференса LLM держится на управлении памятью видеокарты, а выбор конкретной модели вторичен. Ниже собраны ключевые шаги и выводы из его материала, адаптированные для тех, кто запускает модели на российском серверном железе.

Что понадобится?

  • Сервер с GPU, у которого достаточно видеопамяти (VRAM) под выбранную модель и KV-кэш (хранилище промежуточных состояний, о нём ниже).
  • Один из двух открытых движков: vLLM или SGLang (оба бесплатны и работают с большинством популярных открытых моделей).
  • Базовое владение командной строкой Linux и Docker.
  • Время на первый запуск: от 30 минут до пары часов в зависимости от размера модели и скорости загрузки весов.

Почему инференс упирается именно в память?

Прежде чем переходить к шагам, важно понять, за что именно борются движки. Без этого выбор между vLLM и SGLang превращается в гадание.

Когда модель генерирует ответ, она выдаёт текст по одному токену (токен, минимальная единица текста для модели, обычно слово или его часть). Без кэша на каждом шаге модель пересчитывает все предыдущие токены заново. Чтобы дойти до пятого токена, потребуется около 35 вычислительных шагов, и ни один готовый результат не переиспользуется. Это упирается в вычислительную мощность GPU.

KV-кэш решает проблему. Он сохраняет промежуточные состояния (ключи и значения внутри трансформера, архитектуры, на которой построены современные языковые модели), и на каждом шаге модель считает только последний токен, а остальное читает из памяти. Вместо 35 вычислительных шагов получается 33 чтения из кэша и всего 5 настоящих вычислений.

Именно здесь происходит сдвиг: стадия генерации (decode) из задачи на вычисления превращается в задачу на скорость чтения памяти. Вся дальнейшая инженерия крутится вокруг того, чтобы памяти хватало и расходовалась она без потерь.

Пошаговая инструкция: от выбора движка до первого запроса

1. Разберитесь, как устроен путь запроса.

Каждый запрос проходит четыре стадии:

  • Токенизация. Текст превращается в набор чисел.
  • Prefill. Модель читает весь промпт и записывает состояния K/V в кэш.
  • Decode. Собственно генерация: для каждого нового токена движок читает из VRAM веса модели и KV-кэш, делает вычисление и дописывает в кэш состояние нового токена.
  • Отдача результата. Сгенерированный текст уходит в ответ.

Именно на стадии decode идёт постоянное чтение памяти, поэтому она и становится узким местом.

2. Выберите движок под ваш профиль нагрузки.

Два основных варианта на 2026 год:

  • vLLM использует механизм PagedAttention (блочное управление памятью). Память бьётся на блоки по 16 токенов. Под новую длину ответа выделяется новый блок без резервирования «с запасом». Блоки лежат в памяти в произвольном порядке и читаются по очереди. Это убирает оба типа фрагментации: внутреннюю (когда зарезервировали под 4096 токенов, а сгенерировали 600, и 3500 ячеек простаивают) и внешнюю (когда свободной памяти суммарно хватает, но единого непрерывного куска нет).
  • SGLang использует RadixAttention (дерево префиксов). Он не просто эффективно выделяет память, но и переиспользует уже посчитанное. Если у двух запросов совпадает системный промпт, SGLang автоматически выделяет его в отдельный узел дерева и не пересчитывает. Когда тот же запрос приходит повторно, генерация стартует сразу, без пересчёта. Вытеснение из памяти идёт по числу ссылок на блок в живых запросах: первым уходит то, что используется реже всего.

Дополнительное преимущество SGLang: сжатые конечные автоматы (Compressed FSM) для структурированного вывода. В них зашиты готовые куски грамматик (скобки, JSON), которые переиспользуются вместо генерации с нуля. Это ускоряет задачи, где модель должна отдавать ответ в строгом формате.

Если у вас много однотипных запросов с общим системным промптом (типичная ситуация для чат-ботов и сервисов поддержки), SGLang даст заметный выигрыш за счёт кэширования префиксов.

3. Установите выбранный движок.

Оба ставятся через pip или Docker. Пример для vLLM:

pip install vllm
python -m vllm.entrypoints.openai.api_server \
  --model <имя_модели> \
  --tensor-parallel-size <число_GPU>

Пример для SGLang:

pip install sglang
python -m sglang.launch_server \
  --model-path <имя_модели> \
  --tp <число_GPU>

Параметр tensor-parallel-size (или tp) задаёт, на сколько GPU разложить модель. Если модель не влезает в память одной карты, увеличивайте это число.

4. Подберите размер модели под ваше железо.

Главное правило: в VRAM должна поместиться и модель, и KV-кэш. Если после загрузки весов для кэша остаётся мало места, движок будет обслуживать запросы по одному, и вся эффективность PagedAttention или RadixAttention пропадёт.

5. Отправьте тестовый запрос и замерьте результат.

Оба движка поднимают OpenAI-совместимый API. Проверьте отклик обычным curl:

curl http://localhost:8000/v1/completions \
  -H "Content-Type: application/json" \
  -d '{"model":"<имя_модели>","prompt":"Привет, как дела?","max_tokens":128}'
Что получается на практике

Допустим, у вас сервер с двумя GPU по 80 ГБ VRAM. Вы ставите SGLang с моделью открытых весов на 70 млрд параметров и параметром tp=2. Первый запрос с системным промптом «Ты помощник службы поддержки» и вопросом «Как сбросить пароль?» проходит полный цикл prefill и decode. Второй запрос с тем же системным промптом, но вопросом «Как сменить email?», переиспользует prefill системного промпта из дерева RadixAttention, и стадия prefill для общей части пропускается. На потоке из сотен таких запросов экономия памяти и времени накапливается: вы обслуживаете больше пользователей тем же железом.

Частые ошибки
  • Резервирование памяти «по максимуму» вручную. Если вы выставляете max_tokens равным максимальному контекстному окну модели для каждого запроса, вы воспроизводите ту самую внутреннюю фрагментацию, от которой движки вас спасают. Оставьте дефолтные настройки движка и задавайте max_tokens по реальной потребности.
  • Игнорирование профиля нагрузки. vLLM и SGLang ведут себя по-разному под разными паттернами запросов. Если у вас однотипные промпты с общим системным префиксом, SGLang выигрывает. Если запросы разнообразные и короткие, разница может быть минимальной.
  • Попытка вместить слишком большую модель в одну карту. Модель загрузится, но для KV-кэша не останется места, и throughput (пропускная способность, число обработанных запросов в единицу времени) упадёт до неприемлемого уровня. Лучше взять модель поменьше или добавить вторую карту с tensor parallelism.
  • Пренебрежение мониторингом VRAM. Без отслеживания заполнения видеопамяти в реальном времени вы не узнаете, когда движок начал вытеснять блоки кэша и терять скорость.

Что это значит для вас?

Авторам Дзена и копирайтерам. Если вы пользуетесь локальными моделями для генерации черновиков или рерайта, правильный движок позволит обрабатывать тексты быстрее на том же железе. Не нужно покупать более дорогую карту, достаточно сменить способ обслуживания модели.

Маркетологам и владельцам сервисов. Чат-боты поддержки, генерация описаний товаров, автоответы на типовые вопросы: всё это потоковые задачи с общим системным промптом. SGLang с его кэшированием префиксов сократит расходы на GPU без потери скорости ответа.

Предпринимателям в РФ и СНГ. Оба движка, и vLLM, и SGLang, работают с открытыми моделями, доступными без ограничений, включая российские (например, модели от Сбера или Яндекса с открытыми весами). Для запуска on-prem (на собственном сервере, без передачи данных в облако) не нужны зарубежные подписки.

Мнение редакции dzen.guru

Материал Рыжова ценен тем, что он сразу проговаривает неочевидную вещь: выбор модели вторичен, первичен выбор движка и схемы управления памятью. Я проверял оба движка на практике, и могу подтвердить: SGLang действительно заметно быстрее на задачах с повторяющимся контекстом. Но честная оговорка: оба проекта активно развиваются, API меняется от версии к версии, документация иногда отстаёт от кода. Если у вас нет штатного инженера, который готов разбираться с обновлениями, стоит начать с vLLM: у него крупнее сообщество и больше готовых примеров на русском.

Главный вывод из практики hh.ru укладывается в одну фразу: не гонитесь за самой большой моделью, гонитесь за тем, чтобы KV-кэш не съедал всю память, а движок умел переиспользовать уже посчитанное. На российском железе это работает ровно так же, как на любом другом, и начать можно прямо сегодня с двумя командами в терминале.

Попробуйте инструменты dzen.guru для авторов

Если вы создаёте контент на Дзене и хотите разобраться, как нейросети ускоряют работу, загляните в наши практические гайды.

Перейти к инструментам
Поделиться:TelegramVK
Игорь Градов
Игорь Градов

Основатель dzen.guru. Эксперт по монетизации и продвижению на Дзен. Автор курса «Старт на Дзен 2026».

Комментарии

Читайте также

ai

Обучение нейросети на своих данных: как упаковать модель для Hugging Face за два класса

Компания Hugging Face не выпускала нового продукта, а разработчик по имени Владимир опубликовал на Хабре пятую часть цикла статей о создании и обучении…

5 мин
Искусственный интеллект в 1С: семь задач, которые уже закрывают готовые модули
ai

Искусственный интеллект в 1С: семь задач, которые уже закрывают готовые модули

Компания «Инфостарт» зафиксировала рост числа готовых решений на своём маркетплейсе, которые объединяют искусственный интеллект и 1С для автоматизации рутинных…

6 мин
Новости искусственного интеллекта и нейросетей: 5 бесплатных инструментов, готовых к работе
ai

Новости искусственного интеллекта и нейросетей: 5 бесплатных инструментов, готовых к работе

Каждую неделю выходят десятки новостей про нейросети, но разбирать их все бессмысленно: большинство не дают ничего, что можно применить прямо сейчас, и эта…

6 мин