本文档记录 vit_base_patch16_224.dino(DINO ViT-B/16)在 Ascend NPU 上的快速部署与验证结果。
DINO 是 Facebook Research 提出的自监督视觉 Transformer 模型,无需标注数据即可学习高质量图像特征。本模型输出 768 维图像特征向量,可直接用于下游视觉任务 (分类、检索、分割等)。
相关获取地址:
facebookresearch/dino:main → dino_vitb16| 组件 | 版本 |
|---|---|
torch | 2.9.0+cpu |
torch_npu | 2.9.0.post1+gitee7ba04 |
torchvision | 0.24.0 |
CANN | 8.5.1 |
1 卡 Ascend910B485,798,656 (85.8M)768pip install torch torchvision torch_npu pillow# 合成数据推理
cd /opt/atomgit/dino_npu
python3 inference.py
# 真实图片推理
python3 inference.py --image /path/to/image.jpg
# NPU 推理 (默认)
python3 inference.py --device npu:0
# CPU 推理 (用于精度对比)
python3 inference.py --device cpuimport torch
import torch_npu # 注册 NPU backend
from torchvision import transforms
from PIL import Image
# 加载 DINO 模型
model = torch.hub.load("facebookresearch/dino:main", "dino_vitb16")
model.eval().to("npu:0")
# 图片预处理
transform = transforms.Compose([
transforms.Resize(256, interpolation=transforms.InterpolationMode.BICUBIC),
transforms.CenterCrop(224),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406],
std=[0.229, 0.224, 0.225]),
])
# 推理
img = Image.open("image.jpg").convert("RGB")
x = transform(img).unsqueeze(0).to("npu:0")
with torch.no_grad():
features = model(x) # shape: [1, 768]| 测试数据 | 余弦相似度 | L2 相对误差 | 判定 |
|---|---|---|---|
| 合成数据 | 0.9999928 | 0.379% | PASS |
| 真实图片 | 0.9999950 | 0.319% | PASS |
结论:NPU 推理结果与 CPU 一致,L2 相对误差 < 1%,完全符合精度要求。
python3 eval_benchmark.py测试条件:合成数据,固定输入尺寸 3×224×224。
| Batch Size | CPU 延迟 (ms) | NPU 延迟 (ms) | 加速比 |
|---|---|---|---|
| 1 | 1747.42 | 10.48 | 166.7x |
| 2 | 3292.03 | 10.25 | 321.2x |
| 4 | 7087.63 | 10.34 | 685.5x |
| 8 | 15424.45 | 10.64 | 1450.0x |
NPU 推理延迟约 10.5 ms/iter,吞吐量约 95 imgs/s (bs=1)。
DINO ViT-B/16 基于标准 ViT-B/16 架构(patch_size=16, embed_dim=768, num_heads=12, num_layers=12),仅包含以下算子类型:
nn.Linear — QKV 投影、MLP、输出投影nn.LayerNormnn.GELU 激活函数torch.bmm — 自注意力矩阵乘法torch.softmaxnn.Conv2d — Patch Embedding 投影以上算子 torch_npu 均完整支持,无需任何代码修改,模型可直接通过 .to("npu:0") 从 CPU 迁移至 NPU。
| 文件 | 说明 |
|---|---|
inference.py | 推理脚本(支持图片输入、性能基准测试) |
readme.md | 本文件(部署文档) |
eval_benchmark.py | 精度 & 性能综合测评脚本 |
eval_report.json | 测评结果 (JSON) |
eval_run.log | 测评运行日志 |
test_verify.py | 快速验证脚本 |
torch_npu 库和正确的 CANN 驱动| 对比项 | CPU | NPU | 误差 |
|---|---|---|---|
| 余弦相似度 | 1.0 | 0.99999279 | 0.0007% |
结论: CPU 与 NPU 精度误差为 0.0007%,小于 1% 精度要求。
本仓库提供完整的推理脚本,支持 CPU 和 NPU 双平台推理。
# NPU 推理
python3 inference.py --device npu
# CPU 推理
python3 inference.py --device cpuModel loaded successfully on NPU
Inference completed
Results saved