zhaortiang/MOSS-TTS-Nano
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

MOSS-TTS-Nano 昇腾 NPU 适配与验证项目

本项目包含 MOSS-TTS-Nano 文本转语音模型在华为昇腾 NPU (Ascend 910B4) 上的适配分析、运行指南及验证报告。

适配结论

路径状态说明
PyTorch 原生版 + torch_npu✅ 支持已端到端验证通过,推荐此路径
ONNX 版 + CANN EP❌ 不支持CANN 8.5.1 缺少 LayerNorm/Gelu 等算子
ONNX 版 + CPU EP⚠️ 可用功能正常,但无法利用 NPU
vLLM-Ascend❌ 不支持TTS 模型不在 vLLM 支持范围内

环境要求

  • CANN >= 8.5.1
  • PyTorch >= 2.5.0
  • torch_npu >= 2.5.0
  • transformers >= 4.57.0
  • torchaudio >= 2.5.0
  • NPU: Ascend 910B4 (或其他兼容型号)

文件结构

/tmp/MOSS-TTS-Nano/
├── README.md                                    # 本文件
├── MOSS-TTS-Nano-100M-ONNX-Ascend-适配报告.md    # 完整技术分析报告
│   └── ONNX 失败根因分析 + PyTorch 成功验证细节
├── MOSS-TTS-Nano-100M-ONNX-Runbook.md          # 运行指南
│   └── ONNX CPU EP 用法 + PyTorch NPU 用法
├── test_moss_tts_nano_npu_end2end.py           # 端到端功能验证脚本
│   └── TTS Prefill → Decode → Audio Encode → Decode
├── test_torch_npu.py                           # 基础 PyTorch NPU 功能测试
├── test_torch_npu_full.py                      # 完整 PyTorch NPU 测试
│   └── 含 TTS generate 与 Audio Tokenizer 独立测试
├── verify_cann_ep.py                           # ONNX CANN EP 验证脚本
│   └── 验证 8 个子图在 CANN/CPU 上的加载情况
├── verify_moss_tts_nano.py                     # verify-agent 综合验证脚本
│   └── 部署验证 + 精度对比(NPU vs CPU) + 性能基准
├── validation_report.json                      # 结构化 JSON 验证报告
└── validation_report.md                        # 可视化 Markdown 验证报告

快速开始

1. 下载模型

python -c "
from modelscope import snapshot_download
snapshot_download('openmoss/MOSS-TTS-Nano', cache_dir='./models')
snapshot_download('openmoss/MOSS-Audio-Tokenizer-Nano', cache_dir='./models')
"

2. 端到端功能验证

python test_moss_tts_nano_npu_end2end.py

3. 综合验证(部署 + 精度 + 性能)

python verify_moss_tts_nano.py

验证结果摘要

部署验证

组件参数量状态
TTS 模型 (MossTTSNanoForCausalLM)117.3M✅ NPU 加载成功
Audio Tokenizer (MossAudioTokenizerModel)22.0M✅ NPU 加载成功

精度评估 (NPU vs CPU)

测试项MSEMaxDiff结论
TTS Prefill3.08e-112.36e-05浮点误差极小
TTS Decode Step3.16e-112.03e-05浮点误差极小
Audio Encode0 (100% 匹配)0整型输出完全一致
Audio Decode8.47e-075.22e-03相对误差 ~2.9%

精度结论: NPU 与 CPU 输出差异在可接受范围内,精度验证通过。

性能基准 (Ascend910B4)

测试项P50 (ms)P90 (ms)Mean (ms)
TTS Prefill36.337.336.5
TTS Decode Step36.636.836.6
Audio Encode52.953.152.8
Audio Decode34.134.434.1

关键适配点

  1. Attention 实现切换: 必须将默认的 flash_attention_2 改为 sdpa 或 eager

    model = AutoModelForCausalLM.from_pretrained(
        "openmoss/MOSS-TTS-Nano",
        trust_remote_code=True,
        attn_implementation="sdpa",
    ).to("npu")
  2. Audio Tokenizer padding_mask: encode/decode 必须显式传入 padding_mask,否则 NPU 上会报 0-dim tensor 索引错误

    padding_mask = torch.ones((1, 48000), dtype=torch.long, device="npu")
    enc_out = codec_model.encode(waveform, padding_mask=padding_mask)

已知问题

  • ONNX CANN EP 不可用: 模型包含 CANN 不支持的算子(LayerNorm、Gelu、StridedSliceV3 等),所有 8 个子图均无法编译
  • 动态 Shape 限制: CANN 图编译器默认要求静态 shape,而模型输入含动态 batch/seq 维度

参考

  • ModelScope: openmoss/MOSS-TTS-Nano, openmoss/MOSS-Audio-Tokenizer-Nano
  • HuggingFace: OpenMOSS-Team/MOSS-TTS-Nano