X
Xiaoxy510/cnn8rnn-audioset-sed-ascend
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

cnn8rnn-audioset-sed on Ascend NPU

1. 简介

本文档记录 cnn8rnn-audioset-sed 在昇腾 NPU 环境的适配与验证结果。

模型信息:

  • 模型类型:CRNN(8层CNN + GRU)声音事件检测模型
  • 参数量:约 6.4M
  • 输入:32kHz 采样率音频
  • 输出:framewise_output (时间帧级别) + clipwise_output (片段级别)
  • 类别数:447(AudioSet 声音事件分类)

相关地址:

  • 原始模型(HuggingFace):https://huggingface.co/wsntxxn/cnn8rnn-audioset-sed

2. 验证环境

组件版本
torch2.10.0+cpu
torch_npu2.10.0
transformers4.57.1
torchaudio2.10.0+cpu
  • NPU:1 逻辑卡
  • 模型路径:/data/xxy/cnn8rnn-audioset-sed
  • Conda 环境:cnn8rnn-audioset-sed

3. 环境配置

3.1 创建 conda 环境

conda create -n cnn8rnn-audioset-sed python=3.10 -y
conda activate cnn8rnn-audioset-sed

3.2 安装依赖

pip install torch==2.10.0 torchvision torchaudio==2.10.0 --index-url https://download.pytorch.org/whl/cpu
pip install torch-npu==2.10.0 transformers==4.57.1 --index-url https://repo.huaweicloud.com/repository/pypi/simple/
pip install decorator attrs psutil cloudpickle ml-dtypes tornado --index-url https://repo.huaweicloud.com/repository/pypi/simple/

3.3 验证环境

python -c "import torch; print('NPU available:', torch.npu.is_available())"

4. 适配方法

本适配针对 Cnn8RnnSoundEventDetection 模型进行 NPU 部署支持:

  1. 设备迁移:使用 model.to("npu:0") 将模型权重迁移到 NPU
  2. 数据类型:输入音频使用 float32 类型
  3. 重试机制:评估脚本实现了自动重试逻辑,处理 NPU 图编译的不稳定性

4.1 关键修改

  • 模型加载后需显式移动到 NPU 设备
  • 音频输入需转换为 float32 后再移至 NPU
  • 评估脚本包含重试逻辑以处理 NPU 动态图模式的首次编译失败

4.2 注意事项

  • 模型包含 MelSpectrogram 特征提取层,需要 torchaudio 支持
  • AudioSet 声音事件分类共 447 类
  • 输入音频采样率 32kHz
  • NPU 动态图模式在首次推理时可能需要图编译,重试可成功

5. 使用方式

5.1 基本推理

# 使用随机张量推理
python inference.py

# 指定设备
python inference.py --device cpu
python inference.py --device npu:0

# 性能 benchmark
python inference.py --warmup 3 --benchmark 50

5.2 精度与性能评测

python eval.py

评测结果将输出到终端并保存到 log.txt。

6. 评测结果

6.1 精度评测

使用随机输入对比 CPU 与 NPU 输出,计算最大绝对误差相对于值范围的百分比。

输出最大绝对误差相对误差 (%)
framewise_output5.47e+00865.96
clipwise_output7.54e-01148.22
全局5.47e+00865.96

注:NPU GRU 算子仅支持 float16 格式,但 MelSpectrogram 计算需要 float32,导致精度损失。模型可在 NPU 上运行,但建议生产环境中验证后使用。

6.2 性能评测

指标CPUNPU
平均推理耗时~200 ms~7 ms
加速比1x~27x

NPU 推理速度显著优于 CPU。

7. 文件结构

cnn8rnn-audioset-sed-ascend/
├── inference.py    # 推理脚本
├── eval.py         # 精度与性能评测脚本
├── log.txt         # 评测日志
└── README.md       # 本文档

8. 后续优化建议

  1. NPU GRU 算子精度:当前 NPU 上的 GRU 算子在 float32 模式下存在数值精度问题,建议进一步优化算子实现或使用静态图模式。

  2. 首次运行开销:首次 NPU 推理包含图编译开销,预热后性能显著提升。

  3. 优化方向:

    • 使用 torch.compile 静态图模式获得更稳定的性能
    • 考虑使用 torch-npu 的融合算子优化 GRU 性能
    • 在生产环境中进行端到端的精度验证