nvidia/mit-b5nvidia/mit-b5 模型在昇腾 NPU 环境下的图像分类推理验证,并与 CPU 推理结果进行误差对比。本项目面向昇腾 Model-Agent 模型适配大赛赛道一,完成 nvidia/mit-b5 图像分类模型在 Ascend NPU 环境下的适配验证。项目基于 PyTorch、Hugging Face Transformers 和 torch-npu,实现模型加载、测试图片生成、CPU 推理、NPU 推理、Top-5 分类输出、CPU/NPU 输出一致性对比以及验证材料整理。
nvidia/mit-b5 是 Hugging Face 上的 MiT-B5 图像分类模型。本项目使用固定测试图片 test.jpg 作为输入,分别在 CPU 与 Ascend NPU 上执行推理,并比较两端输出 logits 与 probability 是否一致。
本次适配重点包括:
nvidia/mit-b5 模型;test.jpg;.
├── 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/:验证截图材料。在 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 版本信息。
运行:
bash download_model.sh 2>&1 | tee download_model.log模型来源为 Hugging Face:
nvidia/mit-b5模型文件下载完成后,推理脚本会加载模型并执行 CPU/NPU 前向推理。
本项目使用测试图片:
test.jpg推理流程包括:
nvidia/mit-b5 图像分类模型;输入张量形状为:
(1, 3, 224, 224)运行:
python inference.py --device cpu --image test.jpg --output cpu_result.json 2>&1 | tee cpu_result.txtCPU 推理输出文件:
cpu_result.json
cpu_result.txt
cpu_infer.logCPU 推理日志摘要如下:
model: nvidia/mit-b5
device: cpu
input_shape: (1, 3, 224, 224)
num_labels: 1000CPU 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运行:
python inference.py --device npu --image test.jpg --output npu_result.json 2>&1 | tee npu_result.txtNPU 推理输出文件:
npu_result.json
npu_result.txt
npu_infer.logNPU 推理日志摘要如下:
model: nvidia/mit-b5
device: npu
input_shape: (1, 3, 224, 224)
num_labels: 1000NPU 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 screenNPU 推理结果截图保存为:
screenshots/npu_result.png运行:
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 输出,并计算:
对比结果保存为:
compare_result.txt
compare_run.log
fusion_result.json本次 nvidia/mit-b5 适配验证的 CPU/NPU 误差结果如下:
| 指标 | 结果 |
|---|---|
| 类别数 | 1000 |
| Top-K | 5 |
| CPU Top-5 | [506, 644, 646, 522, 782] |
| NPU Top-5 | [506, 644, 646, 522, 782] |
| CPU Top-1 | coil, spiral, volute, whorl, helix |
| NPU Top-1 | coil, 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 推理验证通过。

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

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

该截图展示 CPU/NPU 输出误差对比结果,包括 Top-K 一致性、logits 误差、probability 误差、余弦相似度和最终 PASS 结论。
本项目提交材料包括:
README.mdadaptation_report.mdmetadata.ymldownload_model.shmake_test_image.pyinference.pycompare_cpu_npu.pyrequirements.txttest.jpgcpu_result.jsoncpu_result.txtcpu_infer.lognpu_result.jsonnpu_result.txtnpu_infer.logcompare_result.txtcompare_run.logfusion_result.jsondownload_model.lognpu_env.txtscreenshots/npu_env.pngscreenshots/npu_result.pngscreenshots/compare_result.png模型下载日志可查看:
download_model.logCPU 推理日志可查看:
cpu_result.txt
cpu_infer.logNPU 推理日志可查看:
npu_result.txt
npu_infer.logCPU/NPU 误差对比结果可查看:
compare_result.txt
compare_run.log本项目的适配工作包括:
nvidia/mit-b5 模型;本项目完成了 nvidia/mit-b5 模型在 Ascend NPU 环境下的图像分类推理适配验证。
验证结果表明,NPU 推理能够正常完成模型加载、图像预处理和 Top-5 分类输出。CPU 与 NPU 的 Top-1 结果一致,Top-5 顺序完全一致,logits 余弦相似度达到 0.9999867409,probability 最大绝对误差为 0.0019041449,低于 0.01 阈值,最终结果为 PASS。本项目可作为赛道一模型适配提交材料。