本文档记录 MOSS-SoundEffect 在华为昇腾 NPU (Ascend 910B) 环境下的适配与验证结果。
MOSS-SoundEffect 是 OpenMOSS 团队推出的文本描述生成音效模型,属于 MOSS-TTS Family 系列。模型基于 MossTTSDelay 架构(骨干网络为 Qwen3-8B),参数量约 8B,支持从文本描述生成高保真环境音效,覆盖自然环境、城市场景、动物叫声、人类动作等多种音效类别。
关键特性:
trust_remote_code 加载自定义模型代码NPU 适配要点:
eager 模式(NPU 不支持 flash_attention_2)config.json 中的 pad_token_id 字段(原模型配置缺失,导致 PretrainedConfig.__init__ 将其覆盖为 None)相关获取地址:
| 组件 | 版本 |
|---|---|
torch | 2.9.0+cpu |
torch_npu | 2.9.0.post1+gitee7ba04 |
transformers | 5.0.0.dev0 |
torchaudio | 2.9.0 |
CANN | 8.5.1 |
soundfile | 0.13.1 |
/opt/atomgit/MOSS_SoundEffect/weights/opt/atomgit/MOSS_SoundEffect/audio_tokenizerexport ASCEND_RT_VISIBLE_DEVICES=0
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True
export TASK_QUEUE_ENABLE=1原模型的 config.json 缺少顶层 pad_token_id 字段,需要手动添加:
{
"pad_token_id": 151643,
"im_start_token_id": 151644,
"im_end_token_id": 151645
}同时需要修改 configuration_moss_tts.py,将 super().__init__(**kwargs) 改为:
super().__init__(pad_token_id=pad_token_id, **kwargs)ASCEND_RT_VISIBLE_DEVICES=0 python3 inference.py \
--model-path /opt/atomgit/MOSS_SoundEffect/weights \
--audio-tokenizer-path /opt/atomgit/MOSS_SoundEffect/audio_tokenizer \
--output-dir ./output \
--dtype bfloat16 \
--num-warmup 1 \
--num-iterations 3基础功能检查:模型加载、文本编码、音频生成、音频解码。
测试用例:
| 输入文本 | tokens | 结果 |
|---|---|---|
| 雷声隆隆,雨声淅沥。 | 125 | 生成 20.08s 音频 |
| 清晰脚步声在水泥地面回响,节奏稳定。 | 125 | 生成 20.08s 音频 |
| 清晨公园里鸟鸣声此起彼伏,氛围宁静。 | 125 | 生成 20.00s 音频 |
验证结果:
测试条件:单 NPU (910B4),bfloat16 精度,tokens=125(约 10s 目标音频)。
| 指标 | 数值 |
|---|---|
| 模型加载时间 | ~5.0s |
| 平均生成耗时 | 89.694s |
| 平均音频时长 | 20.053s |
| 平均 RTF | 4.473 |
| 最小 RTF | 4.467 |
| 最大 RTF | 4.477 |
RTF (Real-Time Factor) = 生成耗时 / 音频时长,越低越好。RTF < 1 表示实时生成。
config.json 修复:原模型的 config.json 缺少 pad_token_id 等顶层字段,需要手动添加。否则 _pad() 方法会因 pad_token_id 为 None 而报错 TypeError: can't assign a NoneType to a torch.LongTensor。
audio_tokenizer 设备:MOSS-Audio-Tokenizer 在当前环境下无法直接迁移到 NPU(会导致 ERR99999 UNKNOWN application exception)。建议保留在 CPU 上运行,对整体性能影响较小。
注意力实现:NPU 不支持 flash_attention_2,需使用 eager 模式。sdpa 模式在当前环境下未经验证。
内存占用:模型约 16GB(bfloat16),加上 audio_tokenizer 约 2GB,总计约 18GB HBM。单张 32GB NPU 可满足需求。
生成时长:默认 tokens=125 约生成 10s 音频,实际生成时长可能因采样随机性略有差异。增大 tokens 值可生成更长音频,但耗时相应增加。
推荐解码超参:官方推荐 audio_temperature=1.5, audio_top_p=0.6, audio_top_k=50, audio_repetition_penalty=1.2。
NPU vs CPU 精度对比(CPU 为基线,NPU 为验证目标):
| 指标 | 数值 |
|---|---|
| 测试用例数 | 待运行 |
| 最大 logits 差异 | 待运行 |
| 预测一致性 | 待运行 |
| 精度要求 | NPU vs CPU 最大 logits 误差 < 1% |
| 精度结论 | 待运行 |
精度评测源代码和日志详见 eval/ 目录。