本工程将 ModelScope 魔搭社区 的 timm/wide_resnet101_2.tv_in1k 图片分类模型适配到单卡华为昇腾 NPU(Ascend910B)上运行。
timm.create_model(pretrained=False) + 本地 model.safetensors 权重加载npu:0| 项目 | 版本/型号 |
|---|---|
| NPU 型号 | Ascend910B4 |
| CANN 版本 | 8.5.1 |
| Python | 3.11.14 |
| PyTorch | 2.9.0+cpu |
| torch_npu | 2.9.0.post1 |
| torchvision | 0.24.0 |
| transformers | 4.57.6 |
| timm | 1.0.27 |
| modelscope | 1.35.3 |
| safetensors | 0.7.0 |
pip install -r requirements.txt注:
torch_npu通常由昇腾容器或 CANN 环境预装,不固定在requirements.txt中。
python inference.py推理结果将输出到控制台,并保存到 logs/prediction.txt。
python eval_accuracy.pypython benchmark.pytorch.npu.is_available(): Truetorch.npu.get_device_name(0): Ascend910B4[1, 1000]class_912 (index 912)class_912 (index 912): 0.191038class_975 (index 975): 0.126722class_979 (index 979): 0.050407class_660 (index 660): 0.033504class_825 (index 825): 0.021703标签说明:该模型无内置
id2label或labels文件,因此使用class_0、class_1、...、class_999作为类别标签。如需真实 ImageNet 标签名,可额外映射imagenet_classes.txt。
在单卡 Ascend910B4 上,输入尺寸 1x3x224x224 的测试结果:
| 指标 | 数值 |
|---|---|
| Average latency | 22.070 ms |
| Min latency | 21.768 ms |
| Max latency | 22.284 ms |
| P50 latency | 22.087 ms |
| P90 latency | 22.284 ms |
| P95 latency | 22.284 ms |
| Throughput | 45.31 images/sec |
注:性能数据为单 batch、预热 2 轮、正式测试 10 轮的结果,实际吞吐量受 batch size、预处理流水线等因素影响。
本次验证为 CPU vs NPU Smoke 一致性对比,非官方 ImageNet 数据集精度评测。
| 指标 | 数值 |
|---|---|
| Max absolute diff (logits) | 0.00347257 |
| Mean absolute diff (logits) | 0.00077441 |
| Max absolute diff (softmax probs) | 0.00024423 |
| CPU Top-1 | class_912 |
| NPU Top-1 | class_912 |
| Top-1 match | True |
| Top-5 match | True |
CPU 与 NPU 输出高度一致,Top-1 和 Top-5 完全匹配。
自验证截图与文本摘要请见 screenshots/ 目录:
screenshots/self_verification.txtscreenshots/self_verification.png| 日志文件 | 说明 |
|---|---|
logs/model_check.log | 阶段 -1/0:模型预判与下载检查 |
logs/env_check.log | 阶段 2:NPU 与环境信息 |
logs/inference.log | inference.py 运行日志 |
logs/prediction.txt | 推理 Top-5 预测结果 |
logs/accuracy.log | eval_accuracy.py CPU/NPU 对比结果 |
logs/benchmark.log | benchmark.py 性能测试结果 |
logs/inference_run.log | inference.py 终端输出备份 |
logs/eval_accuracy_run.log | eval_accuracy.py 终端输出备份 |
logs/benchmark_run.log | benchmark.py 终端输出备份 |
权重加载方式:
timm.create_model("wide_resnet101_2.tv_in1k", pretrained=False) 创建模型结构。modelscope.snapshot_download 下载到本地缓存,再从本地 model.safetensors 加载。pretrained=True,以避免触发 HuggingFace Hub 自动下载。预处理:
timm.data.resolve_model_data_config(model) 获取模型配置。timm.data.create_transform(..., is_training=False) 构建推理预处理流水线。标签映射:
id2label.json 或 labels.txt,因此使用 class_x 形式标签。显存与超时:
模型来源:
Git 提交注意:
.gitignore 已排除所有权重文件(*.safetensors、*.bin、*.pth 等)。#NPU #Ascend #ModelScope #timm #image-classification #WideResNet