g
gyccc/google-efficientnet-b0-NPU
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

google/efficientnet-b0 NPU 适配工程

模型介绍

EfficientNet-B0 是 Google 提出的 EfficientNet 系列中的基线模型,通过复合缩放(Compound Scaling)均衡地扩展网络的深度、宽度和分辨率,在 ImageNet 分类任务上取得了优异的精度-效率权衡。本工程将其适配到华为昇腾 NPU,使用 Transformers 和 torch_npu 完成图片分类推理。

  • 模型名称:google/efficientnet-b0
  • 模型链接:https://ai.gitcode.com/hf_mirrors/google/efficientnet-b0
  • 任务类型:图片识别 / image-classification
  • 运行方式:Transformers + torch_npu
  • 硬件:单卡 Ascend NPU

硬件环境

项目配置
NPU 型号Ascend 910B4
NPU 数量1 卡
驱动状态OK

软件环境

项目版本
Python3.11.14
torch2.9.0+cpu
torch_npu2.9.0.post1+gitee7ba04
transformers4.57.6
PIL12.2.0
numpy1.26.4

依赖安装

pip install -r requirements.txt

注意:如果环境中已安装 torch 和 torch_npu,请勿强制覆盖,以免破坏现有 CANN 兼容性。

模型权重来源

模型权重通过 Hugging Face Transformers 自动下载。若无法直连 Hugging Face,脚本已内置环境变量:

os.environ.setdefault("HF_ENDPOINT", "https://hf-mirror.com")

运行时将从 hf-mirror.com 镜像站下载 google/efficientnet-b0 的 processor 和 model 权重。

NPU 推理运行命令

inference.py —— 单张图片推理

python inference.py

功能说明:

  • 加载 google/efficientnet-b0 的 image processor 和 classification model
  • 优先将模型部署到 npu:0
  • 若 NPU 不可用,不会静默降级到 CPU,而是明确报错并退出
  • 读取 assets/test.jpg,执行一次真实 NPU 推理
  • 输出 Top-5 分类结果
  • 完整日志保存到 logs/inference.log
  • 预测标签和置信度保存到 logs/prediction.txt

实际运行结果(占位图):

排名标签置信度
1velvet0.053031
2doormat, welcome mat0.041187
3wool, woolen, woollen0.027512
4tennis ball0.025194
5vulture0.021951

注意:assets/test.jpg 为本地生成的占位图(224x224 随机 RGB),由于图片内容无实际语义,分类结果为随机分布。如需真实分类效果,请替换为真实图片。

eval_accuracy.py —— 精度验证

python eval_accuracy.py

功能说明:

  • 使用同一张 assets/test.jpg
  • 固定预处理流程
  • 分别在 CPU 和 NPU 上运行同一模型
  • 对比 CPU logits 与 NPU logits
  • 计算 max_abs_diff、mean_abs_diff、prob_max_diff、top1_match
  • 判断概率误差是否小于 1%
  • 结果保存到 logs/accuracy.log

实际运行结果:

指标数值
Max absolute logits diff0.007120
Mean absolute logits diff0.001538
Max probability diff0.000256
Top-1 matchTrue
结论PASS

结论:概率差异小于 1% 且 Top-1 一致,NPU 推理精度与 CPU baseline 对齐。logits 存在微小差异属于 CPU/NPU 浮点实现差异的正常范围。

benchmark.py —— 性能测试

python benchmark.py

功能说明:

  • 使用 google/efficientnet-b0 和 assets/test.jpg
  • NPU 预热 5 次
  • 正式测试 20 次
  • 统计平均/最小/最大推理延迟
  • 计算 images/s
  • 结果保存到 logs/benchmark.log

实际运行结果:

指标数值
Average latency0.015683 s
Min latency0.014857 s
Max latency0.016914 s
Throughput63.76 img/s

日志文件说明

文件说明
logs/env_check.log环境检查结果(NPU 信息、Python/依赖版本)
logs/inference.loginference.py 完整运行日志
logs/prediction.txtTop-1 / Top-5 预测标签与置信度
logs/accuracy.logCPU vs NPU 精度对比结果
logs/benchmark.logNPU 推理性能基准测试结果

常见问题

Q1:模型下载失败或连接超时? A:脚本已设置 HF_ENDPOINT=https://hf-mirror.com。如需使用其他镜像,可修改脚本中的环境变量或在外部设置 export HF_ENDPOINT=https://your-mirror.com。

Q2:NPU 不可用? A:请检查 npu-smi info 输出是否正常,确认 Ascend 驱动和 CANN 环境变量(如 ASCEND_HOME_PATH)已正确配置。

Q3:测试图片是随机图,预测结果没有实际意义? A:正确。由于当前环境无法联网下载真实图片,assets/test.jpg 是本地生成的占位图。请替换为真实图片以获得有意义的分类结果。

Q4:是否使用了 vLLM / TP / EP / DP / MoE? A:本工程为图片分类任务,未使用 vLLM,也未使用 TP、EP、DP、MoE 等分布式优化。

标签

#NPU #Ascend #EfficientNet #ImageClassification #Transformers #torch_npu