🚀 FastSparkTTS - 基于SparkTTS模型,提供高质量中文语音合成与声音克隆服务。通过简单易用的Web界面,让您轻松创建自然逼真的人声,满足各种场景需求。
- 🚀 多种后端加速: 支持
vllm
、sglang
、llama cpp
多种加速策略 - 🎯 高并发: 采用动态批处理,极大提高并发
- 🎛️ 全参数控制: 音调、语速、音色温度等全方位可调
- 📱 轻量部署: 最小依赖,基于Flask和fastapi快速启动
- 🎨 简洁界面: 标准的现代化UI
- Python 3.10+
- Flask 2.0+
- fastapi
- vllm 或 sglang 或 llama-cpp
pip install -r requirements.txt
推理引擎安装 (按需求安装一个即可,若是使用torch推理,则可以跳过)
-
vLLM
vllm版本需要大于
0.7.2
pip install vllm
-
llama-cpp
pip install llama-cpp-python
将LLM权重转为gguf格式,然后文件名保存为
model.gguf
,放至LLM
路径。可以参考下面方式转换权重,如需量化可以自行配置参数。git clone https://github.com/ggml-org/llama.cpp.git cd llama.cpp python convert_hf_to_gguf.py Spark-TTS-0.5B/LLM --outfile Spark-TTS-0.5B/LLM/model.gguf
-
sglang
pip install sglang
权重下载地址:huggingface、modelscope
- 克隆项目仓库
git clone https://github.com/HuiResearch/Fast-Spark-TTS.git
cd Fast-Spark-TTS
- 启动SparkTTS API服务
engine
可根据自己的环境,选择对应的推理引擎。目前支持torch
、vllm
、sglang
、llama-cpp
。
python server.py \
--model_path Spark-TTS-0.5B \
--engine vllm \
--llm_device cuda \
--audio_device cuda \
--vocoder_device cuda \
--wav2vec_attn_implementation sdpa \
--max_length 32768 \
--llm_gpu_memory_utilization 0.6 \
--host 0.0.0.0 \
--port 8000
- 启动Web界面
python frontend.py
- 在浏览器中访问
http://localhost:8001
- 切换到「语音合成」标签页
- 输入需要转换为语音的文本
- 调整性别、音调、语速等参数
- 点击「生成语音」按钮
- 等待生成完成后即可播放或下载
- 切换到「声音克隆」标签页
- 输入目标文本
- 上传参考音频
- 输入参考音频对应的文本
- 调整参数
- 点击「克隆声音」按钮
- 等待克隆完成后即可播放或下载
- 切换到「角色克隆」标签页
- 输入目标文本
- 选择自己喜欢的角色
- 调整参数
- 点击「角色克隆」按钮
- 等待克隆完成后即可播放或下载
显卡:A800
使用prompt_audio.wav测试克隆速度,总共循环推理五次,计算平均推理时间 (s)。
测试代码可参考speed_test.py
使用vllm后,主要耗时不在llm,而在audio tokenizer和vocoder,应该可以使用onnx进一步优化。
engine | device | Avg Time | Avg Time (warm up) |
---|---|---|---|
Official | CPU | 27.20 | 27.30 |
Official | GPU | 5.95 | 4.97 |
llama-cpp | CPU | 11.32 | 11.09 |
vllm | GPU | 1.95 | 1.22 |
sglang | GPU | 3.41 | 0.76 |
使用方法参考 inference.py
接口部署,循环推理建议使用async异步方法。
请注意:vllm,sglang等后端第一次推理会比较耗时,后面速度就会正常。如果评测,建议先使用第一条数据warmup。
本项目基于 Spark-TTS 构建,并采用与 SparkTTS 相同的开源许可协议进行分发。详情请参阅原始 SparkTTS 许可协议。