本文档记录 facebook/dinov2-giant 在华为昇腾 NPU(Ascend 910B)上的适配与验证结果。DINOv2 是 Meta 发布的自监督视觉 Transformer 模型,dinov2-giant 为巨型版本(约 1.1B 参数,输出维度 1536)。
本适配基于 transformers 官方实现,无需修改模型结构或自定义算子,可直接通过 AutoModel 在昇腾 NPU 上加载并运行推理,精度与 CPU 参考结果高度一致。
相关获取地址:
参考文档:
| 组件 | 版本 |
|---|---|
torch | 2.9.0+cpu |
torch-npu | 2.9.0.post1+gitee7ba04 |
transformers | 4.57.6 |
Pillow | 12.2.0 |
numpy | 1.26.4 |
1 张 Ascend 910B48.5.1./models/dinov2-giantimport torch
import torch_npu
from PIL import Image
from transformers import AutoModel, AutoImageProcessor
# 设备自动选择 NPU
device = torch.device("npu:0" if torch.npu.is_available() else "cpu")
# 加载处理器与模型
processor = AutoImageProcessor.from_pretrained("facebook/dinov2-giant")
model = AutoModel.from_pretrained("facebook/dinov2-giant").to(device).eval()
# 准备输入图像
image = Image.new("RGB", (518, 518), color=(128, 128, 128))
inputs = processor(images=image, return_tensors="pt")
inputs = {k: v.to(device) for k, v in inputs.items()}
# 推理
with torch.no_grad():
outputs = model(**inputs)
print(outputs.last_hidden_state.shape) # torch.Size([1, 257, 1536])python3 dinov2_adapter.py \
--model dinov2-giant \
--model-path ./models/dinov2-giant \
--output-dir ./results验证结果:
npu:0torch.Size([3, 257, 1536])测试条件:连续预热 10 轮后,正式测试 50 轮,取平均值。
| Batch Size | 延迟 (ms/iter) | 吞吐量 (imgs/s) | 总时间 (s) |
|---|---|---|---|
1 | 52.166 | 19.17 | 2.608 |
4 | 81.696 | 48.96 | 4.085 |
8 | 123.877 | 64.58 | 6.194 |
内存占用:
| 指标 | 数值 |
|---|---|
allocated_mb | 4340.20 MB |
reserved_mb | 4994.00 MB |
精度验证通过与 CPU 参考输出对比余弦相似度完成。
| 指标 | 数值 |
|---|---|
| 对比样本数 | 5 |
| 评测指标 | Cosine Similarity |
| 相似度 | 1.000207 |
| 阈值 | 0.999 |
| 状态 | PASSED |
transformers 4.57.6 加载时会提示 Using a slow image processor,此警告不影响推理结果与性能,可忽略或在加载时显式设置 use_fast=True。/home/atomgit/ascend/log 目录,torch_npu 会输出 [LOG_WARNING] can not create directory,此警告不影响推理,可通过创建该目录或设置环境变量消除。0.999 以上即视为精度一致,本次验证结果 1.000207 表明完全对齐。