如何让我们的文本到语音模型在50毫秒内响应
总结:我们的Qwen3-TTS 1.7B CustomVoice实现达到了每秒10次请求(RPS)和低于50毫秒的p95第一音频响应时间(TTFA),同时在单个NVIDIA H100 SXM上保持实时播放。我们对比了五种实现:我们自己的,vLLM-Omni,SGLang-Omni △,VoxServe和M*,在泊松开环流量下进行测试。在对每种实现进行低延迟流媒体调整后,只有我们的方法实现了低于50毫秒的p95 TTFA。我们在10 RPS下保持低于50毫秒的p95 TTFA,并在20 RPS下将其保持在100毫秒以下。我们的系统在10 RPS下大约每秒生成630个字符。每小时$4.29的1× H100 SXM实例,这折合为每百万字符约2美元的全利用率。进行比较时,ElevenLabs V3的价格为100美元/百万字符,而Cartesia Sonic 3.5为49美元/百万字符,且TTFA更高。我们开源了实现和基准测试。以下是我们的方法论。定义“实时”TTS:我们先讨论一下实时TTS服务器需要达成的目标。我们认为这是一个四部分问题:低可听TTFA:从请求调度到第一个可听样本的时间必须很短。零底层消耗:一旦播放开始,客户端必须不会耗尽缓冲的音频。容量:1和2必须随着RPS的增加而保持。无畸形输出:语音必须是可理解的。我们选择Qwen3-TTS CustomVoice 1.7B,因为它是最流行的TTS模型之一,具有宽松的许可证。基于上述定义,我们的目标是在单个NVIDIA H100 SXM上实现零底层消耗的低p95可听TTFA,同时保持高RPS。所有基准测试在泊松开环流量下运行五分钟,以近似真实的工作负载,遵循Fireworks AI的LLM基准。每个引擎在一个HTTP请求中接收完整文本,而音频输出则持续流式传输。我们检测可听TTFA,从接收到的PCM重建播放,并使用Deepgram STT评价完成的音频。其他引擎的表现如何?下表展示了每个引擎在1 RPS下的上游/默认结果。在这个运行中,我们只为兼容性应用了更改。引擎 p95可听TTFA p95前导静音 底层请求 vLLM-Omni 277.883毫秒 90毫秒 100% SGLang-Omni △ 1,140.69毫秒 80毫秒 0% VoxServe 315.064毫秒 30毫秒 0% M* 1,159.956毫秒 90毫秒 0% 这些默认设置有很大的提升空间。我们为每个服务引擎调整其延迟、连续性、质量和容量要求。1. 移除前导静音:模型返回的第一个PCM可以包含数十毫秒的静音,出现在第一个持续声音之前。这种间隔使得可听TTFA延后,所以我们添加了动态修剪。它通过短时RMS窗口检测持续语音,去除开始前的样本,正常流式传输其余音频。这个改动将TTFA提升了约80毫秒,但并没有加快模型推断本身的速度。2. 调整帧累积:我们还调整了在解码和释放音频块之前收集的编解码器帧数量。较小的初始块可以减小TTFA,但提供的播放余地较少,并且创建了更频繁的解码工作。较大的块更易于批处理,使连续播放更安全,但会延迟第一个可听输出。因此,有用的配置开始时为小块,之后在输出时增大块的大小。具体的调节参数因引擎而异:vLLM-Omni暴露了如codec_chunk_frames和codec_chunk_ramp的设置;其他引擎也提供等效的块或步幅控制。我们会在这些值上反复迭代,以找到最佳配置:低p95 TTFA、零底层消耗和随着负载增加表现稳定。调整现有服务引擎后的性能:以下表展示了每个引擎在经过前导静音和帧累积调整后的选定无底层消耗配置。引擎 p95 TTFA (1 RPS) p95 TTFA (6 RPS) vLLM-Omni 56.815毫秒 93.451毫秒 SGLang-Omni △ 120.879毫秒 273.700毫秒 VoxServe 49.3毫秒 363.2毫秒 M* 104.035毫秒 179.501毫秒 VoxServe在1 RPS下达到了低于50毫秒的p95 TTFA,而其他三个引擎则没有。到6 RPS时,每个引擎的p95 TTFA都在大约100毫秒或更高。如何优化Qwen3-TTS?首先我们需要理解Qwen3-TTS架构。它是一个三部分模型,执行分层多代码本生成。说话者为每个音频帧预测第一个代码本令牌,代码预测器生成剩余的15个代码本令牌,而因果编解码器将代码本令牌转换为波形样本。每个模块都有自己的计算配置、批处理行为和延迟要求。与其独立优化每个模块,我们关注一个更广泛的问题:服务系统如何协调这些异构任务?1. 将三个模块统一调度:大多数Qwen3-TTS服务实现分为两个阶段:说话者和代码预测器一起运行,而编解码器单独运行。这种分离使得令牌生成和波形解码能够在请求之间重叠。我们进一步迈出了一步。我们将说话者、代码预测器和编解码器作为三个独立的流程,并在一个调度器下管理它们。
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡