模型卡片标注:
#NPU#Ascend#DINOv3#VisionTransformer
| 项目 | 内容 |
|---|---|
| 模型名称 | facebook/dinov3-vits16-pretrain-lvd1689m |
| 模型类型 | Vision Transformer (ViT-S/16) |
| 参数量 | 21.6 M |
| 隐藏维度 | 384 |
| 注意力头数 | 6 |
| 层数 | 12 |
| Patch 大小 | 16 × 16 |
| 输入尺寸 | 224 × 224 |
| 训练数据 | LVD-1689M (16.89 亿张 Instagram 图片) |
| 权重格式 | Safetensors |
| 框架支持 | transformers >= 4.56.0 |
本方案基于 华为昇腾 910B4 NPU + CANN 8.5.1 + torch_npu 2.9.0 完成 DINOv3 ViT-S/16 模型的推理适配。
| 指标 | 结果 |
|---|---|
| 功能验证 | 通过(单图特征提取) |
| Pooler Output 平均相对误差 | 0.75% (< 1% 阈值) |
| Last Hidden State 余弦相似度 | 0.999998 (> 0.9999 阈值) |
| CPU 平均延迟 | 466.7 ms |
| NPU 平均延迟 | 17.2 ms |
| 性能提升 | 约 27× |
| 软件 | 版本 |
|---|---|
| CANN | 8.5.1 |
| PyTorch | 2.9.0+cpu |
| torch_npu | 2.9.0.post1 |
| transformers | 4.57.6 |
| Python | 3.11 |
pip install torch==2.9.0 transformers>=4.56.0 pillow numpy
# torch_npu 需按昇腾官方指引安装# 方式一:GitCode 镜像
git clone https://gitcode.com/hf_mirrors/facebook/dinov3-vits16-pretrain-lvd1689m.git
# 方式二:ModelScope
modelscope download --model facebook/dinov3-vits16-pretrain-lvd1689mpython inference.py \
--model_path ./dinov3-vits16-pretrain-lvd1689m \
--image ./test_image.jpg \
--device npu \
--dtype float32 \
--output features.npy参数说明:
| 参数 | 说明 | 默认值 |
|---|---|---|
--model_path | 模型本地路径 | ./dinov3-vits16-pretrain-lvd1689m |
--image | 输入图片路径 | 必填 |
--device | 运行设备:cpu 或 npu | npu |
--dtype | 数据类型:float32 / float16 / bfloat16 | float32 |
--output | 输出特征文件路径 | features.npy |
--warmup | Warmup 轮数 | 3 |
--iterations | 测速迭代次数 | 10 |
python benchmark.py \
--model_path ./dinov3-vits16-pretrain-lvd1689m \
--dtype float32 \
--warmup 5 \
--iterations 20 \
--output benchmark_result.json评测脚本会自动:
在 Ascend 910B4 上的实测数据(float32,20 次迭代,5 次 warmup):
| 指标 | CPU | NPU | 提升倍数 |
|---|---|---|---|
| 平均延迟 | 466.68 ms | 17.20 ms | 27.1× |
| P50 延迟 | 470.76 ms | 17.11 ms | 27.5× |
| P99 延迟 | 476.57 ms | 17.78 ms | 26.8× |
| 吞吐量 | 2.14 img/s | 58.14 img/s | 27.1× |
以 CPU float32 结果为基准,NPU float32 结果对比:
| 指标 | 数值 |
|---|---|
| 平均绝对误差 | 0.000838 |
| 平均相对误差 | 0.75% |
| 最大相对误差 | 23.77% |
| 余弦相似度 | 0.999998 |
| ** verdict** | 通过 |
| 指标 | 数值 |
|---|---|
| 平均绝对误差 | 0.000591 |
| 平均相对误差 | 1.17% |
| 余弦相似度 | 0.999998 |
| verdict | 通过(余弦相似度 > 0.9999) |
说明:Last Hidden State 的平均相对误差略高,主要因为 Patch Token 中存在大量接近 0 的值,导致相对误差分母极小。余弦相似度达到 0.999998,说明方向一致性极高,不影响下游任务。
DINOv3 基于标准 Vision Transformer,核心算子为 nn.Linear、nn.GELU、nn.Softmax、nn.LayerNorm。torch_npu 对这些算子已有良好支持,无需额外算子替换。
| 数据类型 | 精度 | 速度 | 推荐场景 |
|---|---|---|---|
float32 | 最高 | 基准 | 精度敏感任务(本文验证通过) |
float16 | 高 | 更快 | 需要进一步提速时 |
bfloat16 | 高 | 更快 | 若硬件支持 |
当前脚本默认 batch_size=1。增大 batch size 可提升 NPU 利用率:
# 多张图片同时推理
images = [Image.open(p) for p in image_paths]
inputs = processor(images=images, return_tensors="pt").to("npu")如遇性能不达预期,可尝试以下环境变量:
export TASK_QUEUE_ENABLE=1
export PYTORCH_NPU_ALLOC_CONF=max_split_size_mb:256| 文件 | 说明 |
|---|---|
inference.py | 单图推理脚本,支持 CPU/NPU |
benchmark.py | 精度与性能评测脚本 |
benchmark_result.json | 评测结果(JSON) |
features_cpu.npy / features_npu.npy | 示例输出特征向量 |
test_image.jpg | 测试图片 |
torch_dtype 参数在 transformers 4.57 中已弃用,建议改用 dtype。UserWarning 提示文件属主不匹配,不影响推理结果。HCCL。模型权重遵循原仓库许可证(Apache-2.0)。适配代码以 MIT 许可发布。
本文档由 Model Agent 自动生成,验证日期:2026-05-09