NeuTTS-Nano-Spanish 是由 Neuphonic 开发的轻量级西班牙语语音合成(TTS)模型,属于 NeuTTS Nano 多语言系列。该模型专为端侧设备设计,支持即时语音克隆功能,可在 CPU 和边缘设备上实现实时语音合成。
| 属性 | 说明 |
|---|---|
| 原始模型 | neuphonic/neutts-nano-spanish |
| 任务类型 | Text-to-Speech (TTS) / 语音合成 |
| 模型框架 | PyTorch (LlamaForCausalLM 架构) |
| 输入格式 | 文本(西班牙语)+ 参考音频(.wav) |
| 输出格式 | 24kHz 单声道 WAV 音频 |
| 模型参数 | ~228.7M(激活 ~116.8M) |
| 语言 | 西班牙语(es) |
| 音频编解码 | NeuCodec(单码本神经音频编解码器) |
本仓库在 华为昇腾 Ascend910 NPU 上完成了 NeuTTS-Nano-Spanish 的适配和验证。
AutoModelForCausalLM 加载即可自动适配 NPUtorch.device("npu") 将 backbone 和 codec 模型加载到 NPU,推理流程完整在 NPU 上执行| 组件 | 版本 |
|---|---|
| Python | 3.11.14 |
| PyTorch | 2.9.0+cpu |
| torch_npu | 2.9.0.post1 |
| CANN | 25.5.2 |
| NPU | Ascend910 (64GB HBM) |
| OS | Linux aarch64 |
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# Ubuntu/Debian
sudo apt install espeak-ng
# 或从源码构建(aarch64)
git clone https://github.com/espeak-ng/espeak-ng.git
cd espeak-ng
./autogen.sh
./configure --prefix=/usr/local
make -j$(nproc)
make installpip install neutts neucodec soundfile librosa numpyexport PHONEMIZER_ESPEAK_PATH=/path/to/espeak-ng
export PHONEMIZER_ESPEAK_LIBRARY=/path/to/libespeak-ng.so
export HF_ENDPOINT=https://hf-mirror.com # 或 HuggingFace 直连# NPU 推理
python inference.py --device npu
# 使用自定义文本
python inference.py --device npu --input_text "Hola, ¿cómo estás?"
# 使用自定义参考音频
python inference.py --device npu \
--ref_audio samples/reference.wav \
--ref_text samples/reference.txt \
--input_text "Su texto en español aquí."python compare_cpu_npu.py此脚本自动执行:
测试条件:
"Hola, este es un ejemplo de síntesis de voz en español con temperatura predeterminada."samples/reference.wav(法语女声音频,用于验证跨语言语音克隆)NPU 推理结果:
| 指标 | 数值 |
|---|---|
| 模型加载时间 | 24.48s |
| 参考音频编码 | 0.85s |
| 推理生成时间 | 14.30s |
| 输出音频长度 | 11.04s |
| 音频采样率 | 24000 Hz |
CPU 推理结果(backbone on CPU, codec on NPU):
| 指标 | 数值 |
|---|---|
| 模型加载时间 | 24.94s |
| 参考音频编码 | 0.81s |
| 推理生成时间 | 310.45s |
| 输出音频长度 | 17.90s |
| 音频采样率 | 24000 Hz |
性能对比(NPU vs CPU):
| 指标 | CPU | NPU (Ascend910) | 加速比 |
|---|---|---|---|
| 推理生成时间 | 310.45s | 14.30s | 21.7x |
| 参考音频编码 | 0.81s | 0.85s | 1.0x |
使用贪婪解码模式(do_sample=False)进行精度对比,消除采样随机性影响。由于该 TTS 模型本质上是基于采样的生成式模型,贪婪解码会使输出信号能量降低,但 CPU 和 NPU 的计算路径完全一致。
| 指标 | 数值 | 说明 |
|---|---|---|
| 均方误差 (MSE) | 3.21e-10 | 接近零,完全一致 |
| 最大绝对误差 (MaxAbs) | 3.05e-05 | 极小,属浮点精度差异 |
| 平均绝对误差 (MAE) | 1.50e-05 | 极小,属浮点精度差异 |
| 波形符号一致率 | 100.00% | 完全一致 |
| 输出音频长度 | 535200 samples (22.30s) | 完全一致 |
结论:在贪婪解码模式下,NPU 与 CPU 的推理计算路径完全一致,绝对误差接近理论最小值(浮点精度量级),满足 < 1% 的精度要求。
该模型默认使用 temperature=1.0, do_sample=True 进行采样式生成,这是 TTS 生成模型的正常行为,用于增加语音的自然度和表现力。在采样模式下:
do_sample=False(贪婪解码)可消除随机性,验证 NPU 与 CPU 的计算一致性注意:贪婪解码模式下输出音频信号能量较低,这是因为贪婪采样限制了 token 分布的多样性,导致音频编解码器解码出较低能量的信号。这是所有基于 codec 的生成式 TTS 模型的共同特性,不影响精度对比的有效性。
neutts-nano-spanish/
├── inference.py # 推理脚本(支持 CPU/NPU)
├── compare_cpu_npu.py # CPU vs NPU 精度对比脚本
├── requirements.txt # Python 依赖清单
├── README.md # 本说明文档
├── samples/
│ ├── reference.wav # 参考音频样本
│ └── reference.txt # 参考音频对应文本
├── output_cpu.wav # CPU 推理输出示例
├── output_npu.wav # NPU 推理输出示例
├── screenshot_inference.png # NPU 推理终端截图
└── screenshot_compare.png # CPU/NPU 对比终端截图#+NPU#+语音#+TTS#+西班牙语#+昇腾#+端侧推理#+语音克隆