Yanguan/vit_base_patch14_dinov2.lvd142m
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

vit_base_patch14_dinov2.lvd142m 在昇腾 NPU 上的部署

1. 简介

本文档记录 timm/vit_base_patch14_dinov2.lvd142m 在昇腾 NPU 上的适配与验证结果。

vit_base_patch14_dinov2.lvd142m 是 Meta 发布的 DINOv2 自监督视觉 Transformer 模型(ViT-Base,patch size 14),基于 LVD-142M 数据集预训练。该模型适用于图像特征提取、视觉表示学习等下游任务。

  • 模型仓库(HuggingFace):https://huggingface.co/timm/vit_base_patch14_dinov2.lvd142m
  • 模型仓库(ModelScope):https://modelscope.cn/models/timm/vit_base_patch14_dinov2.lvd142m
  • TIMM 项目主页:https://github.com/huggingface/pytorch-image-models

2. 验证环境

组件版本
torch2.9.0+cpu
torch-npu2.9.0.post1+gitee7ba04
timm1.0.27
Pillow>=9.0.0
numpy1.26.4
  • NPU:Ascend910
  • 模型路径:/opt/atomgit/weight/vit_base_patch14_dinov2.lvd142m
  • 数据样本:sample_image.jpg(COCO val2017 真实样本,已包含在仓库中)

数据样本详细说明

本仓库用于推理验证的样本图片为 MS COCO 2017 验证集中的 000000000139.jpg。该图片在仓库中以 sample_image.jpg 命名提交,与 COCO val2017 原图 MD5 完全一致(a0204aa65acc51cd8ffc128e5e94a05c),尺寸 640 × 426,RGB,JPEG,约 158 KB。由于 data/ 目录被 .gitignore 排除(避免提交大型数据集),因此将单张样本图以副本形式提交到根目录,保证克隆后即可直接运行。

3. 环境依赖安装

pip install torch==2.9.0 timm==1.0.27 Pillow numpy

注:本环境已预装 torch-npu,若在新环境部署,请参考 CANN 官方安装指南 安装对应版本的 CANN 驱动与固件。

4. 模型权重下载

AtomGit 下载

python3 -m atomgit download hf_mirrors/timm/vit_base_patch14_dinov2.lvd142m -d /opt/atomgit/weight/vit_base_patch14_dinov2.lvd142m

下载完成后,目录结构应为:

/opt/atomgit/weight/vit_base_patch14_dinov2.lvd142m/
├── config.json
├── model.safetensors
└── pytorch_model.bin

5. 推理验证(inference.py)

运行命令

python3 inference.py

运行说明

  • 脚本通过 model.to("npu") 将模型加载到 NPU 执行推理
  • 使用 monkey-patch 方式适配 NPU,不修改原始 timm 库代码
  • 输入样本为 COCO val2017 真实图片(000000000139.jpg),非随机生成

运行结果

[INFO] Applied NPU monkey-patch (torch.cuda -> torch.npu)
[INFO] Loading image from: /opt/atomgit/vit_base_patch14_dinov2.lvd142m/sample_image.jpg
[INFO] Loading model: vit_base_patch14_dinov2.lvd142m
[INFO] Model moved to NPU device: Ascend910_9362
[INFO] Input shape: torch.Size([1, 3, 518, 518])
[INFO] Device: npu:0
[INFO] Warm-up inference...
[INFO] Running timed inference...

============================================================
Inference Results
============================================================
Device:        NPU (Ascend910_9362)
Latency:       20.10 ms
Pooled output shape:   torch.Size([1, 768])
Features shape:        torch.Size([1, 1370, 768])
Pooled output dtype:   torch.float32
Pooled output device:  npu:0
Pooled output first 5 values: [-2.3621895   0.15988636 -2.5403      0.44564718 -0.6190444 ]
============================================================

[INFO] Results saved to: /opt/atomgit/vit_base_patch14_dinov2.lvd142m/output/inference_result.json
[INFO] Log saved to: /opt/atomgit/vit_base_patch14_dinov2.lvd142m/output/inference_log.txt

推理产物保存在 output/ 目录下:

  • inference_result.json:结构化推理结果(含输出张量形状、样本值、延迟等)
  • inference_log.txt:推理日志文本

6. 性能评测(benchmark.py)

运行命令

python3 benchmark.py

运行说明

  • 延迟测试:5 次预热(warm-up)+ 20 次正式测试,统计平均值(mean)/ 第50百分位数(p50)/ 第90百分位数(p90)/ 第99百分位数(p99)
  • 吞吐测试:分别在批处理大小(batch size)= 1、2、4 条件下测量每秒图像数(images/sec)

运行结果

[INFO] Applied NPU monkey-patch (torch.cuda -> torch.npu)
[INFO] Loading image from: /opt/atomgit/vit_base_patch14_dinov2.lvd142m/sample_image.jpg
[INFO] Loading model: vit_base_patch14_dinov2.lvd142m
[INFO] Model moved to NPU: Ascend910_9362
[INFO] Benchmarking latency (5 warmup + 20 timed)...

============================================================
Latency Benchmark Results
============================================================
Device:      NPU (Ascend910_9362)
Iterations:  20
Mean:        10.18 ms
StdDev:      0.02 ms
Min:         10.16 ms
Max:         10.24 ms
P50:         10.18 ms
P90:         10.20 ms
P99:         10.24 ms
============================================================
[INFO] Benchmarking throughput for batch sizes: [1, 2, 4]
  batch=1: 98.08 images/sec, avg_latency=10.20 ms
  batch=2: 116.45 images/sec, avg_latency=17.17 ms
  batch=4: 122.67 images/sec, avg_latency=32.61 ms

============================================================
Throughput Benchmark Results
============================================================
Batch= 1:   98.08 img/s | avg_latency=  10.20 ms
Batch= 2:  116.45 img/s | avg_latency=  17.17 ms
Batch= 4:  122.67 img/s | avg_latency=  32.61 ms
============================================================

[INFO] Results saved to /opt/atomgit/vit_base_patch14_dinov2.lvd142m/output

性能产物保存在 output/ 目录下:

  • benchmark_result.json:结构化性能结果(延迟分布、吞吐数据)
  • benchmark_log.txt:性能日志文本

性能参考汇总

指标数值
Latency Mean10.18 ms
Latency P5010.18 ms
Latency P9010.20 ms
Latency P9910.24 ms
Throughput (bs=1)98.08 img/s
Throughput (bs=2)116.45 img/s
Throughput (bs=4)122.67 img/s

7. 精度验证(accuracy.py)

运行命令

python3 accuracy.py

运行说明

  • 以 CPU 推理结果作为基线(baseline)
  • 对比 NPU 推理结果与 CPU 基线的向量相对误差和余弦相似度
  • 通过阈值:向量相对误差 < 1%,余弦相似度 > 0.999

运行结果

[INFO] Applied NPU monkey-patch (torch.cuda -> torch.npu)
[INFO] Loading image from: /opt/atomgit/vit_base_patch14_dinov2.lvd142m/sample_image.jpg
[INFO] Loading model: vit_base_patch14_dinov2.lvd142m

[INFO] Running CPU baseline inference...
[INFO] CPU baseline done.

[INFO] Running NPU inference...
[INFO] NPU inference done.

============================================================
Accuracy Validation Results
============================================================

pooled_output:
  Shape:                  (1, 768)
  Vector Relative Error:  0.008872 (PASS)
  Cosine Similarity:      0.999961 (PASS)
  MSE:                    0.0002185543
  Max Absolute Diff:      0.047986
  Overall:                PASS

features:
  Shape:                  (1, 1370, 768)
  Vector Relative Error:  0.005131 (PASS)
  Cosine Similarity:      0.999987 (PASS)
  MSE:                    0.0000826035
  Max Absolute Diff:      0.147741
  Overall:                PASS

============================================================
OVERALL: PASS (vector-level relative error < 1% and cosine similarity > 0.999)
============================================================

[INFO] Results saved to /opt/atomgit/vit_base_patch14_dinov2.lvd142m/output

精度验证产物保存在 output/ 目录下:

  • accuracy_result.json:结构化精度对比结果
  • accuracy_log.txt:精度日志文本

精度指标汇总

输出项向量相对误差余弦相似度MSE结论
pooled_output0.0088720.9999610.0002185543PASS
features0.0051310.9999870.0000826035PASS

8. 注意事项

  1. monkey-patch 适配:本脚本通过运行时 monkey-patch(torch.cuda -> torch.npu)实现 NPU 兼容,未修改 timm 原始库代码,升级 timm 版本时通常无需重新适配。
  2. torch.compile 禁用:由于 CPU 环境不支持 torch.compile,脚本已通过环境变量 TORCH_COMPILE_DISABLE=1 显式禁用,避免潜在兼容性问题。
  3. 输入样本来源:推理与精度验证使用的图片均来自 COCO val2017 公开数据集,确保验证结果可复现且符合真实场景。
  4. NPU 日志目录警告:若运行时出现 [LOG_WARNING] can not create directory, directory: /home/atomgit/ascend/log,属于 Ascend 驱动日志目录未创建的提示,不影响推理结果,可忽略。
  5. 权重路径:脚本默认读取 /opt/atomgit/weight/vit_base_patch14_dinov2.lvd142m/pytorch_model.bin,请根据实际下载路径修改 inference.py、benchmark.py、accuracy.py 中的 weight_path 变量。