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

DINOv3 ViT-S/16 昇腾 NPU 适配方案

模型卡片标注: #NPU #Ascend #DINOv3 #VisionTransformer

模型信息

项目内容
模型名称facebook/dinov3-vits16-pretrain-lvd1689m
模型类型Vision Transformer (ViT-S/16)
参数量21.6 M
隐藏维度384
注意力头数6
层数12
Patch 大小16 × 16
输入尺寸224 × 224
训练数据LVD-1689M (16.89 亿张 Instagram 图片)
权重格式Safetensors
框架支持transformers >= 4.56.0

昇腾适配概述

本方案基于 华为昇腾 910B4 NPU + CANN 8.5.1 + torch_npu 2.9.0 完成 DINOv3 ViT-S/16 模型的推理适配。

适配成果

指标结果
功能验证通过(单图特征提取)
Pooler Output 平均相对误差0.75% (< 1% 阈值)
Last Hidden State 余弦相似度0.999998 (> 0.9999 阈值)
CPU 平均延迟466.7 ms
NPU 平均延迟17.2 ms
性能提升约 27×

环境要求

硬件

  • 华为昇腾 NPU(推荐 Atlas 800 A2/A3,本文验证环境为 910B4)

软件

软件版本
CANN8.5.1
PyTorch2.9.0+cpu
torch_npu2.9.0.post1
transformers4.57.6
Python3.11

安装依赖

pip install torch==2.9.0 transformers>=4.56.0 pillow numpy
# torch_npu 需按昇腾官方指引安装

快速开始

1. 下载模型

# 方式一:GitCode 镜像
git clone https://gitcode.com/hf_mirrors/facebook/dinov3-vits16-pretrain-lvd1689m.git

# 方式二:ModelScope
modelscope download --model facebook/dinov3-vits16-pretrain-lvd1689m

2. 单图推理(inference.py)

python inference.py \
  --model_path ./dinov3-vits16-pretrain-lvd1689m \
  --image ./test_image.jpg \
  --device npu \
  --dtype float32 \
  --output features.npy

参数说明:

参数说明默认值
--model_path模型本地路径./dinov3-vits16-pretrain-lvd1689m
--image输入图片路径必填
--device运行设备:cpu 或 npunpu
--dtype数据类型:float32 / float16 / bfloat16float32
--output输出特征文件路径features.npy
--warmupWarmup 轮数3
--iterations测速迭代次数10

3. 精度与性能评测(benchmark.py)

python benchmark.py \
  --model_path ./dinov3-vits16-pretrain-lvd1689m \
  --dtype float32 \
  --warmup 5 \
  --iterations 20 \
  --output benchmark_result.json

评测脚本会自动:

  1. 在 CPU 上生成基准输出
  2. 在 NPU 上运行推理
  3. 对比精度(Pooler Output + Last Hidden State)
  4. 输出延迟 P50 / P99 / 吞吐量

性能基准

在 Ascend 910B4 上的实测数据(float32,20 次迭代,5 次 warmup):

指标CPUNPU提升倍数
平均延迟466.68 ms17.20 ms27.1×
P50 延迟470.76 ms17.11 ms27.5×
P99 延迟476.57 ms17.78 ms26.8×
吞吐量2.14 img/s58.14 img/s27.1×

精度验证

以 CPU float32 结果为基准,NPU float32 结果对比:

Pooler Output(下游任务主要使用)

指标数值
平均绝对误差0.000838
平均相对误差0.75%
最大相对误差23.77%
余弦相似度0.999998
** verdict**通过

Last Hidden State

指标数值
平均绝对误差0.000591
平均相对误差1.17%
余弦相似度0.999998
verdict通过(余弦相似度 > 0.9999)

说明:Last Hidden State 的平均相对误差略高,主要因为 Patch Token 中存在大量接近 0 的值,导致相对误差分母极小。余弦相似度达到 0.999998,说明方向一致性极高,不影响下游任务。

调优建议

1. 算子亲和优化

DINOv3 基于标准 Vision Transformer,核心算子为 nn.Linear、nn.GELU、nn.Softmax、nn.LayerNorm。torch_npu 对这些算子已有良好支持,无需额外算子替换。

2. 数据类型选择

数据类型精度速度推荐场景
float32最高基准精度敏感任务(本文验证通过)
float16高更快需要进一步提速时
bfloat16高更快若硬件支持

3. 批处理优化

当前脚本默认 batch_size=1。增大 batch size 可提升 NPU 利用率:

# 多张图片同时推理
images = [Image.open(p) for p in image_paths]
inputs = processor(images=images, return_tensors="pt").to("npu")

4. 环境变量

如遇性能不达预期,可尝试以下环境变量:

export TASK_QUEUE_ENABLE=1
export PYTORCH_NPU_ALLOC_CONF=max_split_size_mb:256

文件说明

文件说明
inference.py单图推理脚本,支持 CPU/NPU
benchmark.py精度与性能评测脚本
benchmark_result.json评测结果(JSON)
features_cpu.npy / features_npu.npy示例输出特征向量
test_image.jpg测试图片

已知问题与限制

  1. torch_dtype 参数在 transformers 4.57 中已弃用,建议改用 dtype。
  2. torch_npu 启动时会有 UserWarning 提示文件属主不匹配,不影响推理结果。
  3. 当前验证环境为单卡 NPU,多卡并行需额外配置 HCCL。

参考链接

  • DINOv3 官方 GitHub
  • HuggingFace transformers DINOv3 文档
  • 昇腾 torch_npu 文档
  • ModelScope 模型镜像

许可

模型权重遵循原仓库许可证(Apache-2.0)。适配代码以 MIT 许可发布。


本文档由 Model Agent 自动生成,验证日期:2026-05-09