weixin_62994174/GPT-SoVITS-NPU
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

#+NPU GPT-SoVITS sunshine_girl - 华为昇腾NPU适配

#+NPU | GPT-SoVITS | 文本转语音 | Ascend910 | torch_npu | ModelScope | 精度偏差 < 1%

模型介绍

本仓库提供了GPT-SoVITS sunshine_girl 语音模型的昇腾NPU适配版本。

领域数值
模型名称GPT_SoVITS_sunshine_girl
任务文本转语音(TTS)
来源X-D-Lab/TTS-GPT_SoVITS-sunshine_girl
框架PyTorch 2.9.0 + torch_npu 2.9.0
硬件华为昇腾910 NPU(2卡)
精度FP32
版本v1.0.0

模型架构

GPT-SoVITS是一个两阶段零样本语音合成系统:

  1. GPT阶段(Text2Semantic):一个自回归Transformer(24层,512隐藏维度,16头)将文本+BERT特征转换为语义令牌。
  2. SoVITS阶段(Semantic2Audio):一个基于VITS的模型将语义令牌+参考音频特征转换为音频波形。
Text → BERT → [GPT Stage] → Semantic Tokens → [SoVITS Stage] → Audio Waveform
Ref Audio → CNHuBERT ──────────────────────────────────────────────┘

NPU 适配概述

适配策略

组件原始方案NPU 适配方案
设备CUDA GPU昇腾 NPU (torch_npu)
精度FP16/FP32FP32
GPT 模型Text2SemanticLightningModule通过 torch_npu 直接进行 NPU 推理
SoVITS 模型SynthesizerTrn (VITS v1)通过 torch_npu 直接进行 NPU 推理
BERT 编码器AutoModelForMaskedLM通过 torch_npu 实现 NPU 兼容
CNHuBERTCNHubert (基于 Fairseq)通过 torch_npu 实现 NPU 兼容
音频输入输出torchcodec + FFmpeglibrosa (规避 torchcodec 兼容性问题)

主要修改

  1. 设备映射:所有模型加载均通过 model.to(self.device) 进行动态设备放置,同时支持 CPU 和 NPU。
  2. 内存管理:使用 torch.npu.empty_cache() 清理 NPU 内存。
  3. 精度控制:全程采用 FP32 以实现最大程度的 NPU 兼容性(不使用 FP16)。
  4. 音频加载:使用 librosa 替代 torchaudio/torchcodec,以避免在 aarch64 架构上对 FFmpeg/torchcodec 库的依赖。

环境要求

硬件

  • 华为昇腾 910 NPU(1-2 张卡)
  • 鲲鹏 920(aarch64,40 核)
  • 64GB 及以上系统内存
  • 100GB 及以上磁盘空间

软件(已验证)

包版本说明
Python3.11.14
torch2.9.0+cpu带 NPU 后端的 CPU 版本
torch_npu2.9.0.post1+gitee7ba04昇腾 NPU 支持
torchaudio2.9.0
transformers4.56.2BERT 模型
librosa0.11.0音频文件加载
numpy1.26.4
pytorch-lightning2.6.1GPT 模型加载
soundfile0.13.1音频文件输出
modelscope1.36.3模型下载

模型文件

文件大小描述
sunshine_girl.ckpt148 MBGPT(Text2Semantic)模型
sunshine_girl.pth81 MBSoVITS(Semantic2Audio)模型
chinese-hubert-base/~400 MBCNHuBERT 预训练模型
chinese-roberta-wwm-ext-large/~1.2 GBBERT 预训练模型

快速开始

1. 环境搭建

# Install dependencies
pip install torch_npu==2.9.0.post1 torch==2.9.0 transformers librosa soundfile numpy pytorch-lightning

# Clone GPT-SoVITS
git clone https://gitee.com/mirrors/GPT-SoVITS.git gpt-sovits
cd gpt-sovits && pip install -r requirements.txt

2. 下载模型

# sunshine_girl model (GPT + SoVITS + reference audio)
modelscope download --model X-D-Lab/TTS-GPT_SoVITS-sunshine_girl \
    --local_dir models/GPT_SoVITS_sunshine_girl

# CNHuBERT
HF_ENDPOINT=https://hf-mirror.com python3 -c "
from huggingface_hub import snapshot_download
snapshot_download('TencentGameMate/chinese-hubert-base',
    local_dir='gpt-sovits/GPT_SoVITS/pretrained_models/chinese-hubert-base')
"

# BERT large
modelscope download --model damo/nlp_bert_backbone_large_std \
    --local_dir gpt-sovits/GPT_SoVITS/pretrained_models/chinese-roberta-wwm-ext-large

3. 运行推理

# CPU inference
python3 inference.py --device cpu --text "你好,今天天气真好,我们一起去散步吧。"

# NPU inference
python3 inference.py --device npu --text "你好,今天天气真好,我们一起去散步吧。"

# Both devices + accuracy comparison
python3 inference.py --device both --text "你好,今天天气真好,我们一起去散步吧。"

精度评估

方法

为避免生成式TTS模型在不同硬件后端运行时固有的自回归漂移问题,采用组件级评估方法。在相同输入条件下,对每个非随机模型组件在CPU(参考端)和NPU(目标端)上的表现进行对比。

  • 参考设备:CPU(原生PyTorch,FP32)
  • 目标设备:昇腾NPU(torch_npu,FP32)
  • 评估指标:平均绝对误差(MAE)、均方根误差(RMSE)、相对误差(%)、余弦相似度、信噪比(dB)

实测结果(2026-05-14 验证)

组件相对误差余弦相似度信噪比(dB)状态
CNHuBERT 特征提取0.0059%0.99998144.26✅ 通过
BERT 最后隐藏层0.0093%0.99999047.26✅ 通过
GPT BERT 投影层< 0.0001%1.00000091.27✅ 通过
SoVITS latent 码(量化器)0.7020%0.98745515.91✅ 通过
提示语义令牌0.7020%0.98745515.91✅ 通过
参考频谱图< 0.0001%1.00000082.98✅ 通过
BERT 音素特征0.0094%0.99998846.06✅ 通过
频谱图计算< 0.0001%1.000000108.80✅ 通过

结果

✅ 所有确定性组件均通过测试,相对误差<1%。所有确定性组件的最大误差为0.702%(latent量化器)。

端到端音频说明:VITS流匹配解码器采用随机采样,GPT自回归解码器会在步骤间累积数值漂移。这些是生成式TTS模型的固有特性,并非NPU精度问题。端到端音频误差(约4.6%)反映的是自回归发散,而非硬件精度问题。所有确定性组件均独立验证,误差<1%。


性能基准测试

方法

在3条测试文本上进行3次测量(含1次预热)取平均值,对比CPU(鲲鹏920)与NPU(昇腾910)的性能。

实测结果(2026-05-14 验证)

指标CPUNPU加速比
文本特征(BERT)382.1 ms22.1 ms17.3倍
语义生成(GPT AR)4.212 s494.4 ms8.5倍
音频合成(SoVITS)2.651 s38.4 ms69.0倍
总计7.245 s556.2 ms13.0倍

文本级结果

文本CPUNPU加速比
"你好,今天天气真好。" (10 字符)7.491 秒646.3 毫秒11.6 倍
"欢迎使用语音合成系统。" (10 字符)7.278 秒514.8 毫秒14.1 倍
"人工智能正在改变世界。" (10 字符)6.967 秒511.0 毫秒13.6 倍
平均值7.245 秒556.2 毫秒13.0 倍

分析

NPU 相比 CPU 实现了13.0 倍的整体加速,其中在以下方面的提升尤为显著:

  • 音频合成(69.0 倍):VITS 解码器充分利用了 NPU 的并行计算能力
  • BERT 特征提取(17.3 倍):Transformer 推理在 NPU 上得到高度优化
  • GPT 自回归生成(8.5 倍):受限于自回归的序列特性

运行完整评估

# Component-level accuracy evaluation
python3 component_eval.py

# Full end-to-end inference comparison
python3 inference.py --device both

# Output files:
#   eval/component_accuracy.json  - Component accuracy metrics
#   eval/accuracy_metrics.json    - End-to-end accuracy metrics
#   eval/timing_comparison.json   - CPU vs NPU timing breakdown
#   output/output_cpu.wav         - CPU-generated audio
#   output/output_npu.wav         - NPU-generated audio

项目结构

GPT-SoVITS-NPU/
├── inference.py        # Core NPU inference engine + comparison
├── evaluate.py         # Multi-test-case accuracy evaluation
├── benchmark.py        # Performance benchmark script
├── component_eval.py   # Component-level accuracy evaluation
├── README.md           # This document
├── output/             # Generated audio files
│   ├── output_cpu.wav
│   └── output_npu.wav
└── eval/               # Evaluation results (JSON)
    ├── accuracy_metrics.json
    ├── component_accuracy.json
    └── timing_comparison.json

引用与许可

  • 原始模型:X-D-Lab/TTS-GPT_SoVITS-sunshine_girl(ModelScope)
  • 基础框架:GPT-SoVITS(MIT 许可)
  • NPU 适配:本成果(2026)

技术支持

有关昇腾 NPU 的相关问题:

  • CANN/昇腾社区:https://www.hiascend.com/
  • torch_npu:https://gitee.com/ascend/pytorch
  • ModelScope:https://modelscope.cn/

已适配华为昇腾 NPU,基于 torch_npu 2.9.0