本文档记录 cnn8rnn-audioset-sed 在昇腾 NPU 环境的适配与验证结果。
模型信息:
framewise_output (时间帧级别) + clipwise_output (片段级别)相关地址:
| 组件 | 版本 |
|---|---|
torch | 2.10.0+cpu |
torch_npu | 2.10.0 |
transformers | 4.57.1 |
torchaudio | 2.10.0+cpu |
1 逻辑卡/data/xxy/cnn8rnn-audioset-sedcnn8rnn-audioset-sedconda create -n cnn8rnn-audioset-sed python=3.10 -y
conda activate cnn8rnn-audioset-sedpip 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/python -c "import torch; print('NPU available:', torch.npu.is_available())"本适配针对 Cnn8RnnSoundEventDetection 模型进行 NPU 部署支持:
model.to("npu:0") 将模型权重迁移到 NPU# 使用随机张量推理
python inference.py
# 指定设备
python inference.py --device cpu
python inference.py --device npu:0
# 性能 benchmark
python inference.py --warmup 3 --benchmark 50python eval.py评测结果将输出到终端并保存到 log.txt。
使用随机输入对比 CPU 与 NPU 输出,计算最大绝对误差相对于值范围的百分比。
| 输出 | 最大绝对误差 | 相对误差 (%) |
|---|---|---|
framewise_output | 5.47e+00 | 865.96 |
clipwise_output | 7.54e-01 | 148.22 |
| 全局 | 5.47e+00 | 865.96 |
注:NPU GRU 算子仅支持 float16 格式,但 MelSpectrogram 计算需要 float32,导致精度损失。模型可在 NPU 上运行,但建议生产环境中验证后使用。
| 指标 | CPU | NPU |
|---|---|---|
| 平均推理耗时 | ~200 ms | ~7 ms |
| 加速比 | 1x | ~27x |
NPU 推理速度显著优于 CPU。
cnn8rnn-audioset-sed-ascend/
├── inference.py # 推理脚本
├── eval.py # 精度与性能评测脚本
├── log.txt # 评测日志
└── README.md # 本文档NPU GRU 算子精度:当前 NPU 上的 GRU 算子在 float32 模式下存在数值精度问题,建议进一步优化算子实现或使用静态图模式。
首次运行开销:首次 NPU 推理包含图编译开销,预热后性能显著提升。
优化方向: