本项目将 timm/resnet18.a1_in1k 图片分类模型适配为可在单卡昇腾 NPU(Ascend910B)上运行的工程。
timm/resnet18.a1_in1ktimm.create_model(pretrained=False) + ModelScope 本地权重加载timm.data.resolve_model_data_config + timm.data.create_transform注意:该模型无官方 id2label 文件,推理结果使用 class_0 ~ class_999 作为通用标签,已在 logs/prediction.txt 和本 README 中说明。
| 项目 | 版本/型号 |
|---|---|
| NPU | Ascend910B4 |
| CANN | 8.5.1 |
| PyTorch | 2.9.0+cpu |
| torch_npu | 可用 |
| timm | 最新 |
| 权重来源 | ModelScope 本地缓存 |
详细环境信息见 logs/env_check.log。
pip install -r requirements.txt
python inference.py推理脚本会自动从 ModelScope 本地缓存加载权重,在 npu:0 上执行前向推理,并将 Top-5 结果写入 logs/inference.log。
model: timm/resnet18.a1_in1k
weights: /opt/atomgit/.cache/modelscope/hub/models/timm/resnet18___a1_in1k/model.safetensors
device: npu:0
input_shape: [1, 3, 224, 224]
output_shape: [1, 1000]
missing_keys: 0
unexpected_keys: 0
Top-5:
1. class_291 (idx=291, prob=0.999887)
2. class_288 (idx=288, prob=0.000028)
3. class_290 (idx=290, prob=0.000013)
4. class_289 (idx=289, prob=0.000009)
5. class_292 (idx=292, prob=0.000007)python eval_accuracy.py对单张测试图片进行 CPU 与 NPU 一致性验证:
| 指标 | 数值 |
|---|---|
| max_abs_error | 0.007377 |
| mean_abs_error | 0.002003 |
| relative_error | 0.0182% |
| cosine_similarity | 1.000000 |
| threshold | 1.0% |
| 结果 | PASS |
python benchmark.py在 Ascend910B4 单卡、batch_size=1、预热 2 次、正式 10 次条件下的参考数据:
| 指标 | 数值 |
|---|---|
| 平均延迟 | 6.42 ms |
| 最小延迟 | 4.68 ms |
| 最大延迟 | 9.93 ms |
| P50 | 6.34 ms |
| P90 | 9.93 ms |
| P95 | 9.93 ms |
| 吞吐量 | 155.80 images/sec |
注:以上数据为当前环境单次运行参考值,实际性能受驱动版本、CPU 负载、NPU 温度等因素影响。
当前工程仅提供 CPU/NPU smoke consistency 验证,未在完整 ImageNet-1k 验证集上跑官方 Top-1/Top-5 精度。如需完整精度评测,请自行准备 ImageNet 验证集并扩展 eval_accuracy.py。
自验证关键信息汇总见 screenshots/self_verification.txt,可视化汇总见 screenshots/self_verification.png。
| 文件 | 内容 |
|---|---|
logs/env_check.log | NPU 环境信息 |
logs/inference.log | NPU 推理 Top-5 结果 |
logs/prediction.txt | 预测结果纯文本(含无 id2label 说明) |
logs/accuracy.log | CPU vs NPU 一致性对比 |
logs/benchmark.log | 性能基准测试数据 |
logs/paths.txt | ModelScope 本地路径记录 |
timm.create_model(..., pretrained=True),所有脚本均通过 model_utils.load_model() 从 ModelScope 本地缓存加载权重。id2label.json 或 labels.txt,输出标签统一为 class_0 ~ class_999。.gitignore 已排除 *.bin、*.safetensors、*.pth、*.pt、*.ckpt、*.onnx 等权重文件。fusion_result.json 与 kernel_meta/ 已删除并加入 .gitignore。npu:0 推理,未涉及分布式或多卡并行。#NPU #Ascend #timm #ResNet #image-classification