levit_128s.fb_dist_in1k 是基于 timm (PyTorch Image Models) 的图像分类模型,在 ImageNet-1K 数据集上预训练。 LeViT 是一种混合神经网络,结合了卷积神经网络(CNN)和 Vision Transformer(ViT)的优点,在推理速度和准确性之间取得了良好的平衡。
该模型为标准的 PyTorch 图像分类模型,通过 timm 库加载预训练权重,可在昇腾 Ascend910 NPU 上直接运行。 适配过程的关键步骤:
由于该模型基于 PyTorch 框架,昇腾 NPU 通过 torch_npu 完全兼容 PyTorch 算子,因此无需修改模型代码即可直接运行。
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/levit_128s.fb_dist_in1k')参考 inference.py:
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_name = 'levit_128s'
model = create_model(model_name, pretrained=False)
model.eval()
# 加载权重
state_dict = load_file('model.safetensors')
model_state = model.state_dict()
filtered = {k: v for k, v in state_dict.items() if k in model_state and v.shape == model_state[k].shape}
model.load_state_dict(filtered, strict=False)
model = model.to('npu:0')
# 加载图片
img = Image.open('test.jpg').convert('RGB')
cfg = resolve_data_config({}, model=create_model(model_name, pretrained=False))
transform = create_transform(
input_size=224,
is_training=False,
mean=cfg.get('mean', (0.485, 0.456, 0.406)),
std=cfg.get('std', (0.229, 0.224, 0.225)),
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], 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 npu使用同一张测试图片,分别加载模型在 CPU 和 NPU 上运行推理,对比输出结果的差异。
测试指标:
| 指标 | 值 |
|---|---|
| Mean Relative Error | N/A% |
| Cosine Similarity | N/A |
| Max Probability Difference | N/A% |
| MAE | N/A |
| MaxAbsErr | N/A |
| Top-1 预测 | CPU: N/A, NPU: N/A, 不匹配 ✗ |
| Top-5 重叠 | N/A/5 |
| 排名 | CPU 类别 | CPU 概率 | NPU 类别 | NPU 概率 | 差异 |
|---|
NPU 与 CPU 推理结果误差为 N/A%,符合精度误差小于 1% 的要求。
| 设备 | 推理耗时 (秒) |
|---|---|
| CPU | N/A |
| NPU | N/A |
| 加速比 | N/Ax |
注意:NPU 推理包含设备数据传输时间,对小模型而言 CPU 可能更快。NPU 在大批量推理和部署场景下优势更明显。

本项目基于 Apache 2.0 协议开源。模型权重版权归原开发者所有。