Yanguan/dinov3-vit7b16-pretrain-lvd1689m
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

DINOv3 ViT-7B NPU 适配

本仓库提供 facebook/dinov3-vit7b16-pretrain-lvd1689m 在华为昇腾 NPU (Ascend 910) 上的推理脚本与评测材料。

模型简介

DINOv3 是 Meta AI 发布的视觉基础模型,基于 Vision Transformer 架构,无需微调即可在多种视觉任务上取得优异性能。本适配版本为 ViT-7B/16,在 LVD-1689M 数据集上进行预训练。

属性值
模型名称facebook/dinov3-vit7b16-pretrain-lvd1689m
架构DINOv3ViTModel
参数量约 7B
Hidden Size4096
注意力头数32
层数40
Patch Size16
输入尺寸224x224

硬件与软件环境

组件版本/型号
NPUAscend 910B4
CANN8.5.1
PyTorch2.9.0+cpu
torch_npu已安装
transformers4.57.6

快速开始

1. 环境准备

确保已安装以下依赖:

pip install torch transformers pillow numpy
# torch_npu 和 CANN 驱动请参考华为昇腾官方文档安装

2. 下载模型权重

使用 AtomGit CLI 从 HuggingFace 镜像下载:

pip install atomgit
python3 -m atomgit download hf_mirrors/facebook/dinov3-vit7b16-pretrain-lvd1689m -d ./weight/dinov3-vit7b16-pretrain-lvd1689m

3. 推理

python inference.py --image /path/to/image.jpg

参数说明:

参数默认值说明
--model_path./weight/dinov3-vit7b16-pretrain-lvd1689m模型权重路径
--imageNone输入图片路径,不传则使用 dummy 图片
--dtypefloat16推理数据类型 (float16/float32/bfloat16)
--devicenpu运行设备 (npu/cpu)
--benchmarkFalse是否运行性能 benchmark
--batch_size1batch 大小
--runs20benchmark 运行次数

3. Python API 示例

import torch
import torch_npu
from transformers import AutoImageProcessor, AutoModel
from PIL import Image

model_path = "./weight/dinov3-vit7b16-pretrain-lvd1689m"

processor = AutoImageProcessor.from_pretrained(model_path)
model = AutoModel.from_pretrained(model_path, torch_dtype=torch.float16)
model = model.to("npu")

image = Image.open("image.jpg").convert("RGB")
inputs = processor(images=image, return_tensors="pt")
inputs = {k: v.to("npu") for k, v in inputs.items()}

with torch.no_grad():
    outputs = model(**inputs)

features = outputs.pooler_output  # [1, 4096]

适配说明

transformers 4.57.6 已原生支持 dinov3_vit 模型类型,无需任何代码修改即可在昇腾 NPU 上运行。适配仅需要将模型通过 model.to("npu") 迁移到 NPU 设备。

评测结果

精度评测 (CPU fp32 vs NPU fp16)

运行脚本:python evaluation/accuracy_eval.py

指标pooler_outputlast_hidden_state
Max Absolute Error0.0013320.010870
Mean Absolute Error0.0001850.000179
Relative Error0.1950%0.1866%
余弦相似度0.999998211.00000000

结论:精度验证通过,NPU fp16 与 CPU fp32 结果高度一致。

性能评测

运行脚本:python evaluation/perf_eval.py

设备数据类型Batch平均延迟吞吐量
NPUfloat16159.99 ms16.67 images/sec
NPUfloat16260.27 ms33.19 images/sec
NPUfloat16491.38 ms43.77 images/sec
NPUfloat32179.39 ms12.60 images/sec

注:CPU fp32 基准因推理速度过慢未列入主要对比,具体数据见 evaluation/perf_log.txt。

仓库结构

.
├── inference.py              # NPU 推理脚本
├── readme.md                 # 本文件
├── evaluation/
│   ├── accuracy_eval.py      # 精度评测源代码
│   ├── accuracy_log.txt      # 精度评测运行日志
│   ├── perf_eval.py          # 性能评测源代码
│   └── perf_log.txt          # 性能评测运行日志
└── weight/
    └── dinov3-vit7b16-pretrain-lvd1689m/   # 模型权重

注意事项

  1. 无需 accelerate 库:通过手动 model.to("npu") 加载,无需安装 accelerate。
  2. 内存占用:fp16 模式下模型约占用 14GB HBM,请确保 NPU 内存充足。
  3. 输入尺寸:ImageProcessor 会自动将输入 resize 到 224x224。
  4. 数据类型推荐:推荐使用 float16 以平衡精度与性能。

License

模型权重遵循 DINOv3 License。

引用

@misc{simeoni2025dinov3,
  title={{DINOv3}},
  author={Sim{\'e}oni, Oriane and Vo, Huy V. and Seitzer, Maximilian and others},
  year={2025},
  eprint={2508.10104},
  archivePrefix={arXiv},
  primaryClass={cs.CV},
}