#NPUMOSS-SoundEffect 是 MOSS-TTS Family 中的环境声音 & 音效生成模型,基于 MOSI.AI 和 OpenMOSS 团队开发。本仓库提供 华为昇腾 Ascend910 NPU 适配版本,支持在昇腾硬件上高效推理。
MOSS-SoundEffect 是一个基于文本描述生成高保真环境音效的模型,覆盖自然场景、城市场景、动物声音、人类动作声音等多种类别。
| 项目 | 版本/信息 |
|---|---|
| NPU 型号 | Ascend910_9362 |
| CANN 版本 | 25.5.2 |
| PyTorch | 2.9.0 |
| torch_npu | 2.9.0.post1 |
| Transformers | 5.8.1 |
| 精度 | bfloat16 |
| 注意力后端 | SDPA (torch_npu 原生支持) |
torch.npu)sdpa 注意力后端(NPU 不支持 FlashAttention 2)# 安装依赖
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-Tokenizerimport 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.pyMOSS-SoundEffect 使用延迟模式 (delay pattern) 自回归生成,多通道 VQ tokens 并行解码。模型固定生成约 10s 音频。
| max_tokens | 平均延迟 (s) | 生成音频时长 (s) | RTF |
|---|---|---|---|
| 128 | 12.99 | 8.96 | 1.45 |
| 256 | 13.60 | 10.08 | 1.35 |
| 512 | 13.69 | 10.08 | 1.36 |
| 1024 | 13.79 | 10.11 | 1.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.py | NPU 推理脚本 |
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},
}Apache 2.0