Как поднять быстрый инференс для голосовых и мультимодальных моделей с SGLang-Omni

16 авг 2026
826
343
6
4 недели
logo

Каждый, кто пробовал разворачивать в продакшене современные голосовые или мультимодальные модели, знает эту боль. Текстовые LLM обслуживать уже научились: берешь vLLM или SGLang, настраиваешь батчинг и горя не знаешь. Но как только в пайплайне появляется звук, всё ломается.

Голосовая модель — это не просто один трансформер. Сначала идет аудиоэнкодер, затем авторегрессионный блок («думатель»), потом модуль генерации речи (talker), а на выходе еще и вокодер, собирающий сырые аудиотокены в чистые 48 кГц. У каждого этапа свой профиль нагрузки, свои требования к памяти и задержкам. Пытаться засунуть это в стандартный текстовый движок инференса — верный способ получить адские задержки и нестабильный FPS генерации звука.

Команда проекта SGLang выкатила специализированное решение под эту задачу — SGLang-Omni.

Что такое SGLang-Omni

Это runtime для многостадийного инференса omni-, speech- и TTS-моделей. Проект берет на себя самую неприятную часть: управление сложным конвейером вычислений, передачу данных между стадиями и раздачу готового API, совместимого со спецификацией OpenAI.

Основная фишка кроется в концепции многостадийного исполнения (multi-stage runtime). Вместо попытки упаковать весь пайплайн в монолитный процесс, SGLang-Omni разделяет генерацию на изолированные фазы:

Реклама
  • предобработка входящего потока;
  • работа энкодеров;
  • авторегрессионный движок на базе ядра SGLang;
  • декодеры и вокодеры, собирающие итоговый звук;
  • агрегаторы результатов.

Каждый шаг обслуживается собственным планировщиком. Например, генерация текста или управляющих токенов крутится на оптимизированном шедулере SGLang с поддержкой KV-кэша, а вокодер работает в легковесном потоковом цикле, моментально отдавая аудиочанки клиенту.

Передача данных без лишних накладных расходов

Когда модель разбита на несколько звеньев, узким местом часто становится передача тензоров между видеокартами или процессами. Если гонять промежуточные данные через обычный CPU RAM, задержка для реалтайм-диалога станет неприемлемой.

В SGLang-Omni транспортный уровень вынесен отдельно. Управляющий слой (control plane) синхронизирует запросы, а данные (data plane) передаются через оптимизированные бекенды: shared memory для локальных процессов, NCCL, NIXL и Mooncake для распределенной работы. В итоге накладные расходы на стыках между стадиями минимальны.

Какие модели поддерживаются из коробки

Набор доступных моделей впечатляет, особенно с учетом того, что репозиторий активно дорабатывается. Внутри уже есть готовые рецепты (cookbooks) под популярные архитектуры:

  1. Omni-чат: Qwen3-Omni и Ming-Omni. Принимают мультимодальный вход (текст, аудио), отдают текст или потоковую речь.
  2. Синтез речи (TTS): Higgs Audio v3, MOSS-TTS (включая версию Local Transformer v1.5 с нативным 48 kHz аудио), Fish Speech S2-Pro, Qwen3-TTS, Voxtral TTS, dots.tts и ZONOS2.
  3. Генерация музыки: MiniMax Music 3, способная собирать стереотрек 32 кГц по тексту и описанию стиля.
  4. Распознавание и диаризация речи (ASR): Qwen3-ASR, Fun-ASR, ARK-ASR и MOSS-Transcribe-Diarize, который умеет расставлять таймкоды и метки говорящих в формате verbose_json.

Все это добро поднимается с привычными эндпоинтами вроде /v1/audio/speech, /v1/audio/transcriptions и /v1/chat/completions. Если вы уже написали клиент под API OpenAI, переключаться на собственный бекенд будет максимально просто.

Быстрый старт и запуск

Пакет доступен в PyPI, ставить удобнее всего через uv или обычный pip:

uv pip install "sglang-omni==0.1.2"

Для продакшена у проекта есть собственный роутер (SGLang-Omni Router). Он берет на себя проверку жизнеспособности воркеров (readiness/health checks), балансировку нагрузки между несколькими GPU-нодами и маршрутизацию запросов с учетом возможностей конкретных инстансов.

Что касается железа, основным бекендом остается NVIDIA CUDA. Но разработчики добавили экспериментальную поддержку Intel GPU (XPU) через PyTorch XPU. На картах Intel Arc уже заводятся Qwen3-ASR, Qwen3-TTS и Qwen3-Omni (с тензорным параллелизмом для блока рассуждений).

Кому проект пригодится прямо сейчас

Если вы собираете голосового ассистента, реалтайм-переводчика, сервис транскрибации звонков с разделением спикеров или платформу для озвучки контента, собирать свой велосипед из FastAPI и сырых скриптов больше не нужно.

Проект пока молодой, в репозитории висит несколько сотен открытых issue, а документация местами отсылает к исходникам. Но за ним стоит сильная команда LMSYS и экосистема SGLang, поэтому архитектурно здесь все сделано добротно. Попробовать точно стоит, особенно если вам важен минимальный time-to-first-audio-token в потоковых диалогах.

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.