GPTSoVITS 的升级版 GSV-TTS-Lite 开源
中二病晚期の陌陌君
编辑于 2026年03月14日 15:38
AI研究所

GSV-TTS-Lite是一个文本转语音项目,是我基于花佬的GPTSoVITS项目开发出来的深度优化版本,提供模型管理接口、参考音频缓存接口,有infer、infer_stream、infer_batched、infer_vc四种推理模式,分别对应普通推理、流式推理、批量推理、音色迁移(变声)。目前已发布到PyPl上,可以pip一键安装。对于小白还有WebUI整合包提供,增加了音频增强、历史音频、参考音频预设的保存和加载、变声功能,还支持多说话人、静音标签控制。目前支持中英日三语混合,支持v2pro、v2proplus模型。

GitHub项目:chinokikiss/GSV-TTS-Lite

首页还放了Q版辉夜姬的gif动图,真的很可爱,喜欢的点个star~

GSV-TTS-Lite分别在实时率RTF和首包延迟TTFT上实现了高度性能的提升。在3050 laptop最佳性能测试环境下,RTF可以达到0.1,在并行推理加速下,RTF甚至能冲到0.05。TTFT可以达到100ms~200ms,T2S解码速度可以达到369 tokens/s,对比原版实现了4倍的加速。

其实就是用了CUDAGraph捕获静态计算图,避免调用内核的消耗,再通过分桶适应不同长度的输入。

由于在自回归解码过程中无法预知最终生成序列的长度,传统的静态分桶难以适用。为此,我采用一种自适应的 KV Cache 管理策略:预先为若干长度捕获对应的计算图,并分配一组嵌套式的 KV Cache 缓冲区——每个较长的缓冲区包含较短缓冲区作为其前缀。所有序列共享同一块内存的起始区域,因此当当前序列长度超过当前缓冲区上限时,可无缝切换至更大的缓冲区,而无需拷贝已有的 KV 状态。这样就实现了类似“自适应分桶”的效果。

GSV-TTS-Lite还支持了FlashAttention2,缓解了KV Cache带来的显存压力,还得到了进一步加速。

对于GPT的批量推理,则是采用了Continuous Batching,确保在自回归阶段,每个batch在每步上的计算都是有效的。

在 SoVITS 的批量推理中,我仍采用“切分级并行”策略。尽管 TextEncoder 的计算复杂度与输入序列长度呈平方关系,但由于该策略无需对齐序列长度、避免了 padding,因此计算效率更高,且显著减少了不必要的显存占用。在相同显存限制下,“切分级并行”能够支持更大的 batch size,从而提升吞吐量。

此外,该方案同样支持同一批次内使用不同的参考音频:只需将全局嵌入(global embedding)组织为形状 [B, D, T] ,并在时间维度 T 上为每个切片分配对应参考音频的 embedding 即可。这既保留了批处理的并行优势,又保证了音频生成的个性化。

对于中文bert的提取,同样也改进成批量处理,跟上面一样,也是切分级并行。

首包延迟的优化则用到了token级别的流式输出,不是分句式流式输出。主要参考了官方的流式输出方案,不同的地方是,SoVITS的输入是增量式的(确保上下文信息和字幕时间戳质量),还有就是没采用mute token在静音处做切分(感觉效果有点微乎其微?)

然后就是完全重构了GPT模型,不再依赖module,代码更简洁了,底层算子也尽可能的精简了,显存访问效率也尽可能的优化了。

GSV-TTS-Lite 还实现了音色与风格的解耦(或者说语义与风格的解耦),其实就是分开了GPT和SoVITS的参考音频,实现单独控制音色和风格,可以解决日->中出现的大佐音问题(解决方案为:“音色”参考日配,“风格”参考中配),音色也能不被情感所影响了。但是,效果有限,比如在语气上可能就不像原角色了,而且音色并不是不变,有时候也得随着情感改变而改变。

GSV-TTS-Lite 还能返回字幕时间戳。infer、infer_stream、infer_batched、infer_vc四种推理模式都支持字幕时间戳返回。非以往的句级对齐,我实现的是字级对齐。本质上就是利用了mrte的交叉注意力模块(音频作为query,文本作为key和value),提取形状为[B, H, T, N]的注意力分数矩阵。该矩阵量化了4个注意力头(H)下,音频(T)与文本(N)的对齐概率分布。常规做法是先对4个注意力头求均,然后用viterbi动态规划算法对齐,但是这种方案并不稳定,因为4个注意力头中,只有第1个注意力头呈现清晰的对齐特征,其他3个注意力头都掺杂了许多噪音,直接求均然后对齐会严重干扰对齐精度,但又不能直接舍弃这3个注意力头(因为其他注意力头也有第1个没有的对齐信息),通过深入分析噪音,我意外发现了null key的机制,即当模型无需执行特定对齐的时候,注意力会偏向于去关注null key(这里的null key其实就是音素序列的最后一个,而且还必须是不发音的特殊音素(如标点符号))而那些噪音其实大部分都是null key,那么就很简单了,只需对4个注意力头上不关注null key的概率分布求均即可,这样就可以有效过滤噪音并融合多头的有效信息,然后再viterbi动态规划一下就能实现音频到文本的精准对齐了。

然后就是 少样本(few-shot) 音色迁移(VC)功能,其实就是变声功能。提供一个源音频和对应文本内容,再来一个目标音色音频(无需训练),就可以将目标音色迁移至源音频上,但在转换质量上,相较于 RVC、SVC 等专门的变声模型还是差了些。本质上就是HuBERT提取了参考音频的语义内容,然后经VQ-VAE编码再重构,然后进TextEncoder和文本特征、目标音色特征进行融合,构建声学分布,再经Flow、GAN生成最终的波形音频。

其实我还想着重新训练一个新模型的,比如引入VITS2、GPT位置编码换成RoPE,GPT规范化层位置改成前置归一化,引入情感embedding等等,但最近还是想放一放了,至于为什么这么用心的项目不发视频呢?本来是想这么做的,但事实上在录素材的时候,我就发现GSV-TTS-Lite并没有太大的亮点,它依旧存在GPTSoVITS原来的部分缺点,这些缺点不改模型就无法解决,所以还是不发残次品了,等几个月后再战吧,这次就当做一次学习。