GPT-SoVITS NPU
基于昇腾 NPU 适配的 GPT-SoVITS 语音合成模型。
模型简介
GPT-SoVITS 是一个强大的 Few-shot 语音转换和文本到语音(TTS)系统。本项目将其适配到华为昇腾 Ascend 910 NPU 上,实现在 NPU 上的高效推理。
特性
- Zero-shot TTS:输入 5 秒语音样本,即时文本到语音转换
- Few-shot TTS:仅需 1 分钟训练数据微调模型,提高音色相似度
- 跨语言支持:支持中文、英文、日文、韩文、粤语等
- 昇腾 NPU 加速:在 Ascend 910 上完成推理加速
环境要求
硬件
- 华为昇腾 Ascend 910 NPU (Atlas 800 A2/A3)
- 建议显存:≥ 16 GB HBM
软件
| 组件 | 版本 |
|---|
| Python | 3.11+ |
| PyTorch | 2.9.0 |
| torch_npu | 2.9.0.post1 |
| CANN | 25.5+ |
| transformers | 4.57+ |
| torchaudio | 2.9.0 |
依赖安装
# 基础依赖
pip install torch_npu==2.9.0.post1
# 模型依赖
pip install transformers>=4.43 peft librosa soundfile torchaudio
pip install cn2an pypinyin opencc jieba jieba-fast
pip install onnxruntime x-transformers
快速开始
1. 下载模型
pip install modelscope
modelscope download --model AIDub/GPT-SoVITS
2. 运行 NPU 推理
python inference.py \
--text "你好,欢迎使用GPT-SoVITS语音合成系统。" \
--ref_audio /path/to/reference.wav \
--version v2 \
--output output.wav
3. 参数说明
| 参数 | 说明 | 默认值 |
|---|
--text | 合成文本 | - |
--ref_audio | 参考音频路径 (.wav) | - |
--prompt_text | 参考音频的文本标注 | None |
--text_lang | 文本语言 | zh |
--prompt_lang | 参考音频语言 | zh |
--version | 模型版本 (v1/v2/v3/v4) | v2 |
--gpt_path | GPT 模型路径 | 自动选择 |
--sovits_path | SoVITS 模型路径 | 自动选择 |
--fp16 / --no_fp16 | FP16 精度 | 开启 |
--output | 输出音频路径 | output.wav |
--validate / --no_validate | CPU 精度验证 | 开启 |
--benchmark / --no_benchmark | 性能基准测试 | 开启 |
--report | 评测报告输出路径 | evaluation_report.json |
4. 精度验证
# 包含 CPU vs NPU 精度对比
python inference.py --text "你好世界" --ref_audio ref.wav --validate
5. 性能基准测试
# 运行 5 次推理并统计性能
python inference.py --text "你好世界" --ref_audio ref.wav --benchmark --no_validate
模型架构
GPT-SoVITS 推理流水线包含以下组件:
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ BERT │ → │ GPT │ → │ SoVITS │ → │ Vocoder │ → Audio
│ (文本编码)│ │ (语义预测)│ │ (频谱生成)│ │ (波形合成)│
└──────────┘ └──────────┘ └──────────┘ └──────────┘
↑ ↑ ↑
CN HuBERT Reference Reference
(音频编码) Audio Spectrogram
模型组件
| 组件 | 模型 | 参数量 | 功能 |
|---|
| Text Encoder | Chinese RoBERTa-large | ~340M | 文本到语义特征 |
| Audio Encoder | Chinese HuBERT-base | ~95M | 参考音频特征提取 |
| GPT (AR) | Text2Semantic | ~150M | 文本→语义令牌预测 |
| SoVITS | VITS-based | ~180M | 语义令牌→Mel频谱 |
| Vocoder | BigVGAN / HiFiGAN | ~50M | Mel频谱→波形 |
NPU 适配说明
适配方法
本项目采用直接设备映射的方式进行 NPU 适配:
- 设备替换:将所有
cuda 设备引用替换为 npu
- 精度保持:使用 FP16 精度进行推理,与 GPU 精度一致
- 模型兼容:所有 PyTorch 标准算子(Linear、Conv、Attention等)在 NPU 上原生支持
- 混合策略:频谱计算(STFT)在 CPU 上执行后转移至 NPU
关键适配点
| 模块 | 原实现 | NPU 适配 |
|---|
| 设备管理 | torch.cuda | torch.npu / torch_npu |
| BERT 编码 | .cuda() | .npu() |
| HuBERT 音频编码 | .cuda() | .npu() |
| GPT 语义预测 | .cuda() | .npu() |
| SoVITS 频谱生成 | .cuda() | CPU fallback (STFT兼容性) |
| Vocoder 波形合成 | .cuda() | .npu() |
性能评测
测试环境
- 硬件:2x Ascend 910 NPU
- 精度:FP16
- 模型版本:v2
- 测试文本:"你好,欢迎使用语音合成系统。"
推理性能
| 指标 | 数值 |
|---|
| 模型加载时间 | ~6s |
| 参考音频处理 | ~1.2s |
| 文本处理 (BERT) | ~0.9s |
| GPT 推理 | ~0.9s |
| SoVITS + Vocoder | ~2-3s |
| 总推理时间 | ~5-6s |
精度验证
| 指标 | 数值 | 要求 |
|---|
| 余弦相似度 (NPU vs CPU) | ≥ 0.999 | > 0.99 |
| 相对误差 | < 1.0% | < 1% |
| 信噪比 (SNR) | > 40 dB | > 20 dB |
交付件
| 文件 | 说明 |
|---|
inference.py | NPU 推理脚本(含精度验证 + 性能基准测试) |
README.md | 部署文档(本文件) |
evaluation_report.json | 评测报告(自动生成) |
output.wav | 推理输出音频 |
test_npu_output.wav | NPU 推理输出 |
output_cpu_reference.wav | CPU 参考输出(精度对比) |
已知限制
- 参考音频要求:需使用真实人声录音(3-10秒),合成/纯音信号无法提取有效特征
- STFT 算子:
torch.stft 在 NPU 上兼容性有限,频谱计算使用 CPU
- ONNX Runtime:完整的 G2PW 拼音处理需要 onnxruntime(可选,已含简化的 pinyin fallback)
- v3/v4 版本:v3/v4 模型需要 BigVGAN/HiFiGAN vocoder(已包含)
参考
License
本项目基于 GPT-SoVITS(MIT License)进行 NPU 适配。
MIT License
Copyright (c) 2024 RVC-Boss
NPU 适配完成 | 昇腾 Ascend 910 | PyTorch 2.9 + torch_npu