WebSSL-DINO3B-FULL2B-224 是一个3B参数的高性能视觉Transformer模型 (Dinov2),本项目提供其在华为 Ascend NPU 环境下的部署方案。
| 项目 | 版本/内容 |
|---|---|
| 设备 | Ascend 910B |
webssl-dino3b-full2b-224-ascend/
├── inference.py # 精度测试脚本
├── test.log # 测试日志
├── README.md # 本文档
├── test_image_0.png # 测试样本1
├── test_image_1.png # 测试样本2
└── test_image_2.png # 测试样本3source /usr/local/Ascend/ascend-toolkit/set_env.sh模型文件应放在 webssl-dino3b-full2b-224/ 目录下:
cd webssl-dino3b-full2b-224-ascend/
python3 inference.py --device npu:4| 指标 | 实测值 | 阈值 | 状态 |
|---|---|---|---|
| Max Error (sum) | 2.99e-01 | < 9.45e-01 | PASS |
| Max Error (mean) | 2.06e-05 | < 1e-04 | PASS |
| Max Error (std) | 1.89e-04 | < 1e-03 | PASS |
| 操作 | 耗时 |
|---|---|
| 模型加载 | 20.85s |
| NPU 推理 | 6.33s |
| CPU 参考计算 (20 tensors) | 2.06s |
完整测试日志保存在 test.log
import torch
from PIL import Image
from transformers import AutoImageProcessor, Dinov2Model
model_path = "webssl-dino3b-full2b-224"
processor = AutoImageProcessor.from_pretrained(model_path)
model = Dinov2Model.from_pretrained(model_path, dtype=torch.bfloat16, low_cpu_mem_usage=True)
model = model.to("npu:4").eval()
# 准备输入
test_image = Image.fromarray(np.random.randint(0, 255, (224, 224, 3), dtype=np.uint8))
inputs = processor(images=test_image, return_tensors="pt")
pixel_values = inputs["pixel_values"].to("npu:4")
# 推理
with torch.no_grad():
outputs = model(pixel_values=pixel_values)
cls_features = outputs.last_hidden_state[:, 0] # [1, 3072]| 组件 | 说明 | 规格 |
|---|---|---|
| embeddings | 补丁嵌入 | patch_size=14, 3通道输入 |
| encoder | Transformer 编码器 | 26层, 3072 hidden |
| attention | 自注意力 | Multi-head self-attention |
| mlp | 前馈网络 | FFN with GELU activation |
3B 参数模型需要大量 NPU 内存,建议使用 NPU 4-7:
处理 NPU tensor 时,使用 .detach().cpu() 后再调用 .min()/.max()/.sum() 等归约操作:
# 错误 - 可能导致异步错误
cls_min = cls_features.min().item()
# 正确 - NPU tensor 安全操作
cls_min = cls_features.detach().cpu().min().item()A: 检查 NPU 驱动是否正确安装,确保 CANN 环境变量已 source。
A: 3B 模型包含475个权重文件,加载约需20秒。
A: 使用 --device npu:4 (推荐) 或 npu:5/6/7。
本项目遵循 WebSSL-DINO3B 原始许可证。