Хук: момент, когда 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 |
На пиковых нагрузках агентов это не «оплата по факту» — это постоянная статья расходов, которая растёт вместе с продуктом.
Но деньги — не единственная причина. Для нас критичны три вещи:
- Приватность. Данные не уходят наружу. Для RU-рынка с чувствительным кодом и внутренними документами это не «nice to have», а требование.
- Автономность. Нет зависимости от доступности чужого API: rate limits, инциденты провайдера, региональные блокировки.
- Контроль. Мы видим каждый токен: где он сгенерирован, сколько стоит, почему запрос занял 8 секунд.
«API дорогой, локально дешевле» — скучная аргументация. Наша: мы перестали быть пользователями API и стали операторами инфраструктуры.
Железо: путь от 0 до 3×(2×RTX 3090)
Мы не начинали с 6 GPU. Мы начинали с ноутбука. Четыре фазы:
| Фаза | Железо | Модель | Tok/s | Контекст | API-эквивалент, $/1M |
|---|---|---|---|---|---|
| 0 | RTX 2060 Mobile (ноутбук) | Qwen3.5-7B Q4 | ~12 | 32K | — |
| 1 | 1×RTX 3090 (б/у, ~$700) | Qwen3.6-27B Q4 | ~35 | 64K | ~$0.5 |
| 2 | 2×RTX 3090 (TP=2) | Qwen3.8-27B-AWQ-MTP | ~75 | 256K | ~$0.3 |
| 3 | 3×(2×RTX 3090) = 6 GPU | Qwen3.8-27B-AWQ-MTP | ~75×3 | 256K | ~$0.1 |
Фаза 0: ноутбук. RTX 2060 Mobile, Qwen3.5-7B через Ollama, 12 tok/s. Для чата — нормально. Для агента — нет: агент держит контекст, вызывает tools, генерирует кодом — 12 tok/s превращает 30-минутную задачу в полтора часа.
Фаза 1: первая 3090. Б/у RTX 3090 за ~$700. Qwen3.6-27B в Q4. 35 tok/s, контекст 64K. Для одиночного агента уже работало. Но 256K контекста — а агенту нужна полная история + код + tool calls — не влезало.
Фаза 2: вторая 3090, TP=2. Tensor parallelism по двум картам, Qwen3.8-27B-AWQ-MTP. 100 tok/s, контекст 256K влез. Проблема: один сервер — single point of failure. Crash vLLM на середине сессии = потерянный контекст и остановленный агент.
Фаза 3: третий узел. 3×(2×3090) = 6 GPU. Теперь мы можем параллельно гонять 3 агента + RAG-сервис + embedding-модель. И — это важно — потерять один узел перестало быть катастрофой.
Для каждой фазы мы замеряли три вещи: 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 скорости.
Мы прошли этот путь сами — и теперь делаем то же самое для компаний. Подбор железа и модели, настройка vLLM, балансировка, токономика: если у вас есть LLM-нагрузка и вопрос «сколько это стоит и как ускорить», обсудим ваш проект.