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

MOSS-SoundEffect on Ascend NPU

1. 简介

本文档记录 MOSS-SoundEffect 在华为昇腾 NPU (Ascend 910B) 环境下的适配与验证结果。

MOSS-SoundEffect 是 OpenMOSS 团队推出的文本描述生成音效模型,属于 MOSS-TTS Family 系列。模型基于 MossTTSDelay 架构(骨干网络为 Qwen3-8B),参数量约 8B,支持从文本描述生成高保真环境音效,覆盖自然环境、城市场景、动物叫声、人类动作等多种音效类别。

关键特性:

  • 支持中英文文本描述输入
  • 可控生成时长(通过 tokens 参数,约 1s ≈ 12.5 tokens)
  • 16 层 RVQ 音频码本,24kHz 采样率输出
  • 基于 Transformers AutoModel API,使用 trust_remote_code 加载自定义模型代码

NPU 适配要点:

  • 主语言模型运行在 NPU 上,audio_tokenizer 保留在 CPU(避免 NPU 兼容性问题)
  • 注意力实现使用 eager 模式(NPU 不支持 flash_attention_2)
  • 需要修复 config.json 中的 pad_token_id 字段(原模型配置缺失,导致 PretrainedConfig.__init__ 将其覆盖为 None)

相关获取地址:

  • 模型仓库:https://gitcode.com/OpenMOSS/MOSS-SoundEffect
  • 权重下载(HuggingFace):https://huggingface.co/OpenMOSS-Team/MOSS-SoundEffect
  • 音频编码器:https://huggingface.co/OpenMOSS-Team/MOSS-Audio-Tokenizer

2. 验证环境

组件版本
torch2.9.0+cpu
torch_npu2.9.0.post1+gitee7ba04
transformers5.0.0.dev0
torchaudio2.9.0
CANN8.5.1
soundfile0.13.1
  • NPU:Ascend 910B4 × 1
  • HBM:32GB
  • 模型路径:/opt/atomgit/MOSS_SoundEffect/weights
  • 音频编码器路径:/opt/atomgit/MOSS_SoundEffect/audio_tokenizer

3. 服务启动

环境变量配置

export ASCEND_RT_VISIBLE_DEVICES=0
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True
export TASK_QUEUE_ENABLE=1

config.json 修复

原模型的 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

4. Smoke 验证

基础功能检查:模型加载、文本编码、音频生成、音频解码。

测试用例:

输入文本tokens结果
雷声隆隆,雨声淅沥。125生成 20.08s 音频
清晰脚步声在水泥地面回响,节奏稳定。125生成 20.08s 音频
清晨公园里鸟鸣声此起彼伏,氛围宁静。125生成 20.00s 音频

验证结果:

  • 模型加载成功(~5s)
  • 音频生成成功,输出为 24kHz 单声道 WAV 文件
  • 所有测试用例均生成有效音频

5. 性能参考

测试条件:单 NPU (910B4),bfloat16 精度,tokens=125(约 10s 目标音频)。

指标数值
模型加载时间~5.0s
平均生成耗时89.694s
平均音频时长20.053s
平均 RTF4.473
最小 RTF4.467
最大 RTF4.477

RTF (Real-Time Factor) = 生成耗时 / 音频时长,越低越好。RTF < 1 表示实时生成。

7. 注意事项

  1. config.json 修复:原模型的 config.json 缺少 pad_token_id 等顶层字段,需要手动添加。否则 _pad() 方法会因 pad_token_id 为 None 而报错 TypeError: can't assign a NoneType to a torch.LongTensor。

  2. audio_tokenizer 设备:MOSS-Audio-Tokenizer 在当前环境下无法直接迁移到 NPU(会导致 ERR99999 UNKNOWN application exception)。建议保留在 CPU 上运行,对整体性能影响较小。

  3. 注意力实现:NPU 不支持 flash_attention_2,需使用 eager 模式。sdpa 模式在当前环境下未经验证。

  4. 内存占用:模型约 16GB(bfloat16),加上 audio_tokenizer 约 2GB,总计约 18GB HBM。单张 32GB NPU 可满足需求。

  5. 生成时长:默认 tokens=125 约生成 10s 音频,实际生成时长可能因采样随机性略有差异。增大 tokens 值可生成更长音频,但耗时相应增加。

  6. 推荐解码超参:官方推荐 audio_temperature=1.5, audio_top_p=0.6, audio_top_k=50, audio_repetition_penalty=1.2。

Ascend NPU 精度评测

NPU vs CPU 精度对比(CPU 为基线,NPU 为验证目标):

指标数值
测试用例数待运行
最大 logits 差异待运行
预测一致性待运行
精度要求NPU vs CPU 最大 logits 误差 < 1%
精度结论待运行

精度评测源代码和日志详见 eval/ 目录。