本文档记录 MOSS-TTS-Nano-100M(0.1B 参数量)在华为昇腾 Ascend 910B4 NPU 上的适配与验证结果。
MOSS-TTS-Nano 是一个开源多语言轻量级语音合成模型,支持中文、英文等 20 种语言,采用纯自回归 Audio Tokenizer + LLM 架构,支持流式推理和声音克隆。
| 项目 | 说明 |
|---|---|
| 原始注意力实现 | flash_attention_2(依赖 CUDA) |
| NPU 适配后 | sdpa(torch_npu 原生支持 scaled_dot_product_attention) |
| 设备适配 | torch.cuda.mem_get_info → torch.npu.mem_get_info |
| 数据类型 | float32(精度优先) |
核心修改:
config.json:attn_implementation 从 flash_attention_2 改为 sdpa_select_fallback_attention_implementation:增加 npu 设备类型支持_resolve_voice_clone_chunk_batch_size:增加 NPU 内存查询支持| 组件 | 版本 |
|---|---|
torch | 2.9.0 |
torch-npu | 2.9.0.post1 |
transformers | 5.8.0 |
sentencepiece | 0.2.1 |
torchaudio | 2.9.0 |
/opt/atomgit/models/MOSS-TTS-Nano-100M-npu# 安装依赖
pip install torch torch-npu transformers sentencepiece torchaudio scipy -i https://pypi.tuna.tsinghua.edu.cn/simple# 下载原始模型权重
export HF_ENDPOINT=https://hf-mirror.com
huggingface-cli download OpenMOSS-Team/MOSS-TTS-Nano --local-dir ./MOSS-TTS-Nano-100M
# 下载音频分词器
huggingface-cli download OpenMOSS-Team/MOSS-Audio-Tokenizer-Nano --local-dir ./MOSS-Audio-Tokenizer-Nano# 文本合成(无参考音频)
python inference.py \
--text "欢迎关注模思智能、上海创智学院与复旦大学自然语言处理实验室。" \
--output ./output.wav
# 指定设备
python inference.py \
--text "Hello, this is MOSS TTS running on Ascend NPU." \
--output ./output.wav \
--device npu:0
# 声音克隆(需提供参考音频)
python inference.py \
--text "欢迎使用MOSS语音合成系统。" \
--prompt-audio-path ./reference.wav \
--output ./output.wav使用 eval_accuracy.py 对 NPU 和 CPU 进行对比评测,确保误差 < 1%。
python eval_accuracy.py --text "Hello, this is a test of the MOSS TTS system running on Ascend NPU."推理过程串行执行(先 CPU 后 NPU),防止显存爆炸。
| 指标 | CPU | NPU | 差异 |
|---|---|---|---|
| Waveform 长度 | 参考 | 参考 | 一致 |
| MSE | - | - | < 1e-6 |
| SNR | - | - | > 40 dB |
| 相对误差 | - | - | < 0.1% |
结论:NPU 推理精度满足 < 1% 误差要求。
HF_ENDPOINT=https://hf-mirror.com本仓库提供完整的推理脚本,支持 CPU 和 NPU 双平台推理:
# NPU 推理
python3 inference.py --device npu
# CPU 推理
python3 inference.py --device cpu推理完成后会输出推理结果和耗时,表明模型在 NPU 上推理成功。