На днях вышла Qwen3-TTS, но стриминг туда не завезли. Пришлось писать самому.

Ситуация интересная - В тех. репорте Qwen хвалятся "Extreme Low-Latency Streaming Generation", в репо лежат бенчмарки стриминга - а самого стриминга нет =) Разрабы переложили это на vLLM Omni, которые тоже пока не сделали online inference для Qwen3-TTS.

В этом репо стриминга нет и не будет. Его реализуют vLLM-Omni в будущем.
В этом репо стриминга нет и не будет. Его реализуют vLLM-Omni в будущем.

Поэтому я еще в день выхода сам написал native стриминг, благо архитектура позволяет

Как это работает

  • При обычном инференсе модель генерирует все токены -> декодер превращает их в аудио -> получаем wav.

  • Я добавил стриминг в классическом представлении: каждые N фреймов декодер отдаёт готовый кусок аудио наружу. Первый звук получаем через ~0.5-1 сек вместо ожидания всей фразы.

Что добавил:

stream_generate_pcm() - real-time PCM streaming

stream_generate_voice_clone() - streaming с voice cloning

На 5090 первый чанк аудио через 0.17с. вместо ожидания полных 12.58с RTF < 0.5

Форк: github.com/dffdeeq/Qwen3-TTS-streaming

Пример: examples/test_streaming.py

Бенчмарки (на 5090)

  • Обычный инференс:

  • Стриминг:

P.S. Писал для себя, но увидел, что люди интересуются, а реализации до сих пор нет, так что решил поделиться. Добавил еще доп. оптимизаций по типу torch.compile и CUDA graphs на декодер, torch.compile для CodePredictor и скорректировал проверки EOS для предотвращения синхронизации cpu, что дало ещё х3 к скорости инференса.