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

XTTS-v2 for Ascend NPU

ⓍTTS 是一种语音生成模型,仅需 6 秒的音频片段,就能将声音克隆成不同语言。本仓库提供 XTTS-v2 的昇腾 NPU 适配版本,可在华为昇腾 910 系列 NPU 上实现快速推理。

模型概述

  • 模型:Coqui AI 开发的 XTTS-v2
  • 任务:支持语音克隆的文本转语音(TTS)
  • 硬件:华为昇腾 910B NPU(已验证)
  • 框架:PyTorch 2.9.0 + torch_npu 2.9.0
  • 支持语言:16 种语言(en、es、fr、de、it、pt、pl、tr、ru、nl、cs、ar、zh-cn、hu、ko、ja)
  • 采样率:24kHz

NPU 适配详情

该模型已在昇腾 NPU 上验证运行,主要适配如下:

组件适配情况
主 GPT 模型原生在 NPU 上运行
HiFi-GAN 解码器原生在 NPU 上运行
说话人编码器在 CPU 上运行(NPU 缺乏对 STFT 的 complex64 类型 abs() 支持)
音频加载使用 soundfile 后端(避免使用 torchcodec/libnvrtc)

NPU 兼容性修复

  1. torch.load safe_globals:将 XTTS 配置类添加到 PyTorch 序列化允许列表(PyTorch 2.6+ 默认启用 weights_only=True)
  2. 音频解码:修改为使用 soundfile 而非 torchcodec(昇腾平台不支持 libnvrtc.so)
  3. 说话人编码器:迁移至 CPU 运行,以规避 torch.stft 生成的 complex64 张量不支持 abs() 操作的问题

性能

在华为昇腾 910B NPU 上的评估结果:

语言文本长度音频时长推理时间RTF
英语(短文本)74 字符5.84s2.91s0.50x
英语(中等文本)97 字符4.68s2.55s0.55x
中文(zh-cn)20 字符4.54s2.31s0.51x
法语68 字符4.64s2.41s0.52x
德语75 字符5.24s2.60s0.50x
  • 平均 RTF:0.51x(快于实时)
  • 平均推理时间:2.56s

RTF < 1.0 表示模型生成音频的速度快于实时(例如,0.5x 意味着生成速度是播放速度的 2 倍)。

精度验证

在确定性模型组件上对NPU适配精度进行了验证:

组件指标数值状态
说话人嵌入MAE7.48e-05✅
说话人嵌入余弦相似度0.999998✅

精度:说话人嵌入误差 < 0.01%,证实NPU与CPU基准的数值一致性。

注:由于GPT采样固有的随机性(基于温度的生成每次运行都会产生不同的音频),对该生成模型进行完整音频输出比较没有意义。

安装

# Install PyTorch NPU
pip install torch torch_npu torchaudio

# Install TTS dependencies
pip install TTS soundfile scipy

# Clone this repository
git clone https://atomgit.com/weixin_62994174/XTTS-v2.git
cd XTTS-v2

快速开始

# English TTS with default speaker
python inference.py --text "Hello world, this is a test." --language en

# Chinese TTS
python inference.py --text "你好,这是语音合成测试。" --language zh-cn

# Custom speaker voice cloning
python inference.py --text "Your text here" \
    --speaker_wav /path/to/speaker_6sec.wav \
    --language en \
    --output output.wav

Python API

from inference import load_model, synthesize

model, config = load_model(device="npu")
wav, elapsed, duration, rtf = synthesize(
    model, config,
    text="Hello, this is Ascend NPU text-to-speech!",
    speaker_wav="models/samples/en_sample.wav",
    language="en",
    output_path="output.wav",
)
print(f"RTF: {rtf:.2f}x")

项目结构

XTTS-v2/
├── inference.py                 # Main NPU inference script
├── evaluation/
│   ├── evaluate.py              # Performance & accuracy evaluation
│   └── accuracy_deterministic.py # Deterministic component validation
├── models/                      # Model weights (from ModelScope)
│   ├── model.pth                # Main XTTS-v2 checkpoint
│   ├── dvae.pth                 # Discrete VAE checkpoint
│   ├── config.json              # Model configuration
│   ├── vocab.json               # Tokenizer vocabulary
│   └── samples/                 # Reference speaker samples
├── output/                      # Generated audio outputs
├── smoke_test.py                # Quick NPU verification test
└── README.md                    # This file

评估

运行完整的评估套件:

# Performance benchmark only
python evaluation/evaluate.py --perf-only

# Deterministic accuracy validation
python evaluation/accuracy_deterministic.py

已知问题

  1. CPU 上的说话人编码器:torch.stft 操作会生成复数张量;Ascend NPU 不支持对 complex64 数据类型执行 abs() 操作。作为临时解决方案,说话人编码器在 CPU 上运行。
  2. torchcodec 不可用:此 Ascend 环境未安装 libnvrtc.so。音频加载将使用 soundfile 作为备用方案。
  3. 生成结果的非确定性:基于 GPT 的文本转音频生成过程采用了采样(温度/top-k/top-p)方法,因此每次运行都会生成不同的音频。这是预期行为,并非 NPU 特有的问题。

许可证

本模型根据 Coqui 公共模型许可证 (CPML) 进行许可。

引用

@misc{xtts-v2,
  author = {Coqui AI},
  title = {XTTS-v2: Multilingual Voice Cloning},
  year = {2024},
  publisher = {ModelScope},
  url = {https://www.modelscope.cn/models/AI-ModelScope/XTTS-v2}
}