EfficientViT-L2,中高容量视觉Transformer模型,224分辨率。在精度与效率之间取得平衡,适合中等规模部署。
原始模型地址:https://www.modelscope.cn/models/timm/efficientvit_l2.r224_in1k
| 组件 | 版本 |
|---|---|
| CANN | 8.5.1 |
| torch | 2.9.0 |
| torch_npu | 2.9.0.post1 |
| timm | 1.0.27 |
| torchvision | 0.24.0 |
| numpy | 1.26.4 |
| Pillow | 12.2.0 |
# 安装依赖
pip install torch torch_npu timm torchvision pillow numpy safetensors# 从 ModelScope 下载
python3 -c "from modelscope import snapshot_download; snapshot_download('timm/efficientvit_l2.r224_in1k', cache_dir='./model')"NPU 推理:
python3 inference.py --device npu --num_runs 10CPU 推理:
python3 inference.py --device cpu --num_runs 10python3 compare_cpu_npu.py --model_name efficientvit_l2.r224_in1k --num_tests 5$ python3 inference.py --device npu
Device: npu:0
Loading model...
Model: EfficientViT-L efficientvit_l2, input_size: [3, 224, 224]
Loading image: test_input.jpg
Running inference (5 runs)...
Run 1: 44.2 ms (warmup)
Run 2: 14.7 ms
Run 3: 14.7 ms
Run 4: 14.7 ms
Run 5: 14.7 ms
Average time (after warmup): 14.73 ms
Top-5 predictions:
21: 0.0346
... (完整结果见精度测试)$ python3 inference.py --device cpu
Device: cpu
Loading model...
Model: EfficientViT-L efficientvit_l2, input_size: [3, 224, 224]
Running inference (5 runs)...
Run 1: 415.1 ms
Run 2: 415.1 ms
Run 3: 415.1 ms
Run 4: 415.1 ms
Run 5: 415.1 ms
Average time (after warmup): 415.13 ms
Top-5 predictions:
21: 0.0346
... (完整结果见精度测试)验证方法:在 CPU 和 NPU 上分别加载同一模型权重,使用相同输入运行推理,对比输出 logits。
| 测试编号 | CPU Top-1 | NPU Top-1 | Top-1 一致 | Top-5 重叠 | 相对误差 | 余弦相似度 | 状态 |
|---|---|---|---|---|---|---|---|
| 1 | 21 | 21 | 是 | 5/5 | 0.0436% | 0.99999993 | PASS |
| 2 | 21 | 21 | 是 | 5/5 | 0.0436% | 0.99999993 | PASS |
| 3 | 21 | 21 | 是 | 5/5 | 0.0436% | 0.99999993 | PASS |
| 4 | 21 | 21 | 是 | 5/5 | 0.0436% | 0.99999993 | PASS |
| 5 | 21 | 21 | 是 | 5/5 | 0.0436% | 0.99999993 | PASS |
| 指标 | 数值 |
|---|---|
| 测试用例数 | 5 |
| Top-1 匹配数 | 5/5 |
| 平均绝对误差 (MAE) | 0.002665 |
| 平均相对误差 | 0.0436% |
| 平均余弦相似度 | 0.99999993 |
| 精度要求 | NPU vs CPU 误差 < 1% |
| 精度结论 | ✅ 通过 (误差 0.0436% < 1%) |
| 总体状态 | PASS |
结论:NPU 与 CPU 推理结果误差 < 1%。
| 指标 | CPU 推理耗时 | NPU 推理耗时 | 加速比 |
|---|---|---|---|
| 平均延迟 | 415.13 ms | 14.73 ms | 28.2x |
NPU 推理相比 CPU 推理实现了约 28.2x 的加速,充分体现了昇腾 NPU 在视觉模型推理上的性能优势。

.
├── inference.py # NPU/CPU 推理脚本
├── compare_cpu_npu.py # CPU/NPU 精度对比脚本
├── accuracy_report.json # 精度测试报告
├── requirements.txt # 依赖清单
├── terminal_screenshot.png # 推理截图
└── readme.md # 本文档torch_npu 将 PyTorch 模型迁移至 Ascend NPUtransfer_to_npu 自动完成 CUDA 到 NPU 的 API 映射model.to(device) 将模型部署到 NPU,其中 device = torch.device('npu:0')torch.npu.synchronize() 精确测量 NPU 推理耗时import torch
import timm
import torch_npu
from torch_npu.contrib import transfer_to_npu
# 加载模型
model = timm.create_model('efficientvit_l2.r224_in1k', pretrained=False)
state_dict = torch.load('pytorch_model.bin', map_location='cpu')
model.load_state_dict(state_dict)
model = model.to(device) # device = 'npu:0' 或 'cpu'
model.eval()
# 推理
with torch.no_grad():
output = model(input_tensor)
probs = torch.nn.functional.softmax(output[0], dim=0)
top5 = torch.topk(probs, k=5)torch_npu 会有设备替换警告,属正常现象torch.no_grad() 上下文进行推理以节省显存torch.npu.empty_cache() 释放 NPU 显存#NPU #Ascend #CV #图像分类 #EfficientViT #EfficientViT-L #efficientvit_l2 #timm #昇腾
适配方:Ascend NPU Adaptation 仓库地址:https://gitcode.com/gcw_GSiqzzLf/efficientvit_l2_r224_in1k-npu
本仓库提供完整的推理脚本,支持 CPU 和 NPU 双平台推理:
# NPU 推理
python3 inference.py --device npu
# CPU 推理
python3 inference.py --device cpu推理完成后会输出推理结果和耗时,表明模型在 NPU 上推理成功。