resources:
requests:
nvidia.com/gpu: "1"
limits:
nvidia.com/gpu: "1"
env:
- name: MAX_CONCURRENT_STREAMS
value: "200"
- name: ENABLE_ASR_TTS_MONOLITH
value: "true"Смотрите на этот манифест. Вендоры регулярно отгружают подобный мусор в enterprise-поставках. Одна видеокарта. Двести потоков. Монолитный контейнер. Магическая вера в то, что тяжелые нейросети сами уложатся в 16 гигабайт видеопамяти и выдадут саксесс-рейт в реальном времени. Спойлер: не уложатся. Под пиковой нагрузкой VRAM фрагментируется, просыпается OOM-killer (Out of Memory), под умирает, и двести клиентов контакт-центра получают сброс звонка. Бизнес теряет деньги, а интегратор разводит руками, ссылаясь на «проблемы инфраструктуры».
Заказчики приходят с жестким запросом: сколько железа под голосовой стек on-prem для контакт-центра на 50 линий: спецификация, потоков на GPU, VRAM и TCO за 3 года? Формулировка длинная, но суть простая. 152-ФЗ, требования ФСТЭК и безопасность не оставляют выбора — голос клиентов нельзя отдавать в публичные облачные API. Нужно строить edge-контур. При дефиците и космических ценах на чипы Nvidia закупать железо «на глаз» — это финансовое самоубийство.
Нагрузка, OOM и спецификация on-prem железа
50 линий в контакт-центре — это не 50 звонков в день. Это 50 одновременных RTP-сессий в самую жаркую секунду пика, рассчитанных по формуле Эрланга (Erlang B). Транк на 50 линий означает, что ваш AI-контур должен тянуть строго 50 стримов ASR (распознавание речи) и 50 стримов TTS (синтез) одновременно. Фоном сюда ложится диаризация, анализ эмоций и антиспуфинг, чтобы робота не ломали записанными голосами.
Вся эта математика упирается в память и латентность. Для ASR (обычно это дистиллированный Conformer или Whisper-подобные архитектуры) нужен потоковый инференс. Вы не ждете конца фразы, вы кормите сеть аудиочанками по 100-200 миллисекунд. Латентность первого чанка (Time to First Byte, TTFB) обязана быть ниже 300 мс. Выше — и робот звучит как заика с задержкой развития. Чтобы держать TTFB и не сжигать ресурсы впустую, применяется агрессивный continuous batching.
Сколько потоков ложится на одну карту? Возьмем Nvidia L4 на 24GB VRAM — идеальную рабочую лошадку для edge-вычислений. При правильном батчинге одна L4 способна тянуть 60-70 стримов ASR с RTF (Real-Time Factor) ниже 0.1. Но у нас есть еще TTS. Современный синтез на диффузионках или flow-based моделях — это абсолютный жрец VRAM. Если свалить ASR и TTS на один кристалл, контекст-свитчинг убьет RTF, а внезапный всплеск длины генерации сожрет память. Произойдет OOM. CPU и NPU здесь не спасут: процессор хорош для легковесного VAD (Voice Activity Detection) или маршрутизации SIP, но TTS на процессоре даст TTFB в 2-3 секунды. GPU обязателен.
Отсюда выводим железо под конкретные профили нагрузки. Без маркетинговых запасов в 5x.
| Линии | Конфигурация GPU (ASR + TTS) | Платформа (CPU, RAM, Сеть) | Архитектура и запас |
|---|---|---|---|
| 10 | 1× Nvidia L4 (24GB) или RTX 4090 | 16 ядер, 64GB RAM, 10G NIC | Тестовый стенд/микро-КЦ. Без аппаратного HA. |
| 50 | 2× Nvidia L40S (по 48GB) или 4× L4 | 32 ядра, 256GB RAM, 10G NIC | Active-Active на 2 физических нодах. Запас 30% по VRAM. |
| 200 | 8× Nvidia L40S (плотное шасси) | 64 ядра, 512GB RAM, 2× 25G NIC | N+1 избыточность. Изоляция worker-ов. |
Отказоустойчивость и реальный TCO за 3 года
Железо падает. Всегда. Это физика. Если карточка ловит Xid error, ядро паникует. Если монолитный вендорский софт держит SIP-сессию и ASR в одном процессе, при падении ноды звонок обрывается.
Наш подход в Morana Labs принципиально иной. Мы аппаратно и программно разделяем SIP-стейт и ML-инференс. Голосовой шлюз (FreeSWITCH или Asterisk) терминирует звонок и живет отдельно. ML-ноды с тяжелыми сетями — это stateless-мясорубки за быстрым gRPC-балансировщиком. Умерла GPU? Балансировщик мгновенно откидывает сбойную ноду (graceful drain), следующий аудиочанк летит на резервную карту, а контекст диалога подтягивается из Redis-кластера за пару миллисекунд. Клиент на линии слышит крохотную паузу в полсекунды, после чего робот продолжает фразу. Никаких обрывов.
Теперь считаем деньги. Облако против on-prem. SaaS-провайдеры продают синтез и распознавание в среднем по 2.5 рубля за минуту. Контакт-центр на 50 линий при 60% утилизации в 8-часовую смену генерирует около 316 000 минут в месяц. Это почти 800 000 рублей ежемесячных выплат в облако. За 3 года набегает 28.8 миллионов рублей.
Из чего состоит трехлетний TCO собственного контура:
- CAPEX (Железо): Серверы, коммутаторы, две карты L40S обойдутся примерно в 4-6 миллионов рублей на старте.
- OPEX (Инфраструктура): Место в ЦОД, питание (учитывайте киловатты на видеокарты), охлаждение.
- OPEX (Поддержка и софт): SLA3 от вендора инференс-платформы, фиксы багов.
- Скрытый OPEX (ML-тюнинг): Дообучение акустических моделей под ваш домен. Робот обязан понимать ваши артикулы, фамилии и сленг, иначе конверсия звонков рухнет.
Даже с учетом зарплат инженеров и поддержки, on-prem сборка на 50 линий окупается на 10-12 месяце. Дальше железо работает в плюс. Вы платите только за электричество и лицензии на движок.
Считать VRAM и пики нужно до объявления тендера, а не после падения продакшена. Расчёт и сборка голосового edge/on-prem стека от Morana, включая подбор железа и бенчмарки под ваш профиль, доступны здесь: /calculator. Остальное — суровая инженерия.