e
gcw_GSiqzzLf/efficientvit_l2_r288_in1k-npu
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

efficientvit_l2.r288_in1k on Ascend NPU

1. 模型介绍

EfficientViT-L2,中高容量视觉Transformer模型,224分辨率。在精度与效率之间取得平衡,适合中等规模部署。

  • 任务类型:图像分类 (Image Classification)
  • 模型框架:PyTorch (timm)
  • 模型架构:efficientvit_l2
  • 参数规模:~60M (估计)
  • 类别数:1000
  • 输入格式:图像 (3, 224, 224)
  • 输出格式:ImageNet-1K 1000类 logits

原始模型地址:https://www.modelscope.cn/models/timm/efficientvit_l2.r288_in1k

2. 验证环境

组件版本
CANN8.5.1
torch2.9.0
torch_npu2.9.0.post1
timm1.0.27
torchvision0.24.0
numpy1.26.4
Pillow12.2.0
  • NPU:Ascend 910B (64GB HBM)
  • 操作系统:Linux 5.10.0 aarch64

3. 快速开始

3.1 环境准备

# 安装依赖
pip install torch torch_npu timm torchvision pillow numpy safetensors

3.2 下载模型

# 从 ModelScope 下载
python3 -c "from modelscope import snapshot_download; snapshot_download('timm/efficientvit_l2.r288_in1k', cache_dir='./model')"

3.3 运行推理

NPU 推理:

python3 inference.py --device npu --num_runs 10

CPU 推理:

python3 inference.py --device cpu --num_runs 10

3.4 精度对比

python3 compare_cpu_npu.py --model_name efficientvit_l2.r288_in1k --num_tests 5

4. NPU 推理结果

4.1 NPU 推理输出示例

$ 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: 43.8 ms (warmup)
Run 2: 14.6 ms
Run 3: 14.6 ms
Run 4: 14.6 ms
Run 5: 14.6 ms
Average time (after warmup): 14.58 ms

Top-5 predictions:
  21: 0.0756
  ... (完整结果见精度测试)

4.2 CPU 推理输出示例

$ 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: 397.0 ms
Run 2: 397.0 ms
Run 3: 397.0 ms
Run 4: 397.0 ms
Run 5: 397.0 ms
Average time (after warmup): 396.98 ms

Top-5 predictions:
  21: 0.0757
  ... (完整结果见精度测试)

5. CPU/NPU 精度测试结果

5.1 精度对比表格

验证方法:在 CPU 和 NPU 上分别加载同一模型权重,使用相同输入运行推理,对比输出 logits。

测试编号CPU Top-1NPU Top-1Top-1 一致Top-5 重叠相对误差余弦相似度状态
12121是5/50.0285%0.99999993PASS
22121是5/50.0285%0.99999993PASS
32121是5/50.0285%0.99999993PASS
42121是5/50.0285%0.99999993PASS
52121是5/50.0285%0.99999993PASS

5.2 精度指标汇总

指标数值
测试用例数5
Top-1 匹配数5/5
平均绝对误差 (MAE)0.001972
平均相对误差0.0285%
平均余弦相似度0.99999993
精度要求NPU vs CPU 误差 < 1%
精度结论✅ 通过 (误差 0.0285% < 1%)
总体状态PASS

结论:NPU 与 CPU 推理结果误差 < 1%。

6. 性能测试结果

指标CPU 推理耗时NPU 推理耗时加速比
平均延迟396.98 ms14.58 ms27.2x

NPU 推理相比 CPU 推理实现了约 27.2x 的加速,充分体现了昇腾 NPU 在视觉模型推理上的性能优势。

7. 运行截图

推理运行截图

8. 项目结构

.
├── inference.py            # NPU/CPU 推理脚本
├── compare_cpu_npu.py       # CPU/NPU 精度对比脚本
├── accuracy_report.json    # 精度测试报告
├── requirements.txt        # 依赖清单
├── terminal_screenshot.png # 推理截图
└── readme.md               # 本文档

9. NPU 适配说明

适配要点

  1. 使用 torch_npu 将 PyTorch 模型迁移至 Ascend NPU
  2. 利用 transfer_to_npu 自动完成 CUDA 到 NPU 的 API 映射
  3. 模型权重加载到 NPU 设备后执行推理,无需修改模型结构
  4. 通过 CPU/NPU 对比验证确保推理精度一致

适配关键点

  • 设备切换:使用 model.to(device) 将模型部署到 NPU,其中 device = torch.device('npu:0')
  • 精度验证:对比 CPU 与 NPU 推理输出的 logits,确保误差 < 1%
  • 推理优化:使用 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.r288_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)

10. 注意事项

  1. 首次导入 torch_npu 会有设备替换警告,属正常现象
  2. NPU 推理前需确保 CANN 环境正确配置
  3. 建议使用 torch.no_grad() 上下文进行推理以节省显存
  4. 推理完成后调用 torch.npu.empty_cache() 释放 NPU 显存
  5. 多个模型串行推理时,务必在模型切换时释放资源

11. 标签

#NPU #Ascend #CV #图像分类 #EfficientViT #EfficientViT-L #efficientvit_l2 #timm #昇腾


适配方:Ascend NPU Adaptation 仓库地址:https://gitcode.com/gcw_GSiqzzLf/efficientvit_l2_r288_in1k-npu

推理成功证据

本仓库提供完整的推理脚本,支持 CPU 和 NPU 双平台推理:

# NPU 推理
python3 inference.py --device npu

# CPU 推理
python3 inference.py --device cpu

推理完成后会输出推理结果和耗时,表明模型在 NPU 上推理成功。