02.09.2026

1 млрд токенов/сутки: финальная архитектура, тономика и что мы бы сделали по-другому

Часть 5 серии «Наш опыт»: финальная схема 4×(2×RTX 3090), честный расчёт 1 млрд токенов/сутки (пик), тономика (~$4,500/год против $35–125K API, 1M токенов ~1–1.5 ₽, payback 1–2 месяца) и 5 уроков пути.

architecture tokenomics vllm rtx-3090 gpu

Хук: ~$4,500/год против API

1 млрд токенов в сутки. В пике. В среднем — 600–750M/сутки, ≈220–275B в год. Если бы этот объём шёл через API, он стоил бы $35–125K в год в зависимости от blended-тарифа. На нашем железе — ~$4,500/год. Вот как мы дошли до этой цифры — и как ловили себя на нечестных расчётах по пути.

Финальная архитектура

Финальная архитектура: клиенты → балансировщик (Python) → 4 реплики 2×RTX 3090 (vLLM, TP=2, MTP) → GPUStack (auto-restart, monitoring)
<rect class="d-box" x="190" y="8" width="380" height="44" rx="6" />
<text class="d-text" x="380" y="35" text-anchor="middle">pi.dev / Cursor / Kilo Code</text>
<line class="d-line" x1="380" y1="52" x2="380" y2="80" marker-end="url(#arch-arrow)" />
<rect class="d-box" x="190" y="88" width="380" height="48" rx="6" />
<text class="d-text" x="380" y="117" text-anchor="middle">Балансировщик (Python)</text>
<line class="d-line" x1="380" y1="136" x2="380" y2="152" />
<line class="d-line" x1="125" y1="152" x2="635" y2="152" />
<line class="d-line" x1="125" y1="152" x2="125" y2="174" marker-end="url(#arch-arrow)" />
<line class="d-line" x1="295" y1="152" x2="295" y2="174" marker-end="url(#arch-arrow)" />
<line class="d-line" x1="465" y1="152" x2="465" y2="174" marker-end="url(#arch-arrow)" />
<line class="d-line" x1="635" y1="152" x2="635" y2="174" marker-end="url(#arch-arrow)" />
<rect class="d-box" x="50" y="180" width="150" height="120" rx="6" />
<text class="d-title" x="125" y="208" text-anchor="middle">R1</text>
<text class="d-sub" x="125" y="232" text-anchor="middle">2×3090</text>
<text class="d-sub" x="125" y="252" text-anchor="middle">vLLM · TP=2</text>
<text class="d-sub" x="125" y="272" text-anchor="middle">MTP</text>
<rect class="d-box" x="220" y="180" width="150" height="120" rx="6" />
<text class="d-title" x="295" y="208" text-anchor="middle">R2</text>
<text class="d-sub" x="295" y="232" text-anchor="middle">2×3090</text>
<text class="d-sub" x="295" y="252" text-anchor="middle">vLLM · TP=2</text>
<text class="d-sub" x="295" y="272" text-anchor="middle">MTP</text>
<rect class="d-box" x="390" y="180" width="150" height="120" rx="6" />
<text class="d-title" x="465" y="208" text-anchor="middle">R3</text>
<text class="d-sub" x="465" y="232" text-anchor="middle">2×3090</text>
<text class="d-sub" x="465" y="252" text-anchor="middle">vLLM · TP=2</text>
<text class="d-sub" x="465" y="272" text-anchor="middle">MTP</text>
<rect class="d-box" x="560" y="180" width="150" height="120" rx="6" />
<text class="d-title" x="635" y="208" text-anchor="middle">R4</text>
<text class="d-sub" x="635" y="232" text-anchor="middle">2×3090</text>
<text class="d-sub" x="635" y="252" text-anchor="middle">vLLM · TP=2</text>
<text class="d-sub" x="635" y="272" text-anchor="middle">MTP</text>
<line class="d-line" x1="125" y1="300" x2="125" y2="318" />
<line class="d-line" x1="295" y1="300" x2="295" y2="318" />
<line class="d-line" x1="465" y1="300" x2="465" y2="318" />
<line class="d-line" x1="635" y1="300" x2="635" y2="318" />
<line class="d-line" x1="125" y1="318" x2="635" y2="318" />
<line class="d-line" x1="380" y1="318" x2="380" y2="342" marker-end="url(#arch-arrow)" />
<rect class="d-box" x="190" y="348" width="380" height="56" rx="6" />
<text class="d-text" x="380" y="371" text-anchor="middle">GPUStack</text>
<text class="d-sub" x="380" y="391" text-anchor="middle">auto-restart · monitoring</text>
Клиенты → собственный балансировщик → 4 реплики 2×RTX 3090 (vLLM, TP=2, MTP) → GPUStack

Собрать детали: железо (часть 1), модель (часть 2), конфиг vLLM (часть 3), балансировщик (часть 4).

Цифры: как мы считаем 1 млрд токенов/сутки

Считаем честно, по частям:

  • 4 реплики × 75–100 tok/s = 300–400 tok/s (aggregate decode).
  • 400 tok/s × 86,400s = 34.6M output-токенов/сутки — теоретический максимум генерации.
  • Реальный decode — ~60% utilization (есть prefill, idle, TTFT) → ~20M output-токенов/сутки.

А теперь — момент честности. Мы сначала считали «1 млрд» как 700M input + 300M output. И поняли, что это не сходится: 300M output-токенов при 400 tok/s — это 750,000 секунд, то есть 8.7 дня, а не сутки.

Отсюда правильный вывод: 1 млрд — это total (input + output), и в агентных нагрузках доминирует input. Контекст 256K, RAG, tool calls — это сотни тысяч input-токенов на запрос при генерации в 1–5K. Prefill такого объёма проходит на порядки быстрее decode.

Итог, как мы считаем:

  • 1 млрд токенов/сутки — пиковая нагрузка (агентный кодинг, 8–12 часов пиковой активности).
  • В среднем — 600–750M/сутки (≈220–275B в год).
  • Пик — это то, что определяет размер инфраструктуры. Средний — то, что определяет экономику.

Кто потребляет: 10 сотрудников, каждый кодит в 3 параллельных потока. При этом GPU держит температуру ниже 74°C (допустимая — 93°C).

Тономика (ROI)

ПараметрЗначение
Железо (8×RTX 3090, б/у ~$700 + 4 сервера)~$5,600–7,000 (разово)
Электричество (8×350W + 4×Xeon + overhead ≈ 3.5 кВт, 24/7 ≈ 30 000 кВт·ч/год)~$2,300–2,800/год
Амортизация (3 года)~$1,900–2,300/год
Итого/год~$4,500/год (диапазон $4,200–5,100)
Средний объём600–750M токенов/сутки (≈220–275B/год)
Пиковый объём~1B токенов/сутки
API-эквивалент (blended $0.14–0.50/1M)~$35–125K/год
Стоимость 1M токенов локально (средний)~$0.018 ≈ 1.5 ₽
Стоимость 1M токенов локально (при пике)~$0.012 ≈ 1 ₽
Payback period1–2 месяца

Расчёт payback: при среднем объёме API-эквивалент — $35–125K/год, локально — ~$4,500/год. Экономия при blended-тарифе ~$0.25–0.30/1M — порядка $4–5K/месяц; $5,600–7,000 железа окупаются за 1–2 месяца.

~$0.012/1M — это стоимость при пиковой загрузке ($4,500/год ÷ 365B токенов/год). При среднем объёме — ~$0.018/1M (≈1.5 ₽ при курсе ~85 ₽/$). И то, и другое на порядок дешевле API-диапазона $0.14–0.50/1M (12–42 ₽).

Что мы бы сделали по-другому (уроки)

  1. Железо: 4 GPU в одном узле не влезли по питанию: 4×3090 — это ~1.4kW, блок питания и материнская плата не потянули. Поэтому 4 узла по 2×3090: питание распределено, а потеря одного узла — не катастрофа.
  2. Модель: не тестировали бы 12 моделей. Взяли бы Qwen3.8, DeepSeek-V3.2 (если влезает) и GLM-4.6. 3 модели, 3 дня, решение.
  3. vLLM: сразу поставили бы 0.28.0. 2 недели на нестабильном 0.27.1 — потерянное время.
  4. Балансировщик: не писали бы с нуля — форкнули бы llm-d (или Gateway API Inference Extension) и адаптировали под наши 2×3090 и агентов. Набор сигналов тот же, а итераций — на две недели меньше (почему мы всё-таки написали свой и что из этого выросло — в части 4).
  5. Мониторинг: с первого дня поставили бы Prometheus + Grafana. 2 недели мы летали вслепую: crash на MTP обнаружили по логам, а не по алерту. Подробности — в Observability.

Что дальше (roadmap)

  • Qwen4 (когда выйдет): MTP + 40B — 3090 не потянет. Нужен 4090 (48GB) или H100.
  • RAG-сервис: bge-m3-legal-ru + reranker (BGE-reranker-v2-m3).
  • Quorix: AI Gateway поверх этой инфраструктуры (pre-execution enforcement).

Эта статья — не конец. Это checkpoint — и он уже обновляется: 10 сентября поймали CUDA out of memory в forward под нагрузкой (23.45 из 23.56 GiB на карте). KV-бюджет — живой параметр, а не разовая настройка. Через 6 месяцев мы перепишем эту статью заново.

Финал

1 млрд токенов в сутки — это не про железо. Это про то, что мы перестали быть пользователями API и стали операторами инфраструктуры. Наш код-агент работает 24/7, без лимитов, без счетов, без зависимости от чужого uptime. И это стоит ~$4,500/год. Не $35–125K, как через API.

Смежные материалы: Право и ИИ: локализация данных и регуляторика.

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

Хотите так же?

Расскажите о задаче — ответим с планом и оценкой в течение 2 рабочих дней.

Обсудить задачу

Расскажите о задаче

Ответим с планом и оценкой в течение 24 часов.