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

hoyoTTS (BertVITS2) Ascend NPU 适配

模型简介

hoyoTTS 是一个基于 BertVITS2 架构的语音合成模型,专为《原神》《崩坏:星穹铁道》角色语音设计。该模型结合 BERT 语言理解与 VITS 语音合成技术,支持 250+ 游戏角色语音合成。

本仓库提供 hoyoTTS 模型在华为昇腾 Ascend910 NPU 上的适配方案,已完成模型推理的 NPU 迁移与精度验证。适配基于 PyTorch + torch_npu 框架,保持与原始模型一致的 API 接口。

  • 原始模型: Genius-Society/hoyoTTS
  • 模型架构: BertVITS2 (VITS + BERT)
  • 适配硬件: Huawei Ascend 910 (Ascend910)

NPU 适配说明

项目详情
原始模型Genius-Society/hoyoTTS
模型架构BertVITS2 (TextEncoder + DurationPredictor + Flow + HiFi-GAN Decoder)
适配硬件Huawei Ascend 910 (Ascend910)
适配框架PyTorch 2.9.0 + torch_npu 2.9.0
NPU 驱动25.5.2
精度验证CPU vs NPU 相对误差 < 1%
推理性能NPU RTF 0.04x ~ 0.14x (benchmark 后)
加速比NPU vs CPU 平均 ~19x (benchmark 后)
模型参数41.4M (660 checkpoint params loaded)

环境要求

  • Python 3.11+
  • PyTorch 2.9.0+
  • torch_npu 2.9.0+
  • Ascend NPU Driver 25.5.x
  • pypinyin, soundfile, numpy
# 安装依赖
pip install modelscope torch_npu pypinyin soundfile numpy

# 下载模型权重
modelscope download --model Genius-Society/hoyoTTS --local_dir ./hoyoTTS

快速开始

命令行推理

# CPU 推理
python inference.py --text "你好世界" --speaker "派蒙" --device cpu

# NPU 推理
python inference.py --text "你好世界" --speaker "派蒙" --device npu

# NPU 推理 + CPU 精度自动对比
python inference.py --text "你好世界" --speaker "派蒙" --device npu

# 无噪声确定性推理 (用于精度验证)
python inference.py --text "你好世界" --speaker "派蒙" --device npu --noise-scale 0.0

列出可用角色

python inference.py --speakers

支持超过 250 个角色,包括:派蒙、可莉、钟离、雷电将军、胡桃、甘雨、八重神子、纳西妲、芙宁娜、那维莱特、枫原万叶、神里绫华等。

Python API 使用

from inference import load_model, prepare_input, run_inference

# 加载模型
model = load_model("./hoyoTTS", device="npu")

# 准备输入
inputs = prepare_input("你好世界", speaker_name="派蒙")

# 推理
audio = run_inference(model, inputs, device="npu")

# 保存音频
import soundfile as sf
sf.write("output.wav", audio.cpu().numpy(), 44100)

模型评估

精度评估 (CPU vs NPU)

使用 3 组不同长度/角色的测试文本进行 CPU vs NPU 精度对比 (noise_scale=0.667, seed=42, 相同输入):

测试用例文本角色MAEMSE最大差异余弦相似度相对误差结果
short你好世界派蒙6.53e-51.55e-87.39e-40.9999990.17%✅ PASS
medium今天天气真好,我们一起去冒险吧可莉4.52e-41.07e-62.08e-20.9999730.51%✅ PASS
long欢迎使用华为昇腾NPU进行语音合成推理测试钟离1.25e-48.39e-83.32e-30.9999980.15%✅ PASS

Overall Accuracy: PASS (< 1%)

性能评估 (NPU)

NPU 性能 benchmark (3 轮 warmup + 10 轮测试):

测试用例输入长度输出时长NPU 平均推理时间NPU RTFCPU 推理时间加速比
short (派蒙)4 chars~0.2s0.028s0.127x0.37s12.6x
medium (可莉)12 chars~0.6s0.029s0.048x0.90s24.1x
long (钟离)16 chars~0.7s0.028s0.040x1.21s32.0x

注:

  • 首次推理含 NPU 图编译开销,耗时约 0.3s
  • Benchmark 结果基于 warmup 后 (消除编译影响) 的 10 次推理统计
  • 平均加速比: 19.1x (NPU vs CPU)
  • 推理时间标准差: < 0.001s,性能稳定

运行评测

# 完整评测 (精度 + 性能)
python evaluate.py --model-dir ./hoyoTTS --output-dir ./eval_output

# 查看评测报告
cat ./eval_output/evaluation_report.txt

评测输出文件:

  • eval_output/evaluation_report.txt — 完整评测报告
  • eval_output/accuracy_results.json — 精度评测详细数据
  • eval_output/benchmark_results.json — 性能评测详细数据
  • eval_output/eval_*.wav — 各测试用例 CPU/NPU 输出音频

模型架构

本模型基于 BertVITS2 架构,包含以下核心组件:

组件说明参数量
TextEncoder (enc_p)相对位置编码 Transformer (6层, 2头, hidden=192, filter=768)~2.5M
DurationPredictor (dp)卷积持续时间预测器 (256 filters, kernel=3)~0.5M
ResidualCouplingBlock (flow)4 层 Transformer Coupling Layer 归一化流~5.2M
HiFi-GAN Decoder (dec)Weight Normalized 上采样生成器~33M
SpeakerEmbedding (emb_g)256 说话人 × 256 维嵌入~0.07M

HiFi-GAN Decoder 结构:

  • 上采样率: [8, 8, 2, 2, 2] (总 512x, 匹配 hop_length=512)
  • 每层 3 组 ResBlock (kernel_sizes=[3,7,11], dilations=[1,3,5])
  • ConvTranspose1d + Weight Normalization

文件说明

hoyoTTS-npu/
├── inference.py        # NPU 推理脚本 (含完整模型定义、文本处理、推理管道)
├── evaluate.py         # 精度/性能评测脚本
├── README.md           # 模型卡片 (本文档)
├── output/             # 推理输出目录
│   ├── *_cpu.wav       # CPU 推理音频
│   ├── *_npu.wav       # NPU 推理音频
│   └── metrics_*.json  # 精度对比指标
└── eval_output/        # 评测输出目录
    ├── evaluation_report.txt   # 完整评测报告
    ├── accuracy_results.json   # 精度评测 JSON
    ├── benchmark_results.json  # 性能评测 JSON
    ├── eval_*_cpu.wav          # 评测 CPU 音频
    └── eval_*_npu.wav          # 评测 NPU 音频

系统环境

项目版本
Python3.11.14
PyTorch2.9.0+cpu
torch_npu2.9.0.post1+gitee7ba04
NPU Driver25.5.2
OSLinux 5.10.0 (aarch64)

致谢

  • 原始模型:Genius-Society/hoyoTTS
  • BertVITS2: fishaudio/Bert-VITS2
  • 华为昇腾 NPU 生态
  • ModelScope 社区