we166488/regnety_080.ra3_in1k
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

RegNetY-080 — 昇腾 Ascend910 NPU 适配版

论文:Designing Network Design Spaces (Radosavovic et al., CVPR 2020)

本仓库在华为昇腾 Ascend910 NPU 上完成模型推理适配、精度验证与性能基准测试

RegNetY-080 (8GF) 是 Meta AI 提出的 RegNet 系列中的经典图像分类模型,由 Ross Wightman 在 timm 中实现并训练。本仓库将该模型迁移至 PyTorch + torch_npu + CANN 生态,无需任何代码改造即可在昇腾 NPU 上跑通推理,精度与 CPU 基线高度一致。


目录

  • 1. 昇腾上落地(本仓库重点)
  • 2. 环境要求
  • 3. 快速开始
  • 4. 推理 API
  • 5. 精度与性能评测
  • 6. 已知限制与后续优化方向
  • 7. 引用与许可

1. 昇腾上落地(本仓库重点)

维度内容
模型RegNetY-080 (ra3_in1k)
任务ImageNet-1k 图像分类
昇腾芯片Ascend910 (910_9362)
推理框架PyTorch 2.9.0 + torch_npu + CANN 8.5.1
输入尺寸3 × 224 × 224 RGB
数据类型FP32
验证状态精度验证通过(最大相对误差 0.018%,Top-5 一致)
性能基准通过(bs=1 延迟 ~8ms,bs=16 吞吐 ~946 imgs/s)

适配说明

RegNetY-080 为纯 PyTorch 标准算子实现,无需任何代码改造即可直接在昇腾 NPU 上运行。只需将模型和输入张量通过 .to('npu') 迁移至 NPU 设备,即可完成推理加速。


2. 环境要求

2.1 硬件

组件规格
NPUAscend910 (910_9362)
Host CPU鲲鹏 64核 @ 2.6GHz
Host 内存229GB

2.2 软件

组件版本(已验证)
Python3.11.14
PyTorch2.9.0
torch_npu2.9.0.post1
CANN8.5.1
timm1.0.27
numpy, Pillow, torchvision最新版
# 核心依赖
pip install torch==2.9.0 timm torchvision Pillow

# torch_npu 需与 CANN 版本匹配
pip install torch_npu==2.9.0.post1

3. 快速开始

3.1 一键精度验证

python npu_infer_regnety080.py

输出示例:

Max relative error: 0.0180%    <<  1% 阈值  ✅
Mean relative error: 0.4460%   <<  1% 阈值  ✅
Top-5 match: True              ✅

3.2 性能基准测试

python benchmark_regnety080.py

3.3 单张图片推理

python inference.py --image /path/to/your/image.jpg --device npu --topk 5

输出示例:

[INFO] 使用设备: npu
[INFO] 加载模型: .../pytorch_model.bin
[INFO] 预处理图片: /path/to/your/image.jpg
[INFO] 开始推理...

[INFO] 推理结果 (Top-5):
  #1: Class  111  —  Confidence: 19.25%
  #2: Class  976  —  Confidence: 5.01%
  #3: Class  644  —  Confidence: 2.45%
  #4: Class  974  —  Confidence: 1.74%
  #5: Class   20  —  Confidence: 1.28%

4. 推理 API

4.1 inference.py — 统一推理入口

参数说明默认值
--image输入图片路径必填
--model_path模型权重路径本地缓存路径
--device推理设备 (npu / cpu)npu
--topk输出 Top-K 结果5
# NPU 推理
python inference.py --image test.jpg --device npu

# CPU 对比
python inference.py --image test.jpg --device cpu

4.2 Python API

import torch
import torch_npu
import timm

# 加载模型
model = timm.create_model('regnety_080.ra3_in1k', pretrained=False)
model.load_state_dict(torch.load('pytorch_model.bin', map_location='cpu'))
model.to('npu').eval()

# 构造输入
x = torch.randn(1, 3, 224, 224).to('npu')

# 推理
with torch.no_grad():
    output = model(x)

5. 精度与性能评测

5.1 测试环境

项目值
NPU 硬件Ascend910 (910_9362)
Host CPU鲲鹏 64核 @ 2.6GHz
输入尺寸1 × 3 × 224 × 224
Python3.11.14 / PyTorch 2.9.0 + torch_npu
CANN8.5.1

5.2 精度验证 (CPU vs NPU)

指标值
最大绝对误差7.78e-05
平均绝对误差1.44e-05
最大相对误差0.0180% ✅(远低于 1% 阈值)
平均相对误差0.4460% ✅(远低于 1% 阈值)
Top-5 一致性100% 匹配

5.3 性能基准

单样本延迟 (Batch Size = 1)

指标数值
平均延迟8.12 ms
P50 延迟8.12 ms
P99 延迟8.22 ms
吞吐量123.15 imgs/s

不同 Batch Size 吞吐量

Batch Size延迟 (ms/batch)吞吐量 (imgs/s)内存占用 (MB)
17.90128.32153.0
27.78257.07153.7
47.89507.26155.2
810.40768.99157.9
1616.92945.82161.7

趋势说明:

  • Batch Size 1~4 时,单 batch 延迟保持稳定(约 8ms),吞吐量随 batch 线性增长。
  • Batch Size 8~16 时,单 batch 延迟开始上升,但总体吞吐量继续增长,在 bs=16 时达到峰值 945.82 imgs/s。
  • 内存占用随 batch size 增长缓慢,bs=16 时仅占用约 162MB,远小于 Ascend910 HBM 容量。

5.4 资源占用

指标数值
峰值 HBM 显存508.93 MB
bs=1 静态显存~153 MB

6. 已知限制与后续优化方向

已知限制

限制说明
无代码层优化本模型为标准 timm 实现,未做昇腾亲和算子替换(如 npu_rms_norm 等),当前为即插即用适配
单卡测试当前仅在单卡 Ascend910 上验证,未测试多卡并行
仅推理验证未覆盖训练阶段的 NPU 适配与验证

后续优化方向

方向预期收益说明
亲和算子替换延迟降低评估 torch_npu 融合算子替换部分标准算子
多卡并行吞吐量提升支持多 NPU 卡并行推理
量化部署延迟/吞吐平衡支持 FP16 / INT8 量化推理
端到端训练功能性提升支持 NPU 全流程训练

7. 引用与许可

引用

@InProceedings{Radosavovic2020,
  title = {Designing Network Design Spaces},
  author = {Radosavovic, Ilija and Kosaraju, Raj Prateek and Girshick, Ross and He, Kaiming and Doll{\'a}r, Piotr},
  booktitle = {CVPR},
  year = {2020}
}
@misc{rw2019timm,
  author = {Ross Wightman},
  title = {PyTorch Image Models},
  year = {2019},
  publisher = {GitHub},
  journal = {GitHub repository},
  doi = {10.5281/zenodo.4414861}
}

许可

本仓库基于 Apache 2.0 License 开源。

目录结构

regnety_080.ra3_in1k/
├── inference.py                 # 统一推理入口 (NPU 适配)
├── npu_infer_regnety080.py      # 精度验证脚本
├── benchmark_regnety080.py      # 性能基准测评脚本
├── VALIDATION_SUMMARY.md        # 验证总结
├── README.md                    # 本文档
├── logs/
│   ├── logs_npu_infer_regnety080.txt   # 精度验证日志
│   ├── logs_benchmark_regnety080.txt   # 性能测评日志
│   └── logs_inference_real.txt         # 真实图片推理日志
└── benchmark_results.json       # 结构化测评数据