hardcorenas_d 是一个基于 timm (PyTorch Image Models) 的图像分类模型,在 ImageNet-1K 数据集上预训练。
该模型为标准的 PyTorch 图像分类模型,通过 timm 库加载预训练权重,可在昇腾 Ascend910 NPU 上直接运行。 适配过程的关键步骤:
pip install torch torch_npu timm Pillow numpy safetensors如果下载速度慢,可使用清华镜像源:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple torch torch_npu timm Pillow numpy safetensorsfrom modelscope.hub.snapshot_download import snapshot_download
model_dir = snapshot_download('timm/hardcorenas_d.miil_green_in1k')import torch
import torch_npu
from timm import create_model
from safetensors.torch import load_file
from PIL import Image
from timm.data import create_transform, resolve_data_config
model = create_model('hardcorenas_d', pretrained=False)
model.eval()
state_dict = load_file('model.safetensors')
model.load_state_dict(state_dict, strict=False)
model = model.to('npu:0')
img = Image.open('test.jpg').convert('RGB')
cfg = resolve_data_config({}, model=create_model('hardcorenas_d', pretrained=False))
transform = create_transform(input_size=224, is_training=False,
mean=cfg.get('mean'), std=cfg.get('std'),
interpolation=cfg.get('interpolation', 'bicubic'))
input_tensor = transform(img).unsqueeze(0).to('npu:0')
with torch.no_grad():
output = model(input_tensor)
probs = torch.nn.functional.softmax(output[0].cpu(), dim=0)
top5 = torch.topk(probs, k=5)
for i in range(5):
print(f'Top {i+1}: class={top5.indices[i].item()}, prob={top5.values[i].item():.6f}')CPU 推理:
python3 inference.py --device cpuNPU 推理:
python3 inference.py --device npupython3 compare_cpu_npu.py
CPU 推理耗时: 0.0369s NPU 推理耗时: 0.1630s 性能加速比: 0.23x
| 指标 | 值 |
|---|---|
| CPU Top-1 类别 | 533 |
| NPU Top-1 类别 | 533 |
| Top-1 匹配 | 是 |
| Top-5 重叠 | 5/5 |
| 余弦相似度 | 0.99999680 |
| 最大概率差异 | 0.011984% |
| Top-1 概率相对误差 | 0.275022% |
| 类别 | CPU 概率 | NPU 概率 | 差异 |
|---|---|---|---|
| 490 | 0.008522 | 0.008499 | 0.00002299 |
| 533 | 0.018232 | 0.018182 | 0.00005014 |
| 539 | 0.010054 | 0.009983 | 0.00007095 |
| 885 | 0.009267 | 0.009198 | 0.00006908 |
| 904 | 0.013076 | 0.012956 | 0.00011984 |
NPU与CPU推理结果误差为0.0120%,符合精度误差小于1%的要求
NPU 与 CPU 的 Top-1 预测类别完全相同,Top-5 类别完全重叠,余弦相似度接近 1.0,表明 NPU 推理结果与 CPU 推理结果高度一致。
由于该模型规模较小(约 5-10MB(轻量级模型)),NPU 推理的延迟优势未能完全发挥。对于批量推理场景,NPU 的吞吐量优势会更加明显。
以下日志展示了 NPU 推理成功的关键信息:
Input shape: torch.Size([1, 3, 224, 224])
Top-1 Match: True (CPU=533, NPU=533)
Top-5 Overlap: 5/5
--- Top-5 Probability Comparison ---
Top-1 Probability Relative Error: 0.275022%
Top-1 Prediction: MATCH (CPU=533, NPU=533)#+NPU #+CV #+图像分类 #+昇腾 #+Ascend910 #+timm #+PyTorch