DINOv3-ViT-S16 在 NPU 上的部署
1. 简介
本文档记录 dinov3-vits16-pretrain-lvd1689m 在昇腾 NPU 环境的部署与验证结果。
DINOv3 ViT-Small(ViT-S/16)是一种轻量级视觉基础模型,可输出图像特征以用于下游任务。
相关地址:
环境信息
文件结构
dinov3-vits16-pretrain-lvd1689m-ascend/
├── inference.py # 推理脚本
└── README.md # 本文档
运行推理
精度测试
cd dinov3-vits16-pretrain-lvd1689m-ascend/
python inference.py --model_path /opt/atomgit/mxy/dinov3-vits16-pretrain-lvd1689m --precision_test
图像推理
cd dinov3-vits16-pretrain-lvd1689m-ascend/
python inference.py --model_path /opt/atomgit/mxy/dinov3-vits16-pretrain-lvd1689m --image_path /tmp/test_image.jpg --device npu:0
5. 安装依赖
docker exec test-dinov3 bash -c "pip3 install safetensors pillow -q -i https://repo.huaweicloud.com/repository/pypi/simple/"
6. 推理执行
docker exec test-dinov3 bash -c "source /usr/local/Ascend/ascend-toolkit/set_env.sh && \
cd dinov3-vits16-pretrain-lvd1689m/ascend_adapt && \
python3 inference.py \
--model_path dinov3-vits16-pretrain-lvd1689m \
--image_path /tmp/test_image.jpg \
--device npu:0 \
2>&1 | tee test.log"
7. 参数说明
| 参数 | 说明 | 默认值 |
|---|
| --model_path | 模型权重路径 | 必需 |
| --image_path | 待推理图像路径 | 必需 |
| --warm_image_path | 预热图像路径 | 同 --image_path |
| --device | 运行设备 | npu:0 |
| --no_warmup | 跳过预热阶段 | False |
| --precision_test | 运行精度测试 | False |
8. 精度测试结果
精度测试结果
| 指标 | 实测值 | 阈值 | 状态 |
|---|
| Max Error (sum) | 4.88e-04 | < 1e-3 | PASS |
| Max Error (mean) | 2.38e-07 | < 1e-5 | PASS |
| Max Error (std) | 5.96e-08 | < 1e-5 | PASS |
性能数据
| 操作 | 耗时 |
|---|
| CPU 参考计算 (20 tensors) | 0.0156s |
| NPU 推理 (20 tensors) | 0.2380s |
9. 推理结果
2026-05-17 14:17:00,000 - INFO - ============================================================
2026-05-17 14:17:00,000 - INFO - DINOv3-ViT-S16 昇腾 NPU 推理
2026-05-17 14:17:00,000 - INFO - ============================================================
2026-05-17 14:17:00,000 - INFO - 模型路径: dinov3-vits16-pretrain-lvd1689m
2026-05-17 14:17:00,000 - INFO - 图像路径: /tmp/test_image.jpg
2026-05-17 14:17:00,000 - INFO - 设备: npu:0
2026-05-17 14:17:00,000 - INFO - 正在加载模型: dinov3-vits16-pretrain-lvd1689m
2026-05-17 14:17:02,000 - INFO - 模型已加载到设备: npu:0
2026-05-17 14:17:02,000 - INFO - 模型精度: torch.float32
2026-05-17 14:17:02,000 - INFO - ----------------------------------------
2026-05-17 14:17:02,000 - INFO - 开始预热...
2026-05-17 14:17:08,000 - INFO - 预热完成
2026-05-17 14:17:08,000 - INFO - ----------------------------------------
2026-05-17 14:17:08,000 - INFO - 开始推理...
2026-05-17 14:17:14,000 - INFO - 推理耗时: 6.3534秒
2026-05-17 14:17:14,000 - INFO - 池化输出形状: torch.Size([1, 384])
2026-05-17 14:17:14,000 - INFO - 隐藏状态形状: torch.Size([1, 201, 384])
2026-05-17 14:17:14,000 - INFO - ============================================================
2026-05-17 14:17:14,000 - INFO - 推理成功完成!
2026-05-17 14:17:14,000 - INFO - ============================================================
10. 性能参考
| 指标 | 值 |
|---|
| 推理时间 (FP32) | 6.35秒/图 |
| 预热时间 (FP32) | ~6秒 |
| 内存占用 | ~1GB (FP32) |
11. 注意事项
- ViT-Small 模型: 参数量小 (~21M),可以使用 FP32 推理
- 推理时间: 首次推理较慢(约6秒),预热后可加速
- 精度: 使用 float32,不影响特征提取质量
- 精度测试: NPU 与 CPU 误差极小,max sum error 为 4.88e-04,远低于阈值 1e-3