本文档记录 vit_small_patch16_dinov3.lvd1689m 在昇腾 NPU(Ascend 910B3)环境的适配部署与精度验证结果。
DINOv3 ViT-Small(vit_small_patch16_dinov3)是一种基于 Vision Transformer 的视觉特征提取模型,参数量约 21.6M,输出 384 维图像特征向量,可通过 DINOv3 ViT-7B 教师模型蒸馏获得。该模型适用于图像分类、检索、分割等下游任务。本项目完成该模型在昇腾 NPU 上的推理适配,并验证 NPU 与 CPU 推理结果的精度误差 < 1%。
相关地址:
| 组件 | 版本 |
|---|---|
| Python | 3.11.x |
| PyTorch | 2.10.0+cpu |
| torch_npu | 2.10.0 |
| torchvision | 0.25.0+cpu |
| timm | 1.0.27 |
| safetensors | 0.7.0 |
| CANN | 8.5.1 |
| NPU 驱动 | 25.5.2 |
| NPU 硬件 | Ascend 910B3 (8卡) |
| 操作系统 | Linux (aarch64) |
| 项目 | 值 |
|---|---|
| 模型架构 | ViT-Small/16 (DINOv3) |
| 参数量 | ~21.6M |
| 特征维度 | 384 |
| Layers | 12 |
| Attention Heads | 6 |
| Patch Size | 16 |
| 输入尺寸 | 3×256×256 |
| 输出特征形状 | (1, 384) |
| 权重格式 | safetensors / pytorch_model.bin |
| 原始框架 | PyTorch (timm) |
| 预训练数据 | LVD-1689M |
| 许可证 | DINOv3 License |
创建独立的 conda 环境并安装依赖(使用华为云 PyPI 镜像加速):
# 创建 conda 环境
conda create -n vit_small_patch16_dinov3 python=3.11 -y
# 激活环境
conda activate vit_small_patch16_dinov3
# 安装 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/
# 安装 timm 及其他依赖
pip install timm safetensors pillow --index-url https://repo.huaweicloud.com/repository/pypi/simple/如果 HuggingFace 网络不通,设置镜像:
export HF_ENDPOINT=https://hf-mirror.com/权重文件可从 HuggingFace 下载:
export HF_ENDPOINT=https://hf-mirror.com/
huggingface-cli download timm/vit_small_patch16_dinov3.lvd1689m --local-dir /path/to/model_dir# NPU 推理(默认)
python3 inference.py \
--model_path /path/to/vit_small_patch16_dinov3.lvd1689m \
--image_path /path/to/image.jpg \
--device npu:0
# CPU 推理
python3 inference.py \
--model_path /path/to/vit_small_patch16_dinov3.lvd1689m \
--image_path /path/to/image.jpg \
--device cpupython3 benchmark.py \
--model_path /path/to/vit_small_patch16_dinov3.lvd1689m \
--npu_device npu:0评测结果日志将输出到 log.txt。
| 参数 | 说明 | 默认值 |
|---|---|---|
--model_path | 模型权重路径(包含 config.json, model.safetensors) | 必需 |
--image_path | 输入图像路径 | 必需 |
--device | 运行设备,可选 npu:0 或 cpu | npu:0 |
--weight_file | 权重文件名,可选 model.safetensors 或 pytorch_model.bin | model.safetensors |
--no_warmup | 跳过 NPU 预热阶段 | False |
| 参数 | 说明 | 默认值 |
|---|---|---|
--model_path | 模型权重路径 | 必需 |
--image_path | 测试图像路径(默认自动生成) | 自动生成 |
--npu_device | NPU 设备 ID | npu:0 |
--num_warmup | NPU 预热轮数 | 3 |
使用同一张测试图像分别在 CPU(FP32)和 NPU(FP32)上运行推理,对比输出特征向量的差异。
| 指标 | 含义 | 判定阈值 |
|---|---|---|
| 向量级相对误差 | ` | |
| 余弦相似度 | NPU 与 CPU 输出向量间的方向一致性 | > 0.99 |
| 最大/平均绝对误差 | 逐元素差值统计,反映数值偏差的绝对量级 | — |
| 输出张量 | 向量级相对误差 | 余弦相似度 | 最大绝对误差 | 平均绝对误差 |
|---|---|---|---|---|
| features | 0.225044% | 0.9999975562 | 2.38e-03 | 6.31e-04 |
| 指标 | 实测值 | 阈值 | 状态 |
|---|---|---|---|
| 向量级相对误差 | 0.23% | < 1% | PASS |
| 余弦相似度 | 0.999998 | > 0.99 | PASS |
| 操作 | 耗时 |
|---|---|
| CPU 推理时间(FP32) | 0.77s |
| NPU 推理时间(FP32,3轮预热后) | 0.02s |
| 加速比 (CPU / NPU) | 45.45x |
timm.create_model() 创建架构后加载本地权重。DINOv3 的 QKV bias 在 timm 中默认为 False(与原始权重一致)。