Стоимость одного запроса к вашей LLM: считаем честно
У облачного API есть прайс-лист: столько-то за миллион входных токенов, столько-то за миллион выходных — открыл страницу тарифов и узнал цену запроса заранее. У своей LLM на арендованном сервере такого прайс-листа нет, и вопрос «сколько стоит один запрос» ставит в тупик: сервер же оплачен целиком вперёд, при чём тут отдельный запрос? На самом деле цена есть, просто она не константа, а частное от деления — и меняется каждый месяц в зависимости от того, сколько вы этот сервер загрузили.
Содержание
- Почему цена запроса — это не то же самое, что тариф провайдера
- Формула стоимости одного запроса на своём сервере
- Как загрузка меняет цену: от дорогого до почти бесплатного запроса
- Зеркальная логика облака: фиксированная цена за токен
- Точка безубыточности: когда свой сервер обгоняет облако по деньгам
- Как посчитать реальное число запросов в месяц
Почему цена запроса — это не то же самое, что тариф провайдера
Тариф облачного API — это цена за единицу работы (токен), назначенная провайдером один раз и не зависящая от того, сколько вы в итоге используете модель. Сделали вы 10 запросов в месяц или 10 000 — цена каждого токена одна и та же, разница только в итоговой сумме счёта.
У своего сервера логика противоположная. Вы не платите за токен — вы платите за аренду железа целиком, вне зависимости от того, простаивает оно или считает без перерыва. Цена одного запроса тогда — не тариф, а результат: сколько запросов «поместилось» в уже оплаченный месяц аренды. Это принципиально другая математика, и путать её с тарифом облака — источник половины неверных выводов в духе «свой сервер всегда дешевле» или «свой сервер невыгоден».
Здесь же кроется и главный практический вывод: у себя вы не можете назвать цену запроса, пока не прошёл месяц и вы не посчитали фактическую нагрузку. Это оценка постфактум, а не прайс, который можно повесить на сайт заранее — в отличие от облака, где цена известна ещё до первого вызова API.
Формула стоимости одного запроса на своём сервере
Формула простая и в этом её сила — она не требует знать токенайзер, кэш-скидки или курс валюты провайдера:
Цена одного запроса = Стоимость сервера в месяц / Число обработанных запросов за месяц
Два слагаемых, обе — ваши собственные цифры, а не цифры из чужого прайс-листа:
- Стоимость сервера в месяц — то, что вы платите за аренду (или амортизация, если сервер куплен, но для месячного расчёта проще брать аренду или условную ежемесячную долю капитальных затрат). Это число фиксировано на месяц вперёд и не зависит от вашей нагрузки.
- Число обработанных запросов за месяц — реальное количество вызовов вашего API за LLM (чат-завершений, генераций эмбеддингов, что бы вы ни считали единицей запроса), а не оценка «примерно столько-то в день».
Важный нюанс: делить нужно на фактическое число запросов за прошедший месяц, а не на теоретическую пропускную способность сервера («сколько он мог бы обработать, если бы работал на полную»). Прогноз — это отдельная задача планирования мощности; для честной цены запроса нужен факт, а факт узнаётся только когда месяц закончился и лог собран.
Разберём на условном примере — числа ниже иллюстративные, у вас будет другой сервер и другая нагрузка, ориентируйтесь только на саму методику:
Пусть аренда сервера под LLM стоит X условных единиц в месяц (подставьте свою реальную сумму счёта). Тогда:
| Запросов в месяц | Цена одного запроса |
|---|---|
| 1 000 | X / 1 000 |
| 10 000 | X / 10 000 (в 10 раз дешевле) |
| 100 000 | X / 100 000 (в 100 раз дешевле) |
Сумма счёта за сервер не меняется ни в одной из строк — меняется только то, на сколько запросов она размазана. Это и есть весь фокус: одна и та же аренда даёт кардинально разную цену запроса в зависимости от того, насколько вы её используете.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Развернуть ИИ на сервереКак загрузка меняет цену: от дорогого до почти бесплатного запроса
Из формулы напрямую следует контринтуитивный для многих вывод: чем выше загрузка сервера, тем дешевле каждый отдельный запрос — и это работает в обе стороны, в отличие от облака.
Низкая загрузка — дорогой запрос. Сервер простаивает большую часть месяца, но счёт за аренду от этого не уменьшается ни на копейку — вы платите за адрес, а не за визиты (эта аналогия подробнее разобрана в статье про то, сколько стоит держать локальную LLM в месяц). Если за весь месяц набежала пара сотен запросов, вся стоимость аренды делится на них — и цена одного запроса может оказаться выше, чем аналогичный запрос обошёлся бы через облачный API. Это классическая ловушка «завёл свою LLM для экономии» при объёме, который не оправдывает содержание отдельного сервера.
Высокая загрузка — дешёвый запрос. Тот же сервер, та же аренда, но запросов на порядок больше — и цена каждого падает пропорционально. До определённого предела рост числа запросов не требует роста расходов: пока сервер физически справляется с потоком (не упирается в очередь, задержку или память под контекст одновременных сессий), добавление ещё одного запроса ничего вам не стоит сверх уже оплаченной аренды. Это прямое следствие того, как GPU обрабатывает параллельные запросы батчами — если вам не знакома эта механика, она подробно разобрана в статье о том, почему один пользователь тратит GPU впустую: сервер, который еле дышит на одном запросе в секунду, часто способен обработать в разы больше без дополнительных затрат — просто параллельно.
Но у падения цены есть дно. Кривая «больше запросов — дешевле каждый» не бесконечна. У сервера есть физический потолок пропускной способности — упирается в объём видеопамяти под KV-кэш параллельных сессий, в число ядер CPU, в дисковый ввод-вывод. Как только вы упёрлись в этот потолок, лишние запросы не удешевляют предыдущие — они встают в очередь, растёт задержка ответа, и по факту вы либо теряете качество обслуживания, либо вам нужен второй сервер (тогда знаменатель формулы вырастет вдвое сразу вместе с числителем — и цена запроса скакнёт обратно вверх, пока новая мощность не заполнится нагрузкой).
Зеркальная логика облака: фиксированная цена за токен
Стоит явно проговорить, чем экономика своего сервера отличается от облачного API — потому что именно из этого различия рождается вопрос о точке безубыточности.
| Свой сервер | Облачный API | |
|---|---|---|
| Что вы оплачиваете | Аренду целиком, вне зависимости от нагрузки | Каждый токен по факту использования |
| Цена запроса при низкой нагрузке | Высокая (аренда делится на мало запросов) | Не меняется — тариф фиксирован |
| Цена запроса при высокой нагрузке | Низкая (аренда делится на много запросов) | Не меняется — тот же тариф |
| Риск простоя | Полностью на вас — недогрузили сервер, переплатили | Отсутствует — не вызвали API, не заплатили |
| Предсказуемость счёта | Высокая (сумма известна заранее) | Низкая при непредсказуемой нагрузке — счёт растёт вместе с использованием |
Здесь же лежит менее очевидный нюанс про сам облачный тариф — если вы уже считаете расходы на облачные вызовы по usage-полям из ответа API, а не прикидкой, эта методика разобрана отдельно: как считать стоимость LLM-запросов через реальные данные, а не оценку по символам.
Ключевой вывод из таблицы: у облака цена за единицу работы — горизонтальная прямая, она не зависит от объёма. У своего сервера — падающая кривая, которая стремится к нулю с ростом нагрузки, но никогда не станет отрицательной и упирается в потолок мощности. Это значит, что сравнение «что дешевле» не имеет одного универсального ответа — ответ зависит от точки на этой кривой, в которой вы находитесь именно в этом месяце.
Точка безубыточности: когда свой сервер обгоняет облако по деньгам
Раз у своего сервера цена запроса падает с нагрузкой, а у облака остаётся неизменной, у двух кривых обязана быть точка пересечения — число запросов в месяц, начиная с которого свой сервер становится дешевле по совокупным деньгам, чем оплата по токену в облаке за тот же объём работы.
Формула точки безубыточности в запросах:
N* = Стоимость сервера в месяц / (Средняя цена одного запроса в облаке)
Где «средняя цена одного запроса в облаке» — это то, во сколько вам обходится typичный вызов (с вашей типичной длиной промпта и ответа) при тарифах выбранного облачного провайдера — берите её из фактического счёта за облако или из расчёта по usage-полям, а не с потолка.
Если реальное число запросов в месяц больше N* — свой сервер выгоднее: аренда, разделённая на такой объём, стоит дешевле, чем тот же объём работы по токену в облаке. Если меньше N* — выгоднее оставаться на облачном API: аренда простаивающего сервера обходится дороже, чем платить по факту использования.
Эта же логика по своей структуре встречается в расчёте окупаемости почасовой аренды GPU против выделенного сервера — там точка безубыточности считается в часах использования, а не в запросах, но идея та же: точка окупаемости GPU-сервера против аренды разбирает эту математику для случая, когда вы уже платите почасово и решаете, не пора ли перейти на фиксированную аренду.
Важная оговорка: N* — не постоянное число раз и навсегда. Оно плывёт вместе с вашим миксом запросов (если вырос средний размер промпта — вырастет и знаменатель формулы, среднее облако станет дороже за запрос, и N* сдвинется вниз) и вместе с тарифами облачного провайдера (провайдеры периодически меняют цены — берите актуальный тариф на момент расчёта, а не запомненную цифру полугодовой давности).
Как посчитать реальное число запросов в месяц
Формула бесполезна без точного знаменателя. Три рабочих способа получить реальное число запросов за прошедший месяц, от простого к подробному.
Access-лог реверс-прокси. Если ваш инференс-сервер стоит за nginx (обычная схема — TLS-терминация плюс единая точка входа для чат-интерфейса и API), число запросов за месяц по нужному эндпоинту считается одной командой:
awk '$4 ~ "01/Sep/2026" || $4 ~ "0[2-9]/Sep/2026" || $4 ~ "[12][0-9]/Sep/2026" || $4 ~ "3[01]/Sep/2026"' \
/var/log/nginx/llm-access.log \
| grep -c 'POST /v1/chat/completions'
Плюс способа — не требует изменений в самом инференс-сервере, работает с любым бэкендом (Ollama, vLLM, llama.cpp через любой API-обвес). Минус — считает HTTP-запросы, а не «логические» обращения пользователя, если ваш клиент иногда ретраит один и тот же запрос при обрыве соединения.
Встроенные метрики инференс-сервера. vLLM и большинство production-обвязок отдают Prometheus-метрики на /metrics, включая счётчики завершённых запросов по причине завершения (по лимиту токенов, по стоп-слову и так далее). Точные имена метрик меняются между версиями, так что перед тем как строить на них расчёт, откройте curl localhost:8000/metrics | grep request на своей текущей версии и берите актуальное имя counter'а, а не имя из чужого туториала.
Трейсинг через Langfuse или аналог. Если у вас уже стоит инструмент трассировки LLM-вызовов (для контроля стоимости, качества ответов или отладки промптов), он и так считает число запросов за период — обычно это готовый дашборд, без отдельной команды в терминале. Если такого инструмента ещё нет, но вы хотите не только знаменатель для этой формулы, а полноценный контроль над расходами — приглядитесь к статье о мониторинге нагрузки локальной LLM: помимо числа запросов там разобрано, что ещё стоит снимать с сервера, чтобы вовремя заметить приближение к потолку мощности, а не постфактум по жалобам пользователей на задержку.
Какой бы способ вы ни выбрали, считайте один и тот же период календарного месяца, за который берёте стоимость аренды — иначе числитель и знаменатель формулы окажутся посчитаны за разные интервалы, и итоговая цена запроса будет искажена без видимой причины.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Развернуть ИИ на сервереНужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Частые вопросы
Можно ли назвать точную цену запроса заранее, до конца месяца?
Нет — методика по своей природе постфактум: знаменатель (реальное число запросов) известен только после того, как месяц закончился и лог собран. Заранее можно только спрогнозировать диапазон, опираясь на нагрузку прошлых месяцев, но это оценка, а не точная цифра.
Что если у меня несколько моделей на одном сервере?
Делите стоимость сервера между моделями пропорционально их фактической доле в общей нагрузке (по числу запросов, по времени GPU-занятости или по токенам — выберите одну метрику и используйте её последовательно), а не поровну — иначе редко используемая модель исказит цену часто используемой.
Учитывать ли в стоимости сервера ещё и работу инженера, который его администрирует?
Для чистого сравнения с ценой облачного API — нет, там эта работа скрыта в марже провайдера и напрямую не сопоставима. Если считаете полную стоимость владения для внутреннего бюджета — да, добавляйте трудозатраты отдельной строкой, не смешивая с формулой цены запроса.
Формула работает только для инференса или для дообучения тоже?
Формула универсальна для любой аренды, которая тарифицируется помесячно, а не по факту использования — но для обучения моделей единицей измерения обычно выступает не «запрос», а эпоха или прогон, так что знаменатель нужно менять по смыслу задачи.
Что делать, если нагрузка сильно скачет от месяца к месяцу?
Считайте формулу помесячно, а не одним усреднённым числом за квартал или год — иначе вы потеряете именно ту информацию, ради которой всё затевалось: понимание, в какие месяцы сервер оправдывает себя, а в какие простаивает и стоит присмотреться к более гибкой почасовой аренде.
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →