sheepss/dino-vitb16-NPU
模型介绍
文件和版本
Pull Requests
讨论
分析

facebook/dino-vitb16 on Ascend NPU

1. 模型简介

facebook/dino-vitb16 是使用 DINO(自监督视觉 Transformer 预训练方法)在 ImageNet-1k 上训练的 ViT-B/16 视觉编码器,出自论文 Emerging Properties in Self-Supervised Vision Transformers。模型将 224×224 图像切分为 16×16 patch 序列,经 12 层 Transformer encoder 编码,last_hidden_state[:, 0](CLS token)可作为整图的图像嵌入。

  • 架构:ViTModel(ViT-Base / Patch 16 / 224)
  • 任务路线:视觉编码器(image embedding / 检索)
  • 权重格式:PyTorch pytorch_model.bin(float32,约 343 MB)
  • 无分类头:DINO 预训练权重不含分类头与 pooler,验收采用 embedding 一致性而非分类 Top-5

2. 验证环境

项目值
NPUAscend910_9362(npu:0,2 卡,每卡 64 GB HBM)
CANN8.5.1
torch2.9.0
torch_npu2.9.0.post1+gitee7ba04
transformers4.57.6
Python3.11.14
操作系统Linux aarch64

3. 安装依赖

pip install -r requirements.txt

4. NPU 推理

默认命令在 npu:0 上加载本地权重并完成真实推理:

python inference.py

可选模式:

python inference.py --mode validate     # 增加 CPU-NPU 一致性验证
python inference.py --mode benchmark    # 延迟 / 峰值显存基准测试

inference.py 会优先从本地模型目录加载权重(不提交权重文件),本地不存在时显式下载。默认使用 4 张固定随机种子的确定性合成图像(3 张不同图像 + 1 张第 1 张的复制图)作为输入,完全可复现、离线可运行。

5. 真实推理结果

在 npu:0 上执行 python inference.py(fp32,batch=1,224×224):

model_name      : facebook/dino-vitb16
device          : npu:0
dtype           : fp32
first_param     : device=npu:0 dtype=torch.float32
embedding_shape : (4, 768)
cos_sim(0,0-copy)   : 1.000000
cos_sim(0,1)         : 0.991883
cos_sim(0,2)         : 0.985143
retrieval_check  : PASS (self-sim 1.0000 > cross-sim 0.9919)
RESULT: PASS
  • 输出 last_hidden_state 形状 (1, 197, 768),CLS embedding 形状 (batch, 768)
  • 相同图像对(图像 0 与其复制图)余弦相似度 1.000000,明显高于不同图像对(0.991883 / 0.985143),说明模型在 NPU 上提取的图像嵌入具备判别性

6. CPU-NPU 一致性验证

对同一批输入分别在 CPU 与 NPU 上提取 CLS 嵌入(均为 fp32),计算归一化嵌入的一致性:

cpu-npu cos sim  : 0.99999344
max abs diff     : 0.00069784 (normalized embeddings)
consistency_check: PASS

CPU 与 NPU 嵌入余弦相似度 > 0.9999,方向一致性好;差异处于 fp32 跨设备数值波动范围。该验证为固定样例一致性检查,非完整数据集精度评测。

7. 性能测试

在 npu:0 上预热 3 次、正式测试 10 次(fp32,batch=1,224×224),关键区间前 torch.npu.synchronize():

指标值
平均延迟6.865 ms
最小 / 最大延迟6.731 / 7.053 ms
p50 / p90 / p956.870 / 6.936 / 6.994 ms
峰值 NPU 显存365.1 MiB

8. 自验证截图

  • assets/agent_workflow.png:下载、侦察、加载、NPU 推理、验证、性能全流程日志
  • assets/npu_device_call.png:npu-smi info 与 torch.npu.is_available()、设备名、模型参数 device/dtype
  • assets/model_result.png:python inference.py 真实任务输出与 PASS/FAIL

9. 已知限制

  • DINO 预训练权重不包含分类头与 pooler 层,pooler_output 使用随机初始化权重,因此本适配使用 last_hidden_state[:, 0](CLS token)作为图像嵌入。
  • 输入图像被缩放到 224×224;inference.py 默认使用确定性合成图像,如需真实图片可传入 --image <路径>。
  • 性能数据为单卡、单 batch、fp32 的结果;批量推理与 fp16 精度可在 --dtype fp16 下进一步优化。

10. 标签

Hardware: NPU · NPU · Ascend · Ascend910 · vision · dino