本项目将 ModelScope 魔搭社区的 timm/swin_small_patch4_window7_224.ms_in1k 图片分类模型适配到单卡昇腾 NPU(Ascend910B)上运行。
| 项目 | 版本 |
|---|---|
| NPU 型号 | Ascend910B4 |
| CANN | 8.5.1 |
| Python | 3.11.14 |
| torch | 2.9.0+cpu |
| torchvision | 0.24.0 |
| torch_npu | 2.9.0.post1 |
| 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
# CPU vs NPU 一致性验证
python eval_accuracy.py
# NPU 性能基准测试
python benchmark.pymodelscope snapshot_downloadtimm.create_model("swin_small_patch4_window7_224.ms_in1k", pretrained=False)model.safetensors(本地加载,191 MB)timm.data.resolve_model_data_config + timm.data.create_transformnpu:0明确说明: 本工程未使用
timm pretrained=True,未触发 HuggingFace Hub 下载。所有权重均通过 ModelScopesnapshot_download获取并从本地路径加载。
torch.npu.is_available(): Truetorch.npu.device_count(): 1torch.npu.get_device_name(0): Ascend910B4该模型未提供 id2label 映射文件,因此使用 class_0 ~ class_999 作为标签名称。
在 Ascend910B4 单卡 NPU 上,使用 benchmark.py(warmup=2, runs=10)测得:
| 指标 | 数值 |
|---|---|
| Average latency | 58.09 ms |
| Min latency | 56.18 ms |
| Max latency | 62.74 ms |
| P50 latency | 57.29 ms |
| P90 latency | 62.74 ms |
| P95 latency | 62.74 ms |
| Throughput | 17.22 images/sec |
本项目执行的是 CPU vs NPU Smoke 一致性验证(非官方 ImageNet 数据集精度)。
| 指标 | 数值 |
|---|---|
| Logits max_abs_diff | 0.022781 |
| Logits mean_abs_diff | 0.002283 |
| Prob max_diff | 0.000600 |
| Top-1 match | True (987) |
| Top-5 match | True |
| CPU Top-5 | [987, 125, 327, 33, 112] |
| NPU Top-5 | [987, 125, 327, 33, 112] |
CPU 与 NPU 推理结果完全一致,Top-1 和 Top-5 匹配。
见 screenshots/self_verification.png 和 screenshots/self_verification.txt。
| 日志 | 路径 |
|---|---|
| 环境检查 | logs/env_check.log |
| 模型检查 | logs/model_check.log |
| 推理日志 | logs/inference.log |
| 预测结果 | logs/prediction.txt |
| 精度验证 | logs/accuracy.log |
| 性能测试 | logs/benchmark.log |
class_0 ~ class_999 作为标签,已在 logs/prediction.txt 和 README 中说明。timm.data.resolve_model_data_config + timm.data.create_transform 构建推理预处理;若失败则回退到模型 default_cfg 中的参数(input_size=224, mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225], crop_pct=0.9, interpolation=bicubic)。snapshot_download 下载到本地缓存后,从 model.safetensors 加载,不触发 HuggingFace Hub 下载。owner does not match 和 path string is NULL 为昇腾 CANN 环境权限/日志目录警告,不影响推理正确性。assets/test.jpg 来自公开图片服务 picsum.photos,用于演示推理流程。#NPU #Ascend #timm #SwinTransformer #image-classification #ModelScope