X
Xiaoxy510/dinov2-base-ascend
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

dinov2-base on Ascend NPU

1. 简介

本文档记录 dinov2-base 在昇腾 NPU 环境的适配与验证结果。

模型信息:

  • 模型类型:Vision Transformer (ViT-B/14)
  • 参数量:86M
  • 输入尺寸:[1, 3, 518, 518]
  • 输出:last_hidden_state + pooler_output

相关地址:

  • 权重下载地址(HuggingFace):https://huggingface.co/facebook/dinov2-base
  • 权重下载地址(ModelScope):https://modelscope.cn/models/facebook/dinov2-base
  • 原项目地址:https://github.com/facebookresearch/dinov2

2. 验证环境

组件版本
torch2.10.0
torch_npu2.10.0
transformers5.8.1
  • NPU:1 逻辑卡
  • 模型路径:/data/xxy/dinov2-base
  • Conda 环境:dinov2-base

3. 环境配置

3.1 创建 conda 环境

conda create -n dinov2-base python=3.11 -y
conda activate dinov2-base

3.2 安装依赖

pip install torch==2.10.0 torchvision --index-url https://download.pytorch.org/whl/cpu
pip install torch_npu transformers pillow -i https://repo.huaweicloud.com/repository/pypi/simple

3.3 验证环境

python -c "import torch; print('NPU available:', torch.npu.is_available())"

4. 适配方法

DINOv2 模型通过 HuggingFace AutoModel 加载,主要适配工作:

  1. 设备迁移:使用 model.to("npu:0") 将模型权重迁移到 NPU
  2. 输入处理:将输入张量移至 NPU 设备 pixel_values.to("npu:0")
  3. 同步调用:NPU 推理后调用 torch.npu.synchronize() 确保计算完成

5. 使用方式

5.1 基本推理

# 使用随机张量推理
python inference.py

# 使用图片推理
python inference.py --image /path/to/image.jpg

# 指定设备
python inference.py --device cpu
python inference.py --device npu:0

5.2 精度与性能评测

python eval.py

评测结果将输出到终端并保存到 log.txt。

6. 评测结果

6.1 精度评测

使用随机输入对比 CPU 与 NPU 输出,计算最大绝对误差相对于值范围的百分比。

输出最大绝对误差相对误差 (%)
last_hidden_state9.98e-020.2967
pooler_output4.18e-020.3574
全局9.98e-020.3574 ✅

精度阈值要求:相对误差 < 1%

6.2 性能评测

指标CPUNPU
平均推理耗时608.07 ms13.25 ms
加速比1x45.88x

首次 NPU 推理耗时较长(包含图编译开销),预热后平均推理耗时 13.25 ms。

7. 文件结构

dinov2-base-ascend/
├── inference.py    # 推理脚本
├── eval.py         # 精度与性能评测脚本
├── log.txt         # 评测日志
└── README.md       # 本文档

8. 注意事项

  1. 首次 NPU 推理包含图编译开销,性能测试需先预热
  2. 模型输入尺寸为 [1, 3, 518, 518](与 DINOv2 原版一致)
  3. Conda 环境名称与模型名称一致:dinov2-base
  4. 精度计算采用相对于值范围的百分比,避免小值导致的相对误差放大