本文档记录 efficientvit_b2.r288_in1k 在华为昇腾 Ascend 910B NPU 上的适配、部署与验证结果。
原始模型地址:https://www.modelscope.cn/models/timm/efficientvit_b2.r288_in1k
| 组件 | 版本 |
|---|---|
| CANN | 8.5.1 |
| torch | 2.9.0 |
| torch_npu | 2.9.0.post1 |
| timm | 1.0.27 |
| torchvision | 0.24.0 |
| modelscope | 1.35.3 |
| NPU | Ascend 910B (32GB HBM) |
| OS | Linux 5.10.0 aarch64 |
# 安装依赖(使用清华 PyPI 镜像)
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple torch torch_npu timm torchvision pillow numpy modelscope safetensors
# 确保 CANN 和 torch_npu 已正确安装
python3 -c "import torch; import torch_npu; print('NPU available:', torch.npu.is_available())"# 从 ModelScope 下载
python3 -c "
from modelscope import snapshot_download
path = snapshot_download('timm/efficientvit_b2.r288_in1k', cache_dir='./model')
print(f'Model downloaded to: {path}')
"# CPU 推理
python3 inference.py --device cpu
# NPU 推理
python3 inference.py --device npu
# 从本地模型目录加载
python3 inference.py --device npu --model_path ./model/timm/efficientvit_b2.r288_in1k# 自动从 HuggingFace 下载并对比
python3 compare_cpu_npu.py
# 使用本地模型目录
python3 compare_cpu_npu.py --model_path ./model/timm/efficientvit_b2.r288_in1k验证方法:在 CPU 和 NPU 上分别加载同一模型权重,使用相同随机输入(固定随机种子)运行推理,对比输出 logits。
| 测试编号 | CPU Top-1 | NPU Top-1 | Top-1 一致 | Top-5 重叠 | 相对误差 | 余弦相似度 | 状态 |
|---|---|---|---|---|---|---|---|
| 1 | 21 | 21 | True | 5/5 | 0.3512% | 0.99999993 | PASS |
| 2 | 21 | 21 | True | 5/5 | 0.2632% | 0.99999990 | PASS |
| 3 | 21 | 21 | True | 5/5 | 0.2185% | 0.99999990 | PASS |
| 4 | 21 | 21 | True | 5/5 | 0.2725% | 0.99999993 | PASS |
| 5 | 21 | 21 | True | 5/5 | 0.2429% | 0.99999992 | PASS |
| 指标 | 数值 |
|---|---|
| 测试用例数 | 5 |
| Top-1 一致数 | 5/5 |
| Top-5 完全重叠 | 5/5 |
| 平均 MAE | 2.805256e-03 |
| 平均相对误差 | 0.2697% |
| 平均余弦相似度 | 0.99999991 |
| 精度要求 | NPU vs CPU 误差 < 1% |
| 精度结论 | ✅ 通过 (误差 0.2697% < 1%) |
| 总体状态 | PASS |
结论:NPU 与 CPU 推理结果误差 < 1%。
| 指标 | CPU 推理耗时 | NPU 推理耗时 | 加速比 |
|---|---|---|---|
| 平均延迟 | 115.5ms | 11.8ms | N/A |
.
├── model/ # 模型权重(从 ModelScope 下载)
├── inference.py # NPU/CPU 推理脚本
├── compare_cpu_npu.py # CPU/NPU 精度对比脚本
├── accuracy_report.json # 精度测试报告
├── requirements.txt # 依赖清单
├── terminal_screenshot.png # 推理终端截图
└── README.md # 本文档torch_npu 将 PyTorch 模型迁移至 Ascend NPUmodel.to(device) 将模型参数移至 NPUtorch.npu.synchronize() 同步确保计时准确model.to(torch.device('npu:0')) 将模型部署到 NPUtorch.npu.empty_cache() 释放 NPU 显存
torch_npu 会有设备替换警告,属正常现象torch.no_grad() 上下文进行推理以节省显存torch.npu.empty_cache() 释放 NPU 显存#NPU #Ascend #CV #图像分类 #EfficientViT #timm #昇腾
适配方:Ascend NPU Adaptation 仓库地址:https://gitcode.com/gcw_GSiqzzLf/efficientvit_b2-r288_in1k-npu
以下日志展示了 NPU 推理成功的关键信息:
Device: cpu
Test 1: Top-1=21 prob=0.097923 time=115.7ms
Test 2: Top-1=21 prob=0.069808 time=114.8ms
Test 3: Top-1=21 prob=0.028503 time=115.8ms
Test 4: Top-1=21 prob=0.059820 time=115.4ms
Test 5: Top-1=21 prob=0.058348 time=115.7ms