Логотип Тераферма Тераферма Регистрация

26 октября 2026 г. · Анатолий Крылов, редактор Тераферма

Пакетная обработка LLM: как прогнать миллион запросов дешевле всего

Конвейер с сотнями карточек документов, идущих в сервер с видеокартой, и аккуратные стопки на выходе — пакетная обработка LLM

Пакетная обработка LLM остаётся самым дешёвым способом прогнать через модель большой массив данных. Миллион запросов на классификацию (500 токенов на входе, короткий ответ-метка) моделью 8B на одной RTX 4090 обрабатывается примерно за 10 часов, это 480 ₽. Если у запросов общая инструкция и включено кэширование префикса, время сокращается до 2–3 часов. Главное: отдать модели все запросы сразу, а не слать их по одному.

Какие задачи решают пакетом

Пакетная обработка нужна везде, где результат не требуется прямо сейчас, а данных много:

  • Разметка и классификация. Отзывы, обращения в поддержку, новости, вакансии — по темам, тональности, срочности.
  • Извлечение данных. Реквизиты из договоров, характеристики из описаний товаров, поля из резюме — в таблицу или JSON.
  • Суммаризация. Краткие выжимки звонков, переписок, отчётов для поиска и аналитики.
  • Генерация контента. Описания товаров, мета-теги, варианты заголовков для тысяч страниц.
  • Перевод и нормализация. Приведение адресов, названий и единиц к единому виду, перевод каталога.
  • Синтетические данные. Генерация примеров для дообучения другой модели.

Общее у всех одно: ответ нужен к утру или к концу недели, а не через секунду. Именно это позволяет собрать запросы в большие батчи и выжать из карты максимум.

Почему пакет дешевле запросов по одному

Генерация текста упирается в память: на каждый новый токен видеокарта читает все веса модели. Для модели 8B в FP8 это около 8 ГБ на шаг. Если в шаге один запрос, карта прочитала 8 ГБ ради одного токена. Если сто запросов, то ради ста.

Поэтому одна RTX 4090 с моделью 8B выдаёт около 80–100 токенов в секунду на одного пользователя и тысячи токенов в секунду суммарно, когда запросов много. Разница в десятки раз при той же цене часа. Подробнее о том, во что упирается скорость, читайте в статье скорость генерации токенов LLM.

Отсюда главное правило: для пакетной обработки не нужен сервер с API и цикл, который шлёт запросы по одному. Нужен офлайн-режим, в котором движок получает весь список сразу и сам решает, как его батчить.

Формула: сколько часов и рублей

Обработка состоит из двух фаз с разной скоростью:

  • prefill — модель читает вход. Это быстро: тысячи и десятки тысяч токенов в секунду, потому что входные токены обрабатываются параллельно;
  • decode — модель пишет ответ по одному токену. Медленнее, и именно здесь работает батчинг.

время, ч = (входных токенов ÷ скорость prefill + выходных токенов ÷ скорость decode) ÷ 3 600

цена = время × цена часа карты

Скорости зависят от модели, карты, длины запросов и настроек. Для оценки возьмём модель 8B в FP8 на RTX 4090 и примем порядка 15 000 токенов в секунду на prefill и 2 000 токенов в секунду суммарно на decode при большом батче. Это ориентир для расчёта, а не замер: свою цифру получите за 15 минут, как описано ниже.

Бюджет для типовых задач

Миллион запросов, модель 8B, одна RTX 4090.

Задача Вход, токенов Ответ, токенов Prefill Decode Всего часов Стоимость
Классификация отзывов по 10 темам 500 5 ~9,3 ч ~0,7 ч ~10 480 ₽
Классификация с кэшем общей инструкции 100 уникальных 5 ~1,9 ч ~0,7 ч ~2,6 125 ₽
Извлечение полей в JSON 800 150 ~14,8 ч ~20,8 ч ~36 1 728 ₽
Краткое резюме документа 1 500 200 ~27,8 ч ~27,8 ч ~56 2 688 ₽
Генерация описаний товаров 200 500 ~3,7 ч ~69,4 ч ~73 3 504 ₽

Видно, что стоимость определяется не числом запросов, а токенами, и прежде всего токенами ответа. Миллион классификаций с ответом в одно слово стоит в семь раз дешевле миллиона описаний товаров.

Расчёт на пример извлечения данных: 800 млн входных токенов ÷ 15 000 = 53 300 секунд, это 14,8 часа. 150 млн выходных ÷ 2 000 = 75 000 секунд, 20,8 часа. Вместе около 36 часов.

Семь способов сократить счёт

1. Сократите ответ

Самый сильный рычаг. Если нужна метка, просите метку, а не объяснение. Ограничьте max_tokens и используйте структурированный вывод: vLLM умеет принудительно генерировать JSON по схеме или выбирать из списка вариантов. Модель не тратит токены на «Конечно! Вот ответ:».

2. Включите кэширование префикса

Если у всех запросов одинаковая инструкция, примеры и описание формата, поставьте их в начало промпта, а уникальные данные в конец. vLLM посчитает общую часть один раз. В таблице выше это сокращает классификацию с 10 до 2,6 часа.

3. Возьмите модель поменьше

Для классификации, извлечения сущностей и простой разметки модели 3–4B часто справляются почти как 8B, а работают в 2 раза быстрее. Проверьте на 500 размеченных примерах: если точность устраивает, вы сэкономите половину бюджета.

4. Используйте FP8 или 4 бита

На картах Ada, Hopper и Blackwell (RTX 4090, L40S, H100, RTX 5090) FP8 уменьшает веса вдвое и ускоряет обработку. Для пакетных задач потеря качества обычно незаметна.

5. Сортируйте запросы по длине

Запросы похожей длины лучше упаковываются в батч, и меньше вычислений уходит впустую. Отсортируйте входные данные перед подачей, это пять строк кода.

6. Делите данные между несколькими картами

Задача пакетной обработки идеально параллелится: разрежьте миллион запросов на 4 части и запустите 4 машины с RTX 4090. Суммарная стоимость почти та же, а результат будет через 9 часов вместо 36. Платите за часы, а не за машины, поэтому четыре карты по 9 часов стоят как одна на 36.

7. Не держите сервер без дела

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

Какую карту выбрать

Модель Карта Цена, ₽/час Когда брать
3–8B RTX 3090 26 Дёшево, без FP8; для небольших массивов
3–8B RTX 4090 48 Оптимум: FP8, высокая скорость
8–14B RTX 5090 83 Больше памяти под батч, быстрее память
14–32B L40S 97 48 ГБ, FP8
32–70B H100 339–417 Большие модели с большим батчем

Для пакетных задач важна не только скорость, но и память под KV-кэш: чем больше свободных гигабайт после весов, тем больше запросов в одном батче и тем выше суммарная скорость. Поэтому 8B на 24 ГБ работает лучше, чем 14B на тех же 24 ГБ, даже с поправкой на размер модели.

Для моделей 32–70B одна H100 часто выгоднее нескольких дешёвых карт: модель помещается целиком, и остаётся много памяти под батч. Для 8B выгоднее несколько RTX 4090 параллельно.

Как запустить пакетную обработку в vLLM

  1. Арендуйте машину на почасовой аренде GPU, установите vLLM: pip install vllm.
  2. Загрузите данные, например JSONL-файл с текстами.
  3. Запустите офлайн-обработку:
import json
from vllm import LLM, SamplingParams

INSTR = "Определи тему отзыва. Ответь одним словом из списка: доставка, качество, цена, сервис, другое.\n\nОтзыв: "
rows = [json.loads(l) for l in open("reviews.jsonl")]
rows.sort(key=lambda r: len(r["text"]))  # похожая длина — плотнее батч

llm = LLM("Qwen/Qwen3-8B-FP8", max_model_len=4096, enable_prefix_caching=True)
params = SamplingParams(temperature=0, max_tokens=5)

batch = [[{"role": "user", "content": INSTR + r["text"]}] for r in rows]
outs = llm.chat(batch, params, chat_template_kwargs={"enable_thinking": False})

with open("labels.jsonl", "w") as f:
    for r, o in zip(rows, outs):
        f.write(json.dumps({"id": r["id"], "label": o.outputs[0].text.strip()}, ensure_ascii=False) + "\n")
  1. Скачайте labels.jsonl и остановите сервер.

Общая инструкция стоит в начале каждого запроса, поэтому кэширование префикса считает её один раз. temperature=0 делает ответы воспроизводимыми. Подробнее о параметрах читайте на странице запуска vLLM.

Как получить свою скорость за 15 минут

Перед полным прогоном возьмите 1 000 случайных запросов и запустите тот же скрипт. vLLM выведет в лог скорость prefill и decode. Умножьте время на 1 000, получится бюджет на миллион. Если он не устраивает, меняйте модель, длину ответа или карту, пока потрачены копейки.

Для массивов больше суток

  • Записывайте результат частями. Обрабатывайте по 50–100 тысяч запросов и сохраняйте каждую часть. Если что-то упадёт, вы потеряете час, а не сутки.
  • Выгружайте результаты во внешнее хранилище. После остановки сервера диск удаляется, поэтому промежуточные файлы стоит копировать в S3-совместимое хранилище или к себе.
  • Запускайте вручную через кабинет. Публичного API для автоматического запуска серверов у Терафермы пока нет, поэтому несколько машин для параллельной обработки поднимаются из кабинета.

Как проверить качество, не обрабатывая всё

Дешёвый прогон бесполезен, если модель ошибается в каждом пятом ответе. Перед полным запуском:

  1. Разметьте вручную 200–500 примеров, это эталон.
  2. Прогоните их через 2–3 кандидата: модель 4B, 8B и, например, 14B.
  3. Посчитайте долю совпадений с эталоном и время на 1 000 запросов для каждой.
  4. Выберите самую маленькую модель, точность которой вас устраивает.

На эту проверку уходит час-полтора аренды, а экономит она иногда половину бюджета: часто оказывается, что 4B справляется с задачей не хуже 8B. Если ни одна модель не дотягивает, улучшайте инструкцию и добавляйте в неё 3–5 примеров правильных ответов — с кэшем префикса они почти ничего не стоят.

Если обработанные данные потом нужны в онлайн-сервисе, например в боте, тот же vLLM можно запустить в режиме сервера с OpenAI-совместимым API, пример есть в статье про Telegram-бота на своей LLM.

Своя модель или пакетный API облака

У облачных API тоже есть пакетный режим. По данным на октябрь 2026 года OpenAI Batch API даёт скидку 50% к обычной цене при сроке выполнения до 24 часов. Сравнивать стоит по формуле: цена API = входные токены × тариф за вход + выходные × тариф за выход, а для своей модели — часы × цена часа.

Своя модель выигрывает, когда данных много, ответы короткие, задача решается моделью 8–14B, а данные нельзя отправлять внешнему сервису. API выигрывает, когда нужна самая сильная модель, а массив небольшой. Для пакетных задач на миллионы запросов разница часто в разы в пользу своей модели.

Пополнить баланс можно от 500 ₽ криптовалютой (USDT, BTC и другие монеты), оплата картой РФ и счёт для юрлиц в планах. Оплата поминутная, поэтому пробный прогон на 1 000 запросов стоит копейки.

Пакетная обработка LLM дешевле всего в офлайн-режиме vLLM: все запросы сразу, короткий ответ, общая инструкция в начале промпта и самая маленькая модель, которая справляется с задачей. Миллион классификаций моделью 8B на RTX 4090 занимает около 10 часов, с кэшем префикса 2–3 часа. Стоимость считается по токенам, а не по запросам, и сильнее всего зависит от длины ответа.

Замерьте скорость на 1 000 своих запросов на почасовой аренде GPU и посчитайте бюджет на весь массив по формуле.

Вопросы по теме

Сколько стоит обработать миллион запросов своей LLM?

Зависит от длины входа и ответа. Классификация (500 токенов на входе, 5 на выходе) моделью 8B на RTX 4090 занимает порядка 10 часов, это 480 ₽. Извлечение данных в JSON со 150 токенами ответа — около 36 часов, 1 728 ₽. Точную цифру даёт замер на 1 000 запросах.

Почему пакетная обработка дешевле, чем запросы по одному?

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

Что выгоднее для пакетной обработки: одна H100 или несколько RTX 4090?

Для моделей до 8–14B обычно несколько RTX 4090: каждая обрабатывает свою часть данных, а цена часа ниже. H100 выигрывает для моделей 32–70B, которым нужна память, и когда важно получить результат быстрее на одной машине.

Что такое кэширование префикса и сколько оно экономит?

Если у всех запросов одинаковое начало — инструкция, примеры, схема ответа, — vLLM считает его один раз и переиспользует. При общей инструкции на 400 токенов из 500 обработка входа сокращается примерно в 5 раз.

Подберите GPU

20 моделей с поминутной оплатой в рублях.