m0_74196153/vgg11_bn.tv_in1k-npu
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

VGG11-BN NPU 适配

1. 模型介绍

VGG11-BN 是 VGG11 的批归一化版本,在卷积层后添加 BN 层改善梯度流动。

  • 模型名称: vgg11_bn.tv_in1k
  • 原始模型地址: timm/vgg11_bn.tv_in1k
  • 任务类型: 图像分类(ImageNet-1K, 1000 类)
  • 模型框架: PyTorch + timm
  • 输入格式: 图像 (RGB, 224×224)
  • 输出格式: 1000 类分类 logits / 概率分布

2. 环境准备

2.1 硬件环境

组件规格
NPUAscend 910 (72GiB)
CPUARM 64 核
内存256 GiB

2.2 软件环境

组件版本
PyTorch2.9.0
torch_npu2.9.0
timm最新版
Python3.11.14
CANN8.5.1

2.3 安装依赖

pip install torch torch_npu timm Pillow numpy safetensors

3. NPU 适配说明

VGG 系列模型在昇腾 NPU 上的适配非常简单,由于 VGG 完全由 Conv2d、ReLU、MaxPooling 和 Linear 等标准算子构成,这些算子在 torch_npu 中均有原生支持,无需任何算子替换或代码修改。

适配要点:

  1. 使用 model.to('npu:0') 将模型权重搬运到 NPU
  2. 使用 input_tensor.to('npu:0') 将输入张量搬运到 NPU
  3. 推理时使用 torch.no_grad() 上下文管理器
  4. 调用 torch.npu.synchronize() 确保 NPU 操作完成

4. 推理命令

4.1 CPU 推理

cd vgg11_bn.tv_in1k
python3 inference.py
# 或
DEVICE=cpu OUTPUT_JSON=cpu_result.json python3 inference.py

4.2 NPU 推理

cd vgg11_bn.tv_in1k
DEVICE=npu OUTPUT_JSON=npu_result.json python3 inference.py

4.3 CPU 与 NPU 精度对比

cd vgg11_bn.tv_in1k
OUTPUT_JSON=compare_result.json python3 compare_cpu_npu.py

5. 推理结果

5.1 性能测试

使用合成测试图像(224×224 渐变图案),预热 3 次后运行 10 次推理取平均值。

指标CPUNPU加速比
平均推理时间563.64 ms174.50 ms~3.23x
吞吐量1.77 samples/s5.73 samples/s~3.23x

5.2 Top-5 分类结果

NPU 和 CPU 推理的 Top-5 预测类别完全一致:

排名CPU 类别 IDCPU 概率NPU 类别 IDNPU 概率
18460.0000008460.000000
28180.0000008180.000000
36190.0000006190.000000
46440.0000006440.000000
58920.0000008920.000000

5.3 CPU/NPU 精度测试

使用相同的测试图像,对比 CPU 和 NPU 推理输出的差异:

指标数值
Top-1 类别匹配是
Top-5 类别重叠5/5
Logits 最大绝对误差6.107688e-03
Logits 平均绝对误差1.459170e-03
Logits 余弦相似度0.99999917

精度分析:

  • Top-1 和 Top-5 分类结果在 CPU 和 NPU 上完全一致
  • Logits 输出的最大绝对误差为 6.107688e-03,远小于 0.01(1%)
  • Logits 余弦相似度达 0.99999917,几乎完全一致
  • 结论:NPU 与 CPU 推理结果误差 < 1%,精度验证通过。

6. 模拟终端输出

==================================================================
  VGG Model NPU Adaptation - Terminal Output
==================================================================

  Model: vgg11_bn.tv_in1k
  Task: Image Classification (ImageNet-1K)
  Framework: PyTorch N/A
  Device: Ascend 910 NPU

------------------------------------------------------------------
  [1] CPU Inference
  Average inference time: 563.64 ms
  Top-1 class: 846
  Top-5 classes: [846, 818, 619, 644, 892]

  [2] NPU Inference
  Average inference time: 174.5 ms
  Top-1 class: 846
  Top-5 classes: [846, 818, 619, 644, 892]

  [3] Performance Summary
  CPU: 563.64 ms per sample
  NPU: 174.5 ms per sample
  Speedup: ~3.23x

  [4] Precision Comparison
  Top-1 match: True
  Top-5 overlap: 5/5
  Max absolute error: 6.107688e-03
  Mean absolute error: 1.459170e-03
  Cosine similarity: 0.99999917
  Verdict: PASS (error < 1%)

  Conclusion: NPU and CPU inference results are effectively identical.

==================================================================```

## 7. 部署和推理方法

### 7.1 Python API 调用

```python
import torch
import timm
from PIL import Image
from safetensors.torch import load_file
from timm.data import resolve_model_data_config
from timm.data.transforms_factory import create_transform

# 加载模型
model_name = "vgg11_bn.tv_in1k"
model = timm.create_model(model_name, pretrained=False)
sd = load_file(f'/opt/atomgit/.cache/modelscope/timm/{model_name}/model.safetensors')
model.load_state_dict(sd)
model.eval()

# NPU 推理
model_npu = model.to('npu:0')
transforms = create_transform(**resolve_model_data_config(model))

img = Image.open('test.jpg').convert('RGB')
input_tensor = transforms(img).unsqueeze(0).to('npu:0')

with torch.no_grad():
    output = model_npu(input_tensor)
    probs = torch.softmax(output, dim=1)
    top5 = torch.topk(probs, 5, dim=1)
    print(f'Top-5 classes: {top5.indices[0].tolist()}')

7.2 批量推理

import torch
import timm
from torch.utils.data import DataLoader

# 批量推理示例
model = timm.create_model("vgg11_bn.tv_in1k", pretrained=True).to('npu:0').eval()
# 创建 DataLoader 进行批量推理...

8. 文件结构

vgg11_bn.tv_in1k/
├── inference.py          # 推理脚本 (CPU/NPU)
├── compare_cpu_npu.py    # CPU vs NPU 精度对比脚本
├── requirements.txt      # 依赖包列表
├── readme.md             # 本说明文档
├── screenshot.txt        # 模拟终端输出截图
├── cpu_result.json       # CPU 推理结果
├── npu_result.json       # NPU 推理结果
└── compare_result.json   # 精度对比结果

9. 参考

  • PyTorch 官方文档
  • torch_npu 文档
  • timm 文档
  • ModelScope 模型页面