g
gyccc/timm-wide_resnet101_2.tv_in1k-NPU
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

timm/wide_resnet101_2.tv_in1k on Ascend NPU

1. 简介

本工程将 ModelScope 魔搭社区 的 timm/wide_resnet101_2.tv_in1k 图片分类模型适配到单卡华为昇腾 NPU(Ascend910B)上运行。

  • 模型架构: Wide ResNet-101-2(ResNet 变体,具有更宽的瓶颈通道)
  • 输入尺寸: 224x224
  • 输出类别数: 1000(ImageNet-1k)
  • 权重来源: ModelScope 本地缓存
  • 加载方式: timm.create_model(pretrained=False) + 本地 model.safetensors 权重加载
  • 推理设备: npu:0

2. 验证环境

项目版本/型号
NPU 型号Ascend910B4
CANN 版本8.5.1
Python3.11.14
PyTorch2.9.0+cpu
torch_npu2.9.0.post1
torchvision0.24.0
transformers4.57.6
timm1.0.27
modelscope1.35.3
safetensors0.7.0

3. 推理运行

安装依赖

pip install -r requirements.txt

注:torch_npu 通常由昇腾容器或 CANN 环境预装,不固定在 requirements.txt 中。

运行推理

python inference.py

推理结果将输出到控制台,并保存到 logs/prediction.txt。

运行精度对比

python eval_accuracy.py

运行性能测试

python benchmark.py

4. Smoke 验证

  • torch.npu.is_available(): True
  • torch.npu.get_device_name(0): Ascend910B4
  • NPU dummy forward 输出 shape: [1, 1000]
  • Top-1 预测: class_912 (index 912)
  • Top-5 预测:
    1. class_912 (index 912): 0.191038
    2. class_975 (index 975): 0.126722
    3. class_979 (index 979): 0.050407
    4. class_660 (index 660): 0.033504
    5. class_825 (index 825): 0.021703

标签说明:该模型无内置 id2label 或 labels 文件,因此使用 class_0、class_1、...、class_999 作为类别标签。如需真实 ImageNet 标签名,可额外映射 imagenet_classes.txt。

5. 性能参考

在单卡 Ascend910B4 上,输入尺寸 1x3x224x224 的测试结果:

指标数值
Average latency22.070 ms
Min latency21.768 ms
Max latency22.284 ms
P50 latency22.087 ms
P90 latency22.284 ms
P95 latency22.284 ms
Throughput45.31 images/sec

注:性能数据为单 batch、预热 2 轮、正式测试 10 轮的结果,实际吞吐量受 batch size、预处理流水线等因素影响。

6. 精度评测

本次验证为 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-1class_912
NPU Top-1class_912
Top-1 matchTrue
Top-5 matchTrue

CPU 与 NPU 输出高度一致,Top-1 和 Top-5 完全匹配。

7. 自验证截图

自验证截图与文本摘要请见 screenshots/ 目录:

  • screenshots/self_verification.txt
  • screenshots/self_verification.png

8. 日志文件

日志文件说明
logs/model_check.log阶段 -1/0:模型预判与下载检查
logs/env_check.log阶段 2:NPU 与环境信息
logs/inference.loginference.py 运行日志
logs/prediction.txt推理 Top-5 预测结果
logs/accuracy.logeval_accuracy.py CPU/NPU 对比结果
logs/benchmark.logbenchmark.py 性能测试结果
logs/inference_run.loginference.py 终端输出备份
logs/eval_accuracy_run.logeval_accuracy.py 终端输出备份
logs/benchmark_run.logbenchmark.py 终端输出备份

9. 注意事项

  1. 权重加载方式:

    • 使用 timm.create_model("wide_resnet101_2.tv_in1k", pretrained=False) 创建模型结构。
    • 权重通过 modelscope.snapshot_download 下载到本地缓存,再从本地 model.safetensors 加载。
    • 严禁使用 pretrained=True,以避免触发 HuggingFace Hub 自动下载。
  2. 预处理:

    • 使用 timm.data.resolve_model_data_config(model) 获取模型配置。
    • 使用 timm.data.create_transform(..., is_training=False) 构建推理预处理流水线。
  3. 标签映射:

    • 本模型仓库未提供 id2label.json 或 labels.txt,因此使用 class_x 形式标签。
    • 如需真实 ImageNet 标签,可自行映射标准 ImageNet-1k 类别列表。
  4. 显存与超时:

    • Wide ResNet-101-2 参数量约 127M,权重文件约 485MB。
    • 单卡 Ascend910B4(32GB HBM)运行单 batch 推理显存充裕。
    • 若出现 exit code 137 或 OOM,请检查是否有其他进程占用 NPU 显存。
  5. 模型来源:

    • ModelScope 模型页面:https://www.modelscope.cn/models/timm/wide_resnet101_2.tv_in1k
  6. Git 提交注意:

    • 本工程 .gitignore 已排除所有权重文件(*.safetensors、*.bin、*.pth 等)。
    • 请勿将模型权重提交到 Git 仓库。

10. 标签

#NPU #Ascend #ModelScope #timm #image-classification #WideResNet