Skip to content

Repository files navigation

IndexTTS Platform

面向实时语音交互的 IndexTTS 流式推理优化与实验平台。

基于 IndexTTS、vLLM 和 vLLM-Omni,在不重新训练模型的前提下,探索如何更早返回首段音频、减少长文本重复解码,并管理并发请求的流式状态。包含 IndexTTS 1.5、2、2.5 三条推理路径的源码、统一服务入口、基准工具与回归测试。

算法实现 · 性能记录 · 部署指南 · 测试记录 · 上游与许可

核心工作

路径 本项目的扩展 适用场景与边界
IndexTTS 1.5 通用分句前端、逐句 PCM 输出、统一服务与测量接口 每句完整解码;作为句段流式参考实现
IndexTTS 2 声学 Token 流式对接、首块低步数 CFM、说话人条件缓存、历史 Mel 复用、窗口化 BigVGAN 核心增量解码实验;减少前缀重复计算
IndexTTS 2.5 将增量窗口策略接入 vLLM-Omni 两阶段管线;请求级缓存状态、首块/后续块步数隔离、PCM 边界处理 研究并发调度下的状态正确性与延迟取舍
平台工具 独立环境与配置管理、进程身份校验、流式接口、并发基准、配置指纹、源码发行校验 统一三版本的部署和实验流程

模型架构、预训练权重、vLLM 执行引擎与 vLLM-Omni 基础调度来自上游。本项目的贡献集中在流式推理路径、解码策略和工程验证;1.5 的贡献主要是集成,2 和 2.5 包含增量解码改造。详细来源和改动范围见 THIRD_PARTY.mdprovenance/

为什么做这些优化

整段音频合成完成再返回,会让用户等待较久。直接把每次增长的声学 Token 前缀重新解码,又会重复计算已经输出的音频。

这里将“何时输出”与“每轮计算多少”分别处理:Token 达到门槛后开始解码;首块使用较少的 CFM 步数;后续块复用历史 Mel,只重新生成边界区域和新增区域;声码器使用局部窗口,并暂扣不稳定尾部。

flowchart LR
    T[文本与参考音频] --> G[GPT 声学 Token 流]
    G --> C[Token 累积与分块]
    C --> F[CFM 增量 Mel 解码]
    H[历史 Mel 尾部与完整参考] --> F
    F --> H
    F --> V[窗口化 BigVGAN]
    V --> P[尾部暂扣与边界混合]
    P --> A[PCM 音频流]
Loading

上图对应 2/2.5 的优化路径。默认首块 10 步、后续 25 步;Mel 上下文 128 帧、边界重做 16 帧。2.5 对不同请求分别保存状态,并将不同步数的解码任务分组,避免新请求与持续请求共用错误的解码参数。完整参考音频条件始终保留。

这是一条近似增量推理路径,不能保证与完整解码逐样本一致。GPT、条件编码和缓存复制仍有成本,窗口化也不代表整条管线的计算或内存严格恒定。

性能快照

以下是 RTX 4090 上的历史小样本实验,不是当前发行版的 GPU 复测结果。IndexTTS2,约 130 字中文,一次预热后三次测量取中位数;各行属于不同阶段实验。

对照 指标 历史结果
整段返回 → Token 流式,并叠加缓存与首块减步 首 PCM 等待时间 4.02 s → 0.36 s
全前缀 → 增量解码,标准多句样本 实时因子 RTF 0.274 → 0.248,约降低 9.5%
全前缀 → 增量解码,长单句样本 实时因子 RTF 0.283 → 0.253,约降低 10.6%

RTF = 合成耗时 / 音频时长,越低越好。首包延迟下降不等于整段计算同比加速;首 PCM 字节也不一定是第一可听音节。原始录音和部署日志未公开,上表属于历史观察,完整条件、三版本并发对照与测量限制见性能记录

保留负结果:所有块都降到 10 步曾产生可闻伪影;缩短参考 Mel 曾引起能量漂移。因此默认仅首块减步并保留完整参考。2.5 在历史高并发配置下 RTF 超过 1,当前不宣称高并发实时保证或普遍无损。

快速开始

系统需求:Linux、NVIDIA GPU、匹配的 CUDA/驱动与 FFmpeg。三个版本分别使用对应的模型权重和 Python 环境,不会自动同时装入一张 GPU。具体依赖、辅助模型文件与参考音频准备见部署指南

无需 GPU,可先查看配置并运行管理层测试:

python3 ttsctl.py list
python3 -m unittest discover -s tests -p 'test_*.py'

安装推理环境、准备模型和有使用权的参考音频后:

cp config.example.json config.local.json
# 按部署指南修改 config.local.json 中的环境、模型和参考音频路径
export INDEX_TTS_CONFIG=config.local.json
python3 ttsctl.py doctor 2
python3 ttsctl.py start 2
python3 ttsctl.py smoke 2
python3 benchmark.py 2
python3 ttsctl.py stop 2

服务默认监听 127.0.0.1,统一入口为 POST /v1/audio/speech。1.5/2 的请求需要参考音频 data URL;smokebenchmark 从本地配置自动构造该字段。基准工具记录首包延迟、RTF、块到达间隔、失败情况与配置指纹,便于追溯实验条件。

从哪里读代码

关注点 入口
2 的窗口计划、缓存与 PCM 边界 streaming.py
2 的流式推理与增量声码器 infer_vllm_v2.py
2.5 的请求状态、步数分组与增量 S2Mel indextts2_s2mel_decoder.py
2.5 的阶段间流式载荷 stage_input_processors/indextts2.py
1.5 的句段流式适配 sentence_stream.py
三版本生命周期与实验工具 ttsctl.pyplatform_lib.pybenchmark.py

更多参数、回归测试入口和消融建议见算法与代码地图

sources/index-tts-vllm/            1.5 / 2 推理源码与流式扩展
sources/index-tts-2.5-vllm-omni/    2.5 运行时、增量改造与相关测试
sources/index-tts-2.5-native/       2.5 原生模型辅助源码
versions.json                     三版本默认配置
config.example.json               本地配置模板
provenance/                       上游版本、改动清单与源码摘要
scripts/                          资源准备、源码审计与归档
tests/                            管理层与发布工具测试
docs/                             算法、部署、性能与验证说明

2.5 保留完整 vLLM-Omni 运行时包以支持动态导入;其他模型的文件存在,不表示本项目验证过它们。源码包不包含模型权重、参考音频、生成音频或运行环境。

验证状态与后续工作

源码发行验证记录了 612 项通过的测试,覆盖流式原语、解码状态、模拟 HTTP/WebSocket 接口、块传输、平台管理与发布校验。测试分组和复现命令见验证记录

尚待补齐:空白 GPU 主机安装验证、发布版 GPU 合成复测、公开通用语料上的完整消融、系统性内容/音色/听感评测,以及长时间并发稳定性测试。1.5 发行版使用通用前端,历史前端成绩不能直接作为当前版本的性能证明。

欢迎提交可复现的问题、回归测试和对照实验。性能问题请附版本、硬件、配置、预热方式、输入长度、首包与整段指标;分享前请移除本地路径、凭据和未经授权的音频。源码打包流程见发布说明

上游与许可

感谢 IndexTTSindex-tts-vllmvLLMvLLM-Omni 提供的模型与推理基础。

新增平台工具使用 Apache-2.0。子目录及派生代码保留各自来源许可,原生模型源码和模型资源受其随附协议约束,不能将整个项目统一理解为 Apache-2.0。固定版本、第三方组件与修改声明见 THIRD_PARTY.mdNOTICE

Any modifications made to the original model in this Derivative Work are not endorsed, warranted, or guaranteed by the original right-holder of the original model, and the original right-holder disclaims all liability related to this Derivative Work.

About

Streaming inference optimizations for IndexTTS 1.5 / 2 / 2.5: incremental Mel decoding, first-chunk latency and vLLM-Omni integration.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages