FastViT-T8 是一款高效的混合视觉 Transformer 模型,由 Apple 团队提出。该模型结合了 CNN 和 Transformer 的优势,通过结构重参数化技术实现了快速推理。模型在 ImageNet-1k 数据集上训练,适用于图像分类任务。
| 属性 | 值 |
|---|---|
| 参数量 (Params) | 4.0M |
| GMACs | 0.7 |
| 激活值 (Activations) | 8.6M |
| 输入尺寸 | 256 × 256 |
| 类别数 | 1000 |
| 预处理均值 | [0.485, 0.456, 0.406] |
| 预处理标准差 | [0.229, 0.224, 0.225] |
此模型基于 torch_npu 在华为昇腾 NPU 上完成推理适配。模型权重通过 ModelScope 下载,加载到 timm 定义的模型结构中。CPU 和 NPU 推理结果对比验证精度满足要求。
pip install -r requirements.txt依赖列表见 requirements.txt。
python3 inference.py --device cpupython3 inference.py --device npu使用随机噪声图片作为输入进行推理测试。
Average inference time: 94.37 ms (10 runs)
Top-5 predictions:
Class 21: 0.084883
Class 22: 0.047830
Class 127: 0.045315
Class 23: 0.034046
Class 128: 0.031133Average inference time: 8.27 ms (10 runs)
Top-5 predictions:
Class 21: 0.085732
Class 22: 0.045950
Class 127: 0.044512
Class 23: 0.033546
Class 128: 0.031191| 设备 | 平均推理耗时 (ms) | 加速比 |
|---|---|---|
| CPU | 94.37 | 1.0× |
| NPU (Ascend910) | 8.27 | 11.4× |
NPU 推理相比 CPU 加速约 11.4 倍。
使用相同输入(固定随机种子)分别在 CPU 和 NPU 上运行推理,对比输出 logits 和概率分布。
运行精度测试脚本:
python3 compare_cpu_npu.py| 指标 | 值 |
|---|---|
| Logits 余弦相似度 | 0.99986754 |
| Logits 最大绝对误差 | 0.06208134 |
| Logits 平均绝对误差 | 0.01868037 |
| Probabilities 最大绝对误差 | 0.00188066 |
| Probabilities 平均绝对误差 | 0.00001844 |
| Top-1 类别一致率 | 100.00% |
| Top-5 类别一致率 | 100.00% |
| Rank | CPU Class | CPU Prob | NPU Class | NPU Prob | Prob Diff |
|---|---|---|---|---|---|
| 1 | 21 | 0.08488289 | 21 | 0.08573250 | 0.00084961 |
| 2 | 22 | 0.04783030 | 22 | 0.04594965 | 0.00188066 |
| 3 | 127 | 0.04531545 | 127 | 0.04451206 | 0.00080339 |
| 4 | 23 | 0.03404604 | 23 | 0.03354561 | 0.00050043 |
| 5 | 128 | 0.03113323 | 128 | 0.03119104 | 0.00005781 |
NPU 与 CPU 推理误差为 0.19%(概率最大绝对误差),符合精度误差小于 1% 的要求。
Top-1 和 Top-5 类别完全一致,余弦相似度为 0.9999,表明 NPU 推理结果与 CPU 高度一致。
import timm
import torch
from timm.data import resolve_data_config
from timm.data.transforms_factory import create_transform
from PIL import Image
from safetensors.torch import load_file
# 创建模型
model_name = 'fastvit_t8.apple_in1k'
model = timm.create_model(model_name, pretrained=False)
# 加载本地权重
state_dict = load_file('/path/to/model.safetensors')
model.load_state_dict(state_dict)
# 移至 NPU
model = model.to('npu')
model.eval()
# 预处理
config = resolve_data_config({}, model=model)
transform = create_transform(**config)
img = Image.open('image.jpg')
input_tensor = transform(img).unsqueeze(0).to('npu')
# 推理
with torch.no_grad():
output = model(input_tensor)
# 后处理
probs = torch.nn.functional.softmax(output, dim=1)
top_probs, top_indices = torch.topk(probs, 5, dim=1)
以下日志展示了 NPU 推理成功的关键信息:
Input shape: torch.Size([1, 3, 256, 256])
CPU Top-1 class: 21, prob: 0.084883
NPU Top-1 class: 21, prob: 0.085732
8. Top-1 类别一致率: 100.00%
9. Top-5 类别一致率: 100.00%
10. Top-5 概率详细对比:本仓库为 fastvit_t8.apple_in1k 模型在华为昇腾 NPU 上的适配仓库,包含完整的推理脚本、精度测试脚本和部署说明。