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

MOSS-SoundEffect (昇腾 NPU 适配版) #NPU

MOSS-SoundEffect 是 MOSS-TTS Family 中的环境声音 & 音效生成模型,基于 MOSI.AI 和 OpenMOSS 团队开发。本仓库提供 华为昇腾 Ascend910 NPU 适配版本,支持在昇腾硬件上高效推理。

模型简介

MOSS-SoundEffect 是一个基于文本描述生成高保真环境音效的模型,覆盖自然场景、城市场景、动物声音、人类动作声音等多种类别。

  • 模型架构: MossTTSDelay (基于 Qwen3-8B 骨干网络 + 延迟模式自回归生成)
  • 参数规模: 8.35B
  • 精度: bfloat16
  • 采样率: 24000 Hz
  • 音频 Tokenizer: MOSS-Audio-Tokenizer (32 层 VQ, codebook_size=1024)

昇腾 NPU 适配说明

适配环境

项目版本/信息
NPU 型号Ascend910_9362
CANN 版本25.5.2
PyTorch2.9.0
torch_npu2.9.0.post1
Transformers5.8.1
精度bfloat16
注意力后端SDPA (torch_npu 原生支持)

适配要点

  1. 设备迁移: 将 CUDA 设备替换为 NPU (torch.npu)
  2. 注意力机制: 使用 sdpa 注意力后端(NPU 不支持 FlashAttention 2)
  3. 精度对齐: 采用 bfloat16 推理,与 GPU bfloat16 输出保持一致
  4. 音频 Tokenizer: 同步迁移至 NPU 设备以提升编解码速度

快速开始

环境安装

# 安装依赖
pip install torch==2.9.0
pip install torch_npu==2.9.0.post1
pip install transformers>=4.57.0
pip install torchaudio
pip install modelscope

下载模型

# 下载 MOSS-SoundEffect 模型
modelscope download --model openmoss/MOSS-SoundEffect --local_dir ./MOSS-SoundEffect

# 下载 MOSS-Audio-Tokenizer (音频编解码器)
modelscope download --model openmoss/MOSS-Audio-Tokenizer --local_dir ./MOSS-Audio-Tokenizer

推理示例

import torch
import torch_npu
import torchaudio
from pathlib import Path
from transformers import AutoModel, AutoProcessor

# 使用 NPU
DEVICE = "npu" if torch.npu.is_available() else "cpu"
DTYPE = torch.bfloat16

# 加载 Processor (指定 codec_path 为本地音频 Tokenizer 路径)
processor = AutoProcessor.from_pretrained(
    "MOSS-SoundEffect",
    trust_remote_code=True,
    codec_path="MOSS-Audio-Tokenizer",
)
processor.audio_tokenizer = processor.audio_tokenizer.to(DEVICE)

# 模型加载 (~70s)
model = AutoModel.from_pretrained(
    "MOSS-SoundEffect",
    trust_remote_code=True,
    attn_implementation="sdpa",  # NPU 使用 SDPA 后端
    torch_dtype=DTYPE,
).to(DEVICE)
model.eval()

# 生成音效
prompt = "雷声隆隆,雨声淅沥。"
conversations = [[processor.build_user_message(ambient_sound=prompt)]]
batch = processor(conversations, mode="generation")
input_ids = batch["input_ids"].to(DEVICE)
attention_mask = batch["attention_mask"].to(DEVICE)

with torch.no_grad():
    outputs = model.generate(
        input_ids=input_ids,
        attention_mask=attention_mask,
        max_new_tokens=4096,
    )

# 保存音频
for i, message in enumerate(processor.decode(outputs)):
    audio = message.audio_codes_list[0]
    torchaudio.save(f"output_{i}.wav", audio.unsqueeze(0), 24000)

也可直接运行本仓库中的推理脚本:

python inference_npu.py

精度评测

评测方法

在 NPU 和 CPU 上分别运行相同输入,对比 logits 和生成音频的精度差异。

评测结果

指标NPU vs CPU判定
Logits 相对误差 (均值)< 0.1%✅ PASS
Logits 元素误差 < 1% 占比> 99.9%✅ PASS
生成音频 Pearson 相关系数> 0.99✅ PASS
生成音频误差 < 1% 占比> 99.5%✅ PASS
综合判定误差 < 1%✅ PASS

运行精度评测:

python evaluate_accuracy.py

性能评测

评测环境

  • 硬件: Ascend910_9362 × 2 (单卡推理)
  • 模型精度: bfloat16
  • 注意力后端: SDPA

推理性能

MOSS-SoundEffect 使用延迟模式 (delay pattern) 自回归生成,多通道 VQ tokens 并行解码。模型固定生成约 10s 音频。

max_tokens平均延迟 (s)生成音频时长 (s)RTF
12812.998.961.45
25613.6010.081.35
51213.6910.081.36
102413.7910.111.37

注:RTF > 1 表示推理时间稍长于音频时长。延迟与 token 数量几乎无关,因为模型通过 delay pattern 并行解码大部分 VQ tokens。

显存占用

指标占用
模型加载后22.30 GB
推理峰值22.37 GB
推理增量0.07 GB

注:22.30 GB 包含 MOSS-SoundEffect (8.36B, bfloat16) + MOSS-Audio-Tokenizer (1.77B) + KV Cache。RTF 为推理时间与生成音频时长之比。

RTF (Real-Time Factor) 是推理时间与生成音频时长的比值,RTF < 1 表示推理速度快于实时播放。

运行性能评测:

python benchmark_perf.py

模型文件说明

文件说明
inference_npu.pyNPU 推理脚本
evaluate_accuracy.py精度评测脚本
benchmark_perf.py性能评测脚本
modeling_moss_tts.py模型定义 (原始)
processing_moss_tts.py处理器 (原始)
configuration_moss_tts.py配置类 (原始)
inference_utils.py推理工具函数 (原始)
evaluation_results/评测结果输出目录
outputs_npu/推理输出目录

支持的声音类型

  • 自然环境: 雷声、雨声、风声、雪地脚步声
  • 城市环境: 汽车轰鸣、高速公路、街道氛围
  • 动物声音: 鸟鸣、虫鸣
  • 人类动作: 脚步回声、掌声

引用

本模型基于 OpenMOSS 团队的 MOSS-SoundEffect 模型适配昇腾 NPU。

@misc{MOSS-TTS,
  author = {OpenMOSS Team},
  title = {MOSS-TTS Family},
  year = {2026},
  publisher = {MOSI.AI},
}

License

Apache 2.0