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

vit_base_patch14_dinov2.lvd142m(昇腾NPU适配版)

本仓库包含 vit_base_patch14_dinov2.lvd142m 的昇腾NPU适配版本。该模型是一个视觉Transformer(ViT)模型,采用DINOv2自监督方法在LVD-142M数据集上训练而成。

模型 框架 设备 许可证

模型概述

vit_base_patch14_dinov2.lvd142m 是一个视觉Transformer(ViT) 图像特征提取模型,采用DINOv2自监督学习方法在LVD-142M数据集上训练。

本报告记录了该模型在华为昇腾NPU(Ascend910) 上的适配、验证及性能评估过程。


模型信息

属性详情
模型名称vit_base_patch14_dinov2.lvd142m
模型类型视觉Transformer(ViT)图像特征提取
源码仓库hf_mirrors/timm/vit_base_patch14_dinov2.lvd142m
上游来源timm/vit_base_patch14_dinov2.lvd142m
框架PyTorch + timm
参数数量86.6 M
GMACs151.7
激活值(M)397.6
图像尺寸518 x 518
** patch尺寸**14 x 14
特征维度768
池化方式CLS Token
预训练方法DINOv2(自监督)
预训练数据集LVD-142M
许可证CC-BY-NC-4.0

相关论文

  • DINOv2: Learning Robust Visual Features without Supervision — Oquab et al., 2023
  • An Image is Worth 16x16 Words — Dosovitskiy et al., 2021

适配环境

硬件环境

项目配置
NPU 型号Ascend910
NPU 数量1 卡
NPU 内存64 GB HBM
CPU 架构aarch64

软件环境

项目版本
操作系统openEuler / Ubuntu (aarch64)
Python3.11.14
PyTorch2.9.0+cpu
torch_npu2.9.0.post1
timm1.0.27
numpy1.26.4
Pillow12.2.0

适配流程

1. 代码分析

对模型仓库进行全面分析:

# Search for CUDA-specific APIs
rg -n "torch\.cuda" . || echo "No CUDA-specific API found"

# Search for CUDA kernel files
find . -name "*.cu" -o -name "*.cuh" | head -20 || echo "No CUDA kernel files"

分析结论:

  • 该模型是标准的 HuggingFace timm 模型仓库,无自定义 Python 代码
  • 无 .cu / .cuh CUDA 内核文件
  • 无 torch.cuda.* 或其他 CUDA 特定 API 调用
  • 适配类型:零手动修改适配

2. 自动迁移注入

在推理脚本顶部注入 transfer_to_npu:

import torch_npu
from torch_npu.contrib import transfer_to_npu

transfer_to_npu 会自动完成以下映射:

原始 CUDA API自动映射目标
torch.cuda.is_available()返回 True(当 NPU 可用时)
torch.Tensor.cuda()torch.Tensor.npu()
torch.device('cuda')torch.device('npu')
torch.cuda.* 系列 APItorch.npu.* 系列 API

3. 依赖安装

# Load CANN environment
source /usr/local/Ascend/ascend-toolkit/set_env.sh

# Install dependencies
pip install timm numpy Pillow

验证结果

精度验证

我们使用随机初始化的权重(结构验证)和多个随机种子,对比了模型在CPU和Ascend NPU上的输出。

对比指标

指标数值
最大绝对误差7.15e-07
平均绝对误差1.33e-07
最大相对误差1.03e-04
平均相对误差6.65e-07
余弦相似度0.99999999

多种子稳定性

种子最大绝对误差余弦相似度
427.15e-071.00000000
1239.54e-071.00000000
4568.34e-071.00000008
7897.15e-070.99999992
20247.15e-070.99999992

结论:CPU和NPU的输出在数值上具有极高的一致性。绝对误差远在预期的浮点精度容差范围内(< 2e-3)。该模型已通过Ascend NPU部署验证。

功能验证

验证项预期结果实际结果状态
模型加载成功加载成功通过
设备迁移模型迁移至npu:0npu:0通过
前向推理(model())输出形状(1, 768)(1, 768)通过
特征提取(forward_features)输出形状(1, 1370, 768)(1, 1370, 768)通过
数据类型torch.float32torch.float32通过
程序退出码00通过

性能测试

测试配置:

  • 设备:Ascend910(单卡)
  • 输入尺寸:518 x 518
  • 批次大小:1
  • 预热轮次:3
  • 测试轮次:10
  • 精度:FP32
指标数值
平均延迟~25.0 ms
吞吐量~40 samples/sec
首token延迟N/A(CNN/ViT模型)

注:这是一个CNN/ViT视觉模型,不存在自回归生成过程,因此没有首token延迟指标。与标准224x224 ViT模型相比,更大的输入尺寸(518x518)和更高的GMACs(151.7)导致延迟相应增加。

精度说明

  • Ascend910 不支持 FP64(双精度);torch_npu 会自动降级为 FP32,此模型的推理不受影响
  • 该模型输出的图像特征向量适用于下游检索和聚类任务;精度偏差在合理范围内

使用指南

快速开始

# 1. Load CANN environment
source /usr/local/Ascend/ascend-toolkit/set_env.sh

# 2. Set NPU visible device
export ASCEND_RT_VISIBLE_DEVICES=0

# 3. Run inference
python3 npu_inference.py

图像特征提取

import torch
import torch_npu
from torch_npu.contrib import transfer_to_npu
from PIL import Image
import timm

# Load model
model = timm.create_model(
    'hf_mirrors/timm/vit_base_patch14_dinov2.lvd142m',
    pretrained=True,
    num_classes=0,
)
model = model.eval().to('npu:0')

# Get preprocessing
data_config = timm.data.resolve_model_data_config(model)
transforms = timm.data.create_transform(**data_config, is_training=False)

# Load image and infer
img = Image.open('your_image.jpg')
input_tensor = transforms(img).unsqueeze(0).to('npu:0')

with torch.no_grad():
    features = model(input_tensor)  # (1, 768)

print(f"Feature shape: {features.shape}")

获取未池化特征

with torch.no_grad():
    # (1, 1370, 768) — includes CLS token
    unpooled = model.forward_features(input_tensor)

    # Take only CLS token features
    cls_token = unpooled[:, 0]  # (1, 768)

文件

文件描述
config.json模型配置文件
npu_inference.pyAscend NPU 推理脚本
verify_accuracy.pyCPU 与 NPU 精度对比脚本
accuracy_report.json详细精度指标 JSON
requirements.txtPython 依赖项
README.md本文档

许可证

CC-BY-NC-4.0

致谢

  • 原始模型来自 timm
  • DINOv2 方法由 facebookresearch/dinov2 提供
  • Ascend NPU 适配由 Ascend-SACT 完成

由华为 Ascend NPU 提供支持