RTX 3090

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

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

Как мы выбрали Qwen3.8-27B из 12 моделей: бенчмарки, MTP и почему 27B — sweet spot

Часть 2 серии «Наш опыт»: сравнение 12 моделей на 2×RTX 3090 — Terminal-Bench, DeepSWE, MTP, VRAM. Почему 27B — оптимум для агентного кодинга.

vLLM на 2×RTX 3090: от 18 до 100 tok/s — MTP, TP, KV-cache, OMP_NUM_THREADS

Часть 3 серии «Наш опыт»: 4 итерации тюнинга vLLM — MTP-декодирование, KV-cache на 256K, OMP_NUM_THREADS=1, mamba-cache-mode. Полный финальный конфиг и бенчмарк до/после.

Мы написали балансировщик для 4 реплик vLLM: почему NGINX не работает для LLM

Часть 4 серии «Наш опыт»: почему round-robin убивает throughput LLM-инференса и как собственный Python-балансировщик (soft sticky + least-loaded + health без user traffic) держит сессии на тёплой KV-cache. Четыре production-инцидента, которые сформировали алгоритм.

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

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

Какой движок инференса выбрать: vLLM, SGLang, TensorRT-LLM, llama.cpp, Ollama, TGI, LMDeploy

Сравнение движков инференса по сложности и возможностям: vLLM, SGLang, TensorRT-LLM, llama.cpp, Ollama, TGI, LMDeploy. Форматы GGUF vs AWQ/FP8 и путь модели disk → RAM 1.2X → VRAM 1–2X.

Матрица моделей по размерным классам: одна задача — одна модель

Какие модели брать по размерным классам: ≤3B — документы и аудио, ≤8B — RAG и поиск, ≤15B — рефакторинг, ≤35B — агентский кодинг. Конкретные модели и почему наш выбор — Qwen3.8-27B-AWQ-MTP.

Особенности LLM-трафика: почему round-robin не работает

Четыре свойства LLM-трафика — неоднородность 100×, стоимость ∝ токенам, KV-кэш как состояние на ноде, bursty 3–10 запросов на человека — и почему они ломают round-robin. Сигналы балансировки: load, sticky, prefix, health.

Подбор модели под железо: VRAM-бюджет

Как посчитать, влезет ли модель: 6-шаговый алгоритм, формулы для весов и KV-cache, форматы под GPU-архитектуру (Ampere → AWQ, Hopper → FP8, CPU → GGUF) и лестница снижений при OOM.

Что ожидают пользователи от LLM-инференса в 2026: шесть параметров

Шесть параметров, которые в 2026 считаются стандартом, а не завышенным запросом: 80–100 tok/s, контекст 256K, 50M токенов/сутки на человека, качество ≥ Claude 3.5 Sonnet, OpenAI/Anthropic-совместимый API, статистика и доступы.

Qwen 27B на 2×RTX 3090

Бенчмарк Qwen3.8-27B-AWQ-MTP на 2×RTX 3090 (TP=2): 100 tok/s, TTFT 1.8s, контекст 256K. До/после тюнинга vLLM и полный конфиг.

Observability для vLLM

Observability для vLLM: ключевые метрики (throughput, TTFT, TPOT, GPU, KV-cache), настройка Prometheus и Grafana, алерты и цена двух недель без мониторинга в референс-деплое.

Multi-tenant Serving

Multi-tenant serving для vLLM: fair scheduling, изоляция ресурсов, приоритеты, request-level и token-level scheduling, и как 4 реплики + Python-балансировщик решают это в референс-деплое.

AWQ

AWQ: activation-aware квантизация весов до INT4 — как выделяются критические каналы, сравнение с GPTQ и FP8, запуск в vLLM и почему 27B в AWQ влезает в 2×RTX 3090.

Tensor Parallelism

Tensor Parallelism в vLLM: как веса разрезаются между GPU, PCIe против NVLink, таблица TP-градусов по размеру модели и почему 27B работает на 2×RTX 3090 по PCIe 4.0.

Continuous Batching

Continuous batching в vLLM: как scheduler добавляет запросы на каждой итерации decode, параметры max_num_seqs и max_num_batched_tokens, prefill/decode-баланс и компромисс с 256K контекстом.