当前位置: 首页 > news >正文

记录一次本地语音克隆系统的部署过程——VoxFlash-TTS

最近在做一个实时语音交互的项目,需要一个低延迟的 TTS 方案。试了几个方案之后,发现推理速度是最大的瓶颈——云端 API 的往返延迟基本在 200ms 以上,对实时对话体验影响很明显。

后来找到了 VoxFlash-TTS,记录一下部署过程和使用体验。


为什么推理慢

在聊部署之前,先理解一下问题根源。

现有大多数基于扩散模型的 TTS 系统,推理复杂度和音频序列长度强相关。常见方案的内部表示帧率大概是这样:

方案帧率生成 10 秒音频的序列长度
EnCodec ~75 fps ~750
语音语言模型 semantic token ~50 fps ~500
Stable Audio ~21.5 fps ~215
VoxFlash-TTS 9 fps 90

Transformer 自注意力的复杂度是 O(n²),序列越长计算量越大,而且是超线性增长。VoxFlash 把潜空间帧率压到 9Hz,生成同样长度的音频,计算量大幅下降。


系统架构

整个 pipeline 由四个 ONNX 文件组成:

 
main_model.onnx    697 MB    音素编码器 + 扩散模型 + 说话人编码器
vae_decode.onnx    51.5 MB   VAE 解码器
vae_encode.onnx    46.1 MB   VAE 编码器
vocoder.onnx       59.7 MB   声码器
──────────────────────────────────────
合计               ~854 MB

推理流程大致是:

 
文本输入→ 音素编码(ConvNeXtV2)→ 粗粒度对齐→ 潜空间扩散去噪(NFE=16)← 注入说话人 embedding→ VAE 解码→ 声码器还原波形→ 音频输出

音素编码器用的是 ConvNeXtV2,相比 Transformer Encoder 参数量更小,硬件利用率更好。对齐模块用显式粗粒度对齐而非 Cross-Attention,复杂度更低。

说话人编码器支持零样本克隆——提供一段参考音频,提取 speaker embedding 注入扩散过程,无需对目标说话人做任何微调。


环境要求

  • NVIDIA GPU,CUDA ≥ 12.3.2
  • Docker

没有其他依赖,不需要配 Python 环境。


部署步骤

拉取镜像

 
bash
docker pull berlinisaiah/ttsv2:v1

启动服务

后台运行(生产环境):

 
bash
docker container run -d --gpus all \--mount type=bind,source=$(pwd)/resources,target=/app/resources \-p 8000:8000 berlinisaiah/ttsv2:v1

前台运行(调试):

 
bash
docker container run -it --gpus all \--mount type=bind,source=$(pwd)/resources,target=/app/resources \-p 8000:8000 berlinisaiah/ttsv2:v1

访问 WebUI

 
http://127.0.0.1:8000/demo.html

浏览器打开即可使用,不需要额外配置。


使用方式

基本 TTS

在 WebUI 的文本框输入想要合成的内容,点击生成,等待音频输出。支持中文和英文。

零样本语音克隆

  1. 准备一段参考音频(建议 3 秒以上,音质清晰)
  2. 在 WebUI 上传参考音频
  3. 输入想要合成的文字
  4. 生成音频

输出音色会向参考音频的说话人靠拢。

跨语言克隆

用中文参考音频生成英文语音,或反过来,同样支持。模型对音色特征和语言特征做了一定程度的解耦。


实际体验

在消费级显卡上,推理延迟明显低于同类方案。对于实时对话场景,首包延迟是关键指标,这方面表现不错。

音质方面,9Hz 的极端压缩比会带来一定损失,和质量优先的系统(比如 Seed-TTS)相比有差距,但对大多数实用场景够用。

跨语言克隆效果整体可以,口音自然度还有提升空间。

参考音频短于 3 秒时,音色相似度会下降,建议尽量用稍长的参考音频。


适合的场景

  • 实时语音交互,对延迟敏感
  • 需要本地部署,数据不出机器
  • 消费级显卡,资源有限
  • 需要中英文双语合成

不太适合的场景:

  • 对音质要求极高
  • 需要丰富的情感表达控制
  • 中英文以外的语言

小结

部署过程比较简单,两条 Docker 命令搞定,没有遇到环境配置问题。推理速度是这个方案最大的亮点,在实时场景下优势明显。音质上做了速度和质量的取舍,根据实际需求判断是否合适。

项目地址和 Demo 在文末,有兴趣可以自己跑一下试试。


相关链接

  • Demo 页面:voxflash.github.io
  • GitHub:github.com/VoxFlash/VoxFlashTTS
  • Hugging Face:huggingface.co/VoxFlashTTS/VoxFlashTTS