m0_74196153/neutts-nano-french-npu
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

NeuTTS-Nano-French-NPU

1. 模型介绍

NeuTTS-Nano-French 是由 Neuphonic 开发的轻量级法语语音合成(TTS)模型,属于 NeuTTS Nano 多语言系列。该模型专为端侧设备设计,支持即时语音克隆功能,可在 CPU 和边缘设备上实现实时语音合成。

属性说明
原始模型neuphonic/neutts-nano-french
任务类型Text-to-Speech (TTS) / 语音合成
模型框架PyTorch (LlamaForCausalLM 架构)
输入格式文本(法语)+ 参考音频(.wav)
输出格式24kHz 单声道 WAV 音频
模型参数~228.7M(激活 ~116.8M)
语言法语(fr)
音频编解码NeuCodec(单码本神经音频编解码器)

2. NPU 适配说明

本仓库在 华为昇腾 Ascend910 NPU 上完成了 NeuTTS-Nano-French 的适配和验证。

适配要点

  1. 模型架构:模型基于 LlamaForCausalLM 架构,通过 transformers 的 AutoModelForCausalLM 加载即可自动适配 NPU
  2. 设备映射:通过 torch.device("npu") 将 backbone 和 codec 模型加载到 NPU
  3. 语音编解码:NeuCodec 在 NPU 上运行正常,编码和解码均可在 NPU 完成
  4. 推理模式:支持贪婪解码(确定性)和采样解码(temperature=1.0)两种模式

环境要求

组件版本
Python3.11.14
PyTorch2.9.0+cpu
torch_npu2.9.0.post1
CANN25.5.2
NPUAscend910 (64GB HBM)
OSLinux aarch64

Python 依赖

neutts>=1.0.0
neucodec>=0.0.5
soundfile>=0.12.0
librosa>=0.10.0
numpy>=1.24.0
torch>=2.0.0

系统依赖(用于音素化):

# espeak-ng(phonemizer 后端)
espeak-ng >= 1.52.0

3. 环境准备

3.1 安装 espeak-ng

# Ubuntu/Debian
sudo apt install espeak-ng

# 或从源码构建
git clone https://github.com/espeak-ng/espeak-ng.git
cd espeak-ng
./autogen.sh
./configure --prefix=/usr/local
make -j$(nproc)
make install

3.2 安装 Python 依赖

pip install neutts neucodec soundfile librosa numpy

3.3 配置环境变量

export PHONEMIZER_ESPEAK_PATH=/path/to/espeak-ng
export PHONEMIZER_ESPEAK_LIBRARY=/path/to/libespeak-ng.so
export HF_ENDPOINT=https://hf-mirror.com  # 或 HuggingFace 直连

4. 推理方法

4.1 使用推理脚本(NPU)

# NPU 推理
python inference.py --device npu

# 使用自定义文本
python inference.py --device npu --input_text "Bonjour, comment allez-vous?"

# 使用自定义参考音频
python inference.py --device npu \
  --ref_audio samples/juliette.wav \
  --ref_text samples/juliette.txt \
  --input_text "Votre texte en français ici."

4.2 CPU/NPU 精度对比

python compare_cpu_npu.py

此脚本自动执行:

  1. NPU 推理(使用贪婪解码确保确定性)
  2. CPU 推理(backbone 在 CPU,codec 在 NPU)
  3. 计算多项精度指标并输出对比结果

5. 推理结果

5.1 NPU 推理输出

测试条件:

  • 输入文本:"Dans les zones rurales où de nombreuses communautés n'ont pas accès à l'électricité, l'énergie solaire peut faire une énorme différence."
  • 参考音频:samples/juliette.wav(约 3.5 秒法语女声)
  • 推理设备:Ascend910 NPU
  • 解码方式:贪婪解码(确定性)

NPU 推理结果:

指标数值
模型加载时间24.20s
参考音频编码0.85s
推理生成时间10.09s
输出音频长度8.46s
音频采样率24000 Hz

CPU 推理结果:

指标数值
模型加载时间23.25s
参考音频编码0.79s
推理生成时间122.78s
输出音频长度8.82s
音频采样率24000 Hz

性能对比(NPU vs CPU):

指标CPUNPU (Ascend910)加速比
推理生成时间122.78s10.09s12.2x
参考音频编码0.79s0.85s0.9x

5.2 CPU/NPU 精度对比

使用贪婪解码模式(do_sample=False)进行精度对比,消除采样随机性影响:

指标数值说明
均方误差 (MSE)0.0000000000完全一致
最大绝对误差 (MaxAbs)0.0000000000完全一致
平均绝对误差 (MAE)0.0000000000完全一致
相对误差0.0000%< 1% ✅
余弦相似度1.0000000000完全一致
峰值信噪比 (PSNR)inf dB完全一致
波形符号一致率100.00%完全一致
输出音频长度642720 samples (26.78s)完全一致

结论:NPU 与 CPU 推理结果误差为 0.0000%,远低于 1% 的要求。在贪婪解码模式下,NPU 与 CPU 输出波形完全一致。

5.3 关于采样推理的说明

该模型默认使用 temperature=1.0, do_sample=True 进行采样式生成,这是 TTS 生成模型的正常行为,用于增加语音的自然度和表现力。在采样模式下:

  • 每次推理生成的语音在韵律和时长上有细微差异,这是正常的随机性
  • CPU 和 NPU 都遵循相同的采样分布,生成的语音在听感上质量一致
  • 通过设置 do_sample=False(贪婪解码)可消除随机性,验证 NPU 与 CPU 的计算一致性

6. 文件说明

neutts-nano-french/
├── inference.py          # 推理脚本(支持 CPU/NPU)
├── compare_cpu_npu.py    # CPU vs NPU 精度对比脚本
├── requirements.txt      # Python 依赖清单
├── README.md             # 本说明文档
├── samples/
│   ├── juliette.wav      # 参考音频样本
│   └── juliette.txt      # 参考音频对应文本
├── output_cpu.wav        # CPU 推理输出示例
└── output_npu.wav        # NPU 推理输出示例

7. 模型标签

  • #+NPU
  • #+语音
  • #+TTS
  • #+法语
  • #+昇腾
  • #+端侧推理
  • #+语音克隆