g
gcw_HxvH3o63/mit_b5_ascend_model
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

nvidia/mit-b5 昇腾 NPU 适配

1. 模型信息

  • 模型名称:nvidia/mit-b5
  • 模型来源:Hugging Face / Transformers
  • 模型类型:ImageNet-1k 图像分类模型
  • 模型结构:MiT-B5 / Mix Transformer B5
  • 输出类别数:1000
  • Top-K:5
  • 推理框架:PyTorch + Hugging Face Transformers + torch-npu
  • 运行设备:Ascend NPU
  • 适配目标:完成 nvidia/mit-b5 模型在昇腾 NPU 环境下的图像分类推理验证,并与 CPU 推理结果进行误差对比。

本项目面向昇腾 Model-Agent 模型适配大赛赛道一,完成 nvidia/mit-b5 图像分类模型在 Ascend NPU 环境下的适配验证。项目基于 PyTorch、Hugging Face Transformers 和 torch-npu,实现模型加载、测试图片生成、CPU 推理、NPU 推理、Top-5 分类输出、CPU/NPU 输出一致性对比以及验证材料整理。

2. 项目说明

nvidia/mit-b5 是 Hugging Face 上的 MiT-B5 图像分类模型。本项目使用固定测试图片 test.jpg 作为输入,分别在 CPU 与 Ascend NPU 上执行推理,并比较两端输出 logits 与 probability 是否一致。

本次适配重点包括:

  1. 在 Ascend NPU Notebook 环境中安装依赖;
  2. 从 Hugging Face 下载并加载 nvidia/mit-b5 模型;
  3. 构造测试图片 test.jpg;
  4. 分别执行 CPU 与 NPU 图像分类推理;
  5. 保存 CPU/NPU 的 logits、probability 和 Top-5 分类结果;
  6. 对 CPU 与 NPU 输出进行误差对比;
  7. 保存日志、截图和适配报告,用于赛道一模型适配验证提交。

3. 工程结构

.
├── README.md
├── adaptation_report.md
├── metadata.yml
├── download_model.sh
├── make_test_image.py
├── inference.py
├── compare_cpu_npu.py
├── requirements.txt
├── test.jpg
├── cpu_result.json
├── cpu_result.txt
├── cpu_infer.log
├── npu_result.json
├── npu_result.txt
├── npu_infer.log
├── compare_result.txt
├── compare_run.log
├── fusion_result.json
├── download_model.log
├── npu_env.txt
└── screenshots/
    ├── npu_env.png
    ├── npu_result.png
    └── compare_result.png

其中:

  • download_model.sh:模型下载脚本;
  • make_test_image.py:测试图片生成脚本;
  • inference.py:CPU/NPU 推理脚本;
  • compare_cpu_npu.py:CPU/NPU 输出误差对比脚本;
  • metadata.yml:模型硬件 metadata 文件;
  • cpu_result.json:CPU 推理结构化结果;
  • cpu_result.txt:CPU 推理日志;
  • cpu_infer.log:CPU 推理补充日志;
  • npu_result.json:NPU 推理结构化结果;
  • npu_result.txt:NPU 推理日志;
  • npu_infer.log:NPU 推理补充日志;
  • compare_result.txt:CPU/NPU 误差对比结果;
  • compare_run.log:CPU/NPU 对比运行日志;
  • fusion_result.json:汇总结果文件;
  • download_model.log:模型下载日志;
  • npu_env.txt:NPU 环境信息;
  • screenshots/:验证截图材料。

4. 环境检查

在 Ascend NPU Notebook 中执行以下命令检查运行环境:

npu-smi info
python --version
python - <<'PY'
import torch
print("torch:", torch.__version__)

try:
    import torch_npu
    print("torch_npu import success")
    print("npu available:", torch.npu.is_available())
except Exception as e:
    print("torch_npu import failed:", repr(e))
PY

环境检查截图保存为:

screenshots/npu_env.png

环境信息文本保存为:

npu_env.txt

该截图和文本用于证明当前运行环境存在 Ascend NPU,并记录 NPU 型号、运行状态和 Python 版本信息。

5. 模型下载

运行:

bash download_model.sh 2>&1 | tee download_model.log

模型来源为 Hugging Face:

nvidia/mit-b5

模型文件下载完成后,推理脚本会加载模型并执行 CPU/NPU 前向推理。

6. 测试输入

本项目使用测试图片:

test.jpg

推理流程包括:

  1. 读取测试图片;
  2. 使用模型对应的图像预处理流程;
  3. 构造模型输入张量;
  4. 输入 nvidia/mit-b5 图像分类模型;
  5. 输出 1000 维分类 logits;
  6. 计算 softmax probability;
  7. 输出 Top-5 分类结果。

输入张量形状为:

(1, 3, 224, 224)

7. CPU 推理

运行:

python inference.py --device cpu --image test.jpg --output cpu_result.json 2>&1 | tee cpu_result.txt

CPU 推理输出文件:

cpu_result.json
cpu_result.txt
cpu_infer.log

CPU 推理日志摘要如下:

model: nvidia/mit-b5
device: cpu
input_shape: (1, 3, 224, 224)
num_labels: 1000

CPU Top-5 输出如下:

1. class_id=506, prob=0.16363394, logit=6.73715782, label=coil, spiral, volute, whorl, helix
2. class_id=644, prob=0.13141406, logit=6.51787901, label=matchstick
3. class_id=646, prob=0.08895852, logit=6.12769604, label=maze, labyrinth
4. class_id=522, prob=0.06042683, logit=5.74095917, label=croquet ball
5. class_id=782, prob=0.04684135, logit=5.48629236, label=screen, CRT screen

8. NPU 推理

运行:

python inference.py --device npu --image test.jpg --output npu_result.json 2>&1 | tee npu_result.txt

NPU 推理输出文件:

npu_result.json
npu_result.txt
npu_infer.log

NPU 推理日志摘要如下:

model: nvidia/mit-b5
device: npu
input_shape: (1, 3, 224, 224)
num_labels: 1000

NPU Top-5 输出如下:

1. class_id=506, prob=0.16172980, logit=6.72157001, label=coil, spiral, volute, whorl, helix
2. class_id=644, prob=0.12994871, logit=6.50278282, label=matchstick
3. class_id=646, prob=0.08940226, logit=6.12878895, label=maze, labyrinth
4. class_id=522, prob=0.06122248, logit=5.75015736, label=croquet ball
5. class_id=782, prob=0.04817932, logit=5.51057291, label=screen, CRT screen

NPU 推理结果截图保存为:

screenshots/npu_result.png

9. CPU/NPU 误差对比

运行:

python compare_cpu_npu.py 2>&1 | tee compare_result.txt

或:

python compare_cpu_npu.py 2>&1 | tee compare_run.log

对比脚本会读取 CPU 与 NPU 的 logits 和 probability 输出,并计算:

  • CPU/NPU 输出类别数;
  • CPU Top-5;
  • NPU Top-5;
  • CPU/NPU Top-1 是否一致;
  • CPU/NPU Top-5 顺序是否一致;
  • CPU/NPU Top-5 集合是否一致;
  • logits 最大绝对误差;
  • logits 平均绝对误差;
  • logits 余弦相似度;
  • probability 最大绝对误差;
  • probability 平均绝对误差;
  • probability 余弦相似度;
  • 是否通过验证。

对比结果保存为:

compare_result.txt
compare_run.log
fusion_result.json

10. 自验证结果

本次 nvidia/mit-b5 适配验证的 CPU/NPU 误差结果如下:

指标结果
类别数1000
Top-K5
CPU Top-5[506, 644, 646, 522, 782]
NPU Top-5[506, 644, 646, 522, 782]
CPU Top-1coil, spiral, volute, whorl, helix
NPU Top-1coil, spiral, volute, whorl, helix
CPU/NPU Top-1 是否一致True
CPU/NPU Top-5 顺序是否一致True
CPU/NPU Top-5 集合是否一致True
logits 最大绝对误差0.0370755196
logits 平均绝对误差0.0041949986
logits 余弦相似度0.9999867409
probability 最大绝对误差0.0019041449
probability 平均绝对误差0.0000106968
probability 余弦相似度0.9999334432
验证结论PASS

对应的 compare_result.txt 内容如下:

CPU/NPU comparison for Ascend NPU adaptation

model: nvidia/mit-b5
cpu_result: cpu_result.json
npu_result: npu_result.json
num_labels: 1000
top_k: 5

Top-k consistency:
  CPU top5: [506, 644, 646, 522, 782]
  NPU top5: [506, 644, 646, 522, 782]
  top1_same: True
  top5_order_same: True
  top5_set_same: True

Numerical metrics:
  logit_max_abs: 0.0370755196
  logit_mean_abs: 0.0041949986
  logit_cosine_similarity: 0.9999867409
  probability_max_abs: 0.0019041449
  probability_mean_abs: 0.0000106968
  probability_cosine_similarity: 0.9999334432

Pass criteria:
  1. CPU and NPU top1 should be the same.
  2. Probability max absolute difference should be less than 0.01.
  3. Logit/probability cosine similarity should be close to 1.0.

Final result: PASS

根据上述结果,CPU 与 NPU 的 Top-1 结果均为 coil, spiral, volute, whorl, helix,Top-5 顺序完全一致,Top-5 集合一致。logits 余弦相似度达到 0.9999867409,probability 最大绝对误差为 0.0019041449,小于 0.01 阈值,最终结果为 PASS。因此,本次 nvidia/mit-b5 昇腾 NPU 推理验证通过。

11. 验证截图材料

11.1 NPU 环境截图

npu_env

该截图展示 Ascend NPU Notebook 环境、npu-smi info 输出和 Python 版本信息。

11.2 NPU 推理结果截图

npu_result

该截图展示 NPU 推理日志,包括模型名称、运行设备、输入张量形状、类别数和 Top-5 分类结果。

11.3 CPU/NPU 误差对比截图

compare_result

该截图展示 CPU/NPU 输出误差对比结果,包括 Top-K 一致性、logits 误差、probability 误差、余弦相似度和最终 PASS 结论。

12. 运行日志与提交材料

本项目提交材料包括:

  • README.md
  • adaptation_report.md
  • metadata.yml
  • download_model.sh
  • make_test_image.py
  • inference.py
  • compare_cpu_npu.py
  • requirements.txt
  • test.jpg
  • cpu_result.json
  • cpu_result.txt
  • cpu_infer.log
  • npu_result.json
  • npu_result.txt
  • npu_infer.log
  • compare_result.txt
  • compare_run.log
  • fusion_result.json
  • download_model.log
  • npu_env.txt
  • screenshots/npu_env.png
  • screenshots/npu_result.png
  • screenshots/compare_result.png

模型下载日志可查看:

download_model.log

CPU 推理日志可查看:

cpu_result.txt
cpu_infer.log

NPU 推理日志可查看:

npu_result.txt
npu_infer.log

CPU/NPU 误差对比结果可查看:

compare_result.txt
compare_run.log

13. 适配说明

本项目的适配工作包括:

  1. 在 Ascend NPU 环境中完成依赖安装;
  2. 编写 Hugging Face / Transformers 模型下载脚本;
  3. 加载 nvidia/mit-b5 模型;
  4. 编写测试图片生成脚本;
  5. 编写 CPU/NPU 统一推理脚本;
  6. 支持测试图片输入和模型图像预处理;
  7. 保存 CPU 与 NPU 的结构化分类结果;
  8. 编写 CPU/NPU logits 和 probability 误差对比脚本;
  9. 计算 Top-1 一致性、Top-5 顺序一致性、Top-5 集合一致性、logits 误差、probability 误差和余弦相似度;
  10. 输出完整日志、截图和适配报告。

14. 结论

本项目完成了 nvidia/mit-b5 模型在 Ascend NPU 环境下的图像分类推理适配验证。

验证结果表明,NPU 推理能够正常完成模型加载、图像预处理和 Top-5 分类输出。CPU 与 NPU 的 Top-1 结果一致,Top-5 顺序完全一致,logits 余弦相似度达到 0.9999867409,probability 最大绝对误差为 0.0019041449,低于 0.01 阈值,最终结果为 PASS。本项目可作为赛道一模型适配提交材料。