模型: microsoft/rad-dino 硬件: 华为昇腾 Ascend 910B4 软件: PyTorch 2.9.0 + torch_npu 2.9.0 + CANN 8.5.1
Rad-Dino 是一个基于 DINOv2 (ViT-B/14) 的视觉 Transformer 模型,专为医学影像(胸部 X 光片)特征提取设计。模型输出 CLS token(全局特征)和 Patch tokens(局部空间特征),可迁移到下游医学影像分析任务。
| 属性 | 值 |
|---|---|
| 模型架构 | Dinov2Model (ViT-B/14) |
| 参数量 | 86M |
| 输入尺寸 | 518×518 像素 |
| Patch 尺寸 | 14×14 |
| 输出维度 | CLS: [1, 768], Patch: [1, 1369, 768] |
| Transformer 层数 | 12 |
| 注意力头数 | 12 |
# Python 3.11.14
pip install torch==2.9.0 torch_npu==2.9.0
pip install transformers pillow einops jaxtyping safetensors requests| 依赖 | 版本 |
|---|---|
| PyTorch | 2.9.0 |
| torch_npu | 2.9.0 |
| CANN | 8.5.1 |
| transformers | ≥4.36 |
| einops | ≥0.8 |
| jaxtyping | ≥0.3 |
模型来源: ModelScope - microsoft/rad-dino
from modelscope.hub.snapshot_download import snapshot_download
model_dir = snapshot_download("AI-ModelScope/rad-dino")本模型基于 HuggingFace transformers.AutoModel 架构,无需修改模型代码即可直接在 NPU 上运行。适配要点:
AutoModel.from_pretrained() → .npu()AutoImageProcessor.from_pretrained() 自动处理torch.inference_mode() 加速src/ 目录加入 PYTHONPATHimport torch
import torch_npu
from transformers import AutoModel, AutoImageProcessor
# 加载
model = AutoModel.from_pretrained("microsoft/rad-dino").eval().npu()
processor = AutoImageProcessor.from_pretrained("microsoft/rad-dino", use_fast=False)
# 预处理
inputs = processor(image, return_tensors="pt")
inputs = {k: v.npu() for k, v in inputs.items()}
# 推理
with torch.inference_mode():
outputs = model(**inputs)
cls_token = outputs.last_hidden_state[:, 0] # [1, 768]
patch_tokens = outputs.last_hidden_state[:, 1:] # [1, 1369, 768]| 检查项 | 结果 |
|---|---|
| 模型加载到 NPU | ✅ npu:0 (Ascend910B4) |
| 单图推理 | ✅ 15 ms |
| 输出无 NaN/Inf | ✅ |
| 输出维度正确 | ✅ CLS: [1,768], Patch: [1,1369,768] |
| 真实 X 光片推理 | ✅ CLS norm=17.02, 特征值正常 |
| Batch Size | 平均时延 (ms) | P99 时延 (ms) | 吞吐量 (img/s) | 标准差 (ms) |
|---|---|---|---|---|
| 1 | 14.8 | 15.0 | 67.37 | 0.1 |
| 2 | 21.4 | 21.7 | 93.37 | 0.2 |
| 4 | 38.2 | 38.4 | 104.63 | 0.1 |
性能分析:
| 指标 | CLS Token | Patch Tokens |
|---|---|---|
| 最大绝对误差 | 5.37e-03 | 1.05e-02 |
| 平均绝对误差 | 7.73e-04 | 5.94e-04 |
| Cosine Similarity | 0.999999 | - |
| 判定 (atol=1e-2, rtol=1e-3) | PASS | PASS |
NPU 与 CPU 推理结果高度一致,精度完全满足医疗影像特征提取需求。
# 1. 添加 rad_dino 工具包
export PYTHONPATH=/path/to/rad-dino/src:$PYTHONPATH
# 2. 运行推理脚本
python3 infer_rad_dino_npu.py
# 3. 运行基准测试
python3 infer_rad_dino_npu.py --benchmark --precision| 参数 | 说明 | 默认 |
|---|---|---|
--benchmark | 运行性能基准测试 | False |
--precision | 运行精度验证 | False |
--batch-sizes | 批量大小列表 | [1, 2, 4] |
--num-runs | 测试轮次 | 10 |
├── infer_rad_dino_npu.py # NPU 推理适配脚本(含 benchmark + 精度验证)
├── sample_chest_xray.jpg # 模拟胸部 X 光片
├── model_cache/
│ └── microsoft/rad-dino/ # 本地模型缓存
└── README.md # 本文件rad-dino 模型在昇腾 Ascend 910B4 NPU 上完成适配验证:
AutoModel + .npu()