14.08.2026

Почему мы собрали LLM-сервер, который жжёт миллиард токенов в сутки

Часть 1 серии «Наш опыт»: мотивация self-hosted LLM-инференса и путь железа от Tesla M40 до 4×(2×RTX 3090) — с цифрами на каждой фазе.

llm-inference rtx-3090 self-hosted gpu qwen

Хук: момент, когда API стал болью

В марте 2026 мы посмотрели на счёт за Claude API — $4,200 за месяц — и поняли: наш код-агент сжигает больше токенов, чем мы зарабатываем.

Это было не абстрактное «API дорогой». Конкретика: наш pi.dev-агент за одну сессию генерирует ~200K токенов. 10 сессий в день — это 2 млн токенов. По API это ощутимые деньги каждый день, по локальному — электричество.

Мы не «решили собрать сервер из любопытства». Мы перестали быть заложниками чужого API: теперь наш код-агент работает в air-gapped среде, без лимитов провайдера и без зависимости от чужого uptime.

Почему не API

Сначала — цифры. Сколько стоил бы наш объём через API (blended-тарифы $0.14–0.50 за 1M токенов в зависимости от модели и провайдера):

Объём в месяцAPI (blended $0.14–0.50/1M)
100M токенов$14–50
500M токенов$70–250
1B токенов$140–500

На пиковых нагрузках агентов это не «оплата по факту» — это постоянная статья расходов, которая растёт вместе с продуктом.

Но деньги — не единственная причина. Для нас критичны три вещи:

  1. Приватность. Данные не уходят наружу. Для RU-рынка с чувствительным кодом и внутренними документами это не «nice to have», а требование.
  2. Автономность. Нет зависимости от доступности чужого API: rate limits, инциденты провайдера, региональные блокировки.
  3. Контроль. Мы видим каждый токен: где он сгенерирован, сколько стоит, почему запрос занял 8 секунд.

«API дорогой, локально дешевле» — скучная аргументация. Наша: мы перестали быть пользователями API и стали операторами инфраструктуры.

Железо: путь от 0 до 4×(2×RTX 3090)

Мы не начинали с 8 GPU. Мы начинали с Tesla M40, которая уже стояла в офисе. Четыре фазы:

ФазаЖелезоСтекМодельСкоростьКонтекстПользователи
0Tesla M40 24GBOllama10–20 tok/s4–32K1
12×(RTX 3060 + RTX 4070 Ti), XeonProxmox + GPUStack + llama.cpp50–70 tok/s32–64K2–3
22×RTX 3090 (TP=2)vLLMQwen3.8-27B-AWQ-MTP75–100 tok/s256Kдо 2 (max-num-seqs 2)
34×(2×RTX 3090)vLLM + свой балансер + GPUStackQwen3.8-27B-AWQ-MTP80–100 tok/s/чел256K10 (у каждого 3 потока)

Фаза 0: Tesla M40. 24GB вроде бы хватает, но карта очень шумная — 250W, вентилятор на 100% под нагрузкой, — и NVIDIA её уже не поддерживает. Ollama дал 10–20 tok/s с контекстом 4–32K (дефолт Ollama). Плюс три особенности: холодный старт (keep_alive 5m — модель выгружается из VRAM спустя 5 минут), тяжело организовать доступ по ключам, без доступа через VPN. Один пользователь, и всё очень долго.

Фаза 1: два consumer-сервера. Два сервера: RTX 3060 + RTX 4070 Ti, Xeon 3-го поколения, 24GB VRAM на карту. Серверы объединили в Proxmox-кластер — централизованный контроль RAM, VRAM, SSD. GPUStack — скачивание моделей, запуск, auto-restart, статистика по пользователям и API-ключам. llama.cpp — рантайм: контекст под задачу, модель держим в VRAM, без холодных стартов. Итог: 50–70 tok/s, контекст 32–64K, 2–3 пользователя — и это предел, не хватает пропускной способности. Цена этапа: первый счёт за электричество 24/7 и китайские материнские платы.

Фаза 2: 2×RTX 3090, TP=2. Tensor parallelism по двум картам, vLLM, Qwen3.8-27B-AWQ-MTP. 75–100 tok/s, контекст 256K влез (как — в части 3). Проблема: один сервер — single point of failure. Crash vLLM на середине сессии = потерянный контекст и остановленный агент.

Фаза 3: четыре узла. 4×(2×3090) = 8 GPU + свой балансировщик + GPUStack. 10 сотрудников работают, каждый может кодить в 3 параллельных потока, 80–100 tok/s на человека, пик — 1 млрд токенов/сутки. Single point of failure исчез: потерять один узел — перестало быть катастрофой.

Для каждой фазы мы замеряли три вещи: tok/s, максимальный контекст и степень параллельности. Цифры в таблице — не из документации, а из наших замеров на конкретном железе.

Что НЕ работает (честно)

RTX 3090 — это Ampere, не Ada и не Hopper. Честные ограничения:

  • Нет нативного FP8. Аппаратного FP8-инференса на 3090 нет — поэтому мы квантуем в AWQ (INT4), а не FP8.
  • NVLink-мосты в нашем конфиге не используются. TP=2 работает по PCIe 4.0 — для 27B модели этого достаточно, и мы это замерили (см. часть 3).
  • 24GB VRAM на GPU — потолок. Контекст 256K + веса 27B — это постоянный расчёт «что влезает, а что нет».

Мы не собирали H100-кластер. Мы собирали то, что было доступно и по карману. И этого хватило для 1 млрд токенов/сутки.

Что дальше

В части 2 — как мы выбрали Qwen3.8 из 12 протестированных моделей. И почему MTP-спекулятивное декодирование дало нам до ×2.7 скорости.

Смежные материалы: Что ожидают пользователи от LLM-инференса в 2026, Какой движок инференса выбрать.


Мы прошли этот путь сами — и теперь делаем то же самое для компаний. Подбор железа и модели, настройка vLLM, балансировка, токономика: если у вас есть LLM-нагрузка и вопрос «сколько это стоит и как ускорить», обсудим ваш проект.

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

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

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

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

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