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. 昇腾上落地(本仓库重点)
维度 内容 模型 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 硬件
组件 规格 NPU Ascend910 (910_9362) Host CPU 鲲鹏 64核 @ 2.6GHz Host 内存 229GB
2.2 软件
组件 版本(已验证) Python 3.11.14 PyTorch 2.9.0 torch_npu 2.9.0.post1 CANN 8.5.1 timm 1.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 Python 3.11.14 / PyTorch 2.9.0 + torch_npu CANN 8.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) 1 7.90 128.32 153.0 2 7.78 257.07 153.7 4 7.89 507.26 155.2 8 10.40 768.99 157.9 16 16.92 945.82 161.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 # 结构化测评数据