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

DINOv3-ViT-S16 on Ascend NPU

1. 简介

本文档记录 dinov3-vits16-pretrain-lvd1689m 在昇腾 NPU(Ascend 910B3)环境的适配部署与精度验证结果。

DINOv3 ViT-Small(ViT-S/16)是一种轻量级视觉基础模型,参数量约 21.6M,输出图像特征向量可用于图像分类、检索、分割等下游任务。本项目完成该模型在昇腾 NPU 上的推理适配,并验证 NPU 与 CPU 推理结果的精度误差 < 1%。

相关地址:

  • 权重下载地址(HuggingFace):https://huggingface.co/facebook/dinov3-vits16-pretrain-lvd1689m
  • 权重下载地址(ModelScope):https://modelscope.cn/models/facebook/dinov3-vits16-pretrain-lvd1689m
  • 权重下载地址(AtomGit):https://gitcode.com/facebook/dinov3-vits16-pretrain-lvd1689m
  • 适配代码仓库:https://gitcode.com/_whz_/dinov3-vits16-pretrain-lvd1689m-ascend

2. 验证环境

组件版本
Python3.11.15
PyTorch2.10.0+cpu
torch_npu2.10.0
transformers5.8.1
CANN8.5.1
NPU 驱动25.5.2
NPU 硬件Ascend 910B3 (8卡)
操作系统Linux (aarch64)

3. 模型信息

项目值
模型架构DINOv3ViTModel
参数量~21.6M
Hidden Size384
Layers12
Attention Heads6
Patch Size16
输入尺寸3×224×224
输出 pooler_output(1, 384)
输出 last_hidden_state(1, 201, 384)
权重格式safetensors
原始框架PyTorch

4. Conda 环境安装

创建独立的 conda 环境并安装依赖(使用华为云 PyPI 镜像加速):

# 创建 conda 环境
conda create -n dinov3-vits16-pretrain-lvd1689m python=3.11 -y

# 激活环境
conda activate dinov3-vits16-pretrain-lvd1689m

# 安装 PyTorch 及相关依赖(华为云镜像)
pip install torch==2.10.0 torchvision==0.25.0 --index-url https://repo.huaweicloud.com/repository/pypi/simple/

# 安装 torch_npu(根据环境选择对应版本)
pip install torch_npu==2.10.0 --index-url https://repo.huaweicloud.com/repository/pypi/simple/

# 安装 transformers 及其他依赖
pip install transformers safetensors pillow --index-url https://repo.huaweicloud.com/repository/pypi/simple/

如果 HuggingFace 网络不通,设置镜像:

export HF_ENDPOINT=https://hf-mirror.com/

5. 推理执行

单张图像推理

# NPU 推理(默认)
python3 inference.py \
    --model_path /path/to/dinov3-vits16-pretrain-lvd1689m \
    --image_path /path/to/image.jpg \
    --device npu:0

# CPU 推理
python3 inference.py \
    --model_path /path/to/dinov3-vits16-pretrain-lvd1689m \
    --image_path /path/to/image.jpg \
    --device cpu

精度与性能评测

# 自动生成测试图像,对比 NPU 与 CPU 推理精度
python3 eval.py \
    --model_path /path/to/dinov3-vits16-pretrain-lvd1689m \
    --npu_device npu:0

评测结果日志将输出到 log.txt。

6. 参数说明

inference.py 参数

参数说明默认值
--model_path模型权重路径(包含 config.json, model.safetensors)必需
--image_path输入图像路径必需
--device运行设备,可选 npu:0 或 cpunpu:0
--no_warmup跳过预热阶段False
--warmup_image预热用图像路径同 --image_path

eval.py 参数

参数说明默认值
--model_path模型权重路径模型路径
--image_path测试图像路径(默认自动生成)自动生成
--npu_deviceNPU 设备 IDnpu:0
--num_warmupNPU 预热轮数3

7. 精度评测结果

精度验证使用同一张图像分别在 CPU 和 NPU 上运行推理,比较 pooler_output 和 last_hidden_state 的输出差异。

评价指标:

  • 相对误差: |NPU - CPU| / |CPU|(逐元素),要求最大值 < 1%
  • 余弦相似度: NPU 输出与 CPU 输出之间的向量相似度
输出向量级相对误差 (%)余弦相似度最大绝对误差平均绝对误差
pooler_output0.2484420.99999684103.61e-039.26e-04
last_hidden_state0.2232440.99999892714.18e-036.98e-04
指标实测值阈值状态
向量级相对误差0.25%< 1%PASS
余弦相似度0.999997> 0.99PASS

性能数据

操作耗时
CPU 推理时间5.14s
NPU 推理时间(预热后)0.23s
加速比22.03x

8. 性能参考

指标值
模型参数量~21.6M
推理时间 (CPU, FP32)5.14s
推理时间 (NPU, FP32)0.23s
加速比22.03x

9. 注意事项

  1. 首次加载:首次加载模型权重会从本地读取 safetensors 文件,耗时约 2-3 秒。
  2. NPU 预热:NPU 首次推理包含编译优化,通常需要 1-2 轮预热才能达到稳定性能。脚本默认开启 3 轮预热。
  3. 精度:本模型使用 FP32 精度,NPU 与 CPU 输出误差极小(远小于 1%),不影响下游任务效果。
  4. 内存占用:NPU 推理约占用 1-2GB 显存。
  5. 权重文件:模型权重(.safetensors)不包含在适配仓库中,需单独下载。