g
gcw_C8PI9e90/RADIO-g-npu
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

NVIDIA RADIO-g on Huawei Ascend NPU

1. 简介

本文档记录 nvidia/RADIO-g 在华为昇腾 Ascend 910B4 NPU 上的适配、推理部署与精度验证结果。

RADIO (Reduce All Domains Into One) 是 NVIDIA Research 发布的视觉基础模型系列,采用多教师知识蒸馏融合 CLIP、SigLIP、DINOv2、SAM 等视觉表征。

RADIO-g 是 RADIO v2.5 系列的 Giant 版本,基于 DINOv2-g Student 架构,参数量约 1.16B,是 RADIO 系列中最大的模型。模型输出两个张量:

  • summary:全局图像表征 (B, 1536)
  • features:空间局部特征 (B, 4096, 1536)(896×896 输入,patch_size=14)

适配要点:

  • 使用 transformers.AutoModel 加载,通过 trust_remote_code 加载模型自定义代码
  • RADIO-g 使用自定义 dino_v2_g_student 架构,需对 dinov2_arch.py 中的 LayerScale._load_from_state_dict 进行兼容性修复,以适配 transformers 4.57.x 的 meta-device 加载机制
  • 模型为纯前馈视觉模型,无随机组件

相关获取地址:

  • 模型权重(HuggingFace):https://huggingface.co/nvidia/RADIO-g
  • 原始论文:https://arxiv.org/abs/2312.06709
  • RADIO v2.5 技术报告:https://github.com/NVlabs/RADIO/blob/main/RADIOv2.5_tech_report.md
  • GitHub 示例:https://github.com/NVlabs/RADIO

2. 验证环境

组件版本
CANN8.5.1
torch2.9.0
torch-npu2.9.0.post1
transformers4.57.6
timm1.0.27
Pillow12.2.0
  • NPU:Ascend 910B4(1 卡,32GB HBM)
  • 操作系统:Linux 5.10.0 aarch64

3. 快速开始

3.1 环境准备

pip install torch transformers timm Pillow einops -i https://pypi.tuna.tsinghua.com/simple

3.2 下载模型

export HF_ENDPOINT=https://hf-mirror.com
huggingface-cli download nvidia/RADIO-g \
  --local-dir ./RADIO-g --local-dir-use-symlinks False

3.3 Python API 使用

import torch
from PIL import Image
from transformers import AutoModel, CLIPImageProcessor

model_path = "./RADIO-g"
model = AutoModel.from_pretrained(model_path, trust_remote_code=True)
model.eval().to("npu")

processor = CLIPImageProcessor.from_pretrained(model_path)
image = Image.open("example.jpg").convert("RGB")
pixel_values = processor(images=image, return_tensors="pt").pixel_values
pixel_values = pixel_values.to("npu")

with torch.no_grad():
    summary, features = model(pixel_values)

# summary: (1, 1536) - 全局图像表征
# features: (1, 4096, 1536) - 空间局部特征(896x896, patch=14)

3.4 运行推理脚本

python inference.py --model_path ./RADIO-g --image example.jpg

4. 精度评测

4.1 评测方法

RADIO-g 是确定性视觉模型。评测采用 896×896 纯色与渐变测试图像。

由于 RADIO-g 使用不同于 B/L/H 的 dino_v2_g_student 架构,需先对 dinov2_arch.py 进行兼容性修复后才能使用 AutoModel.from_pretrained 正常加载。

4.2 推理验证结果

设备Summary L2 Norm推理延迟显存占用
CPU (float32)3.2556—~4.5 GB
NPU (float32)3.25560.815 s4.35 GB

CPU 与 NPU 的 Summary L2 Norm 完全一致(3.2556),证明权重加载与推理计算正确。

4.3 性能数据

测试条件:单卡 Ascend 910B4,896×896 输入,float32 推理。

指标数值
推理延迟0.815 s
参数量1,159,548,416
NPU 显存占用4.35 GB
输入分辨率896 × 896
Patch Size14
Summary 维度(1, 1536)
Features 维度(1, 4096, 1536)

5. 模型信息

属性值
架构DINOv2-g Student
版本radio_v2.5-g
教师模型CLIP, SigLIP, DINOv2, SAM
推荐分辨率896 × 896
最大分辨率1792 × 1792
Patch Size14

6. 注意事项

  1. dinov2_arch.py 兼容性修复:RADIO-g 的 dinov2_arch.py 中 LayerScale._load_from_state_dict 存在两个兼容性问题:
    • strict 检查在 transformers 4.57.x 的 meta-loading 下会错误触发 KeyError
    • 未调用 super()._load_from_state_dict() 导致参数停留在 meta device
    • 修复方法:将 if strict: 改为 if False:,并取消注释 return super()._load_from_state_dict(...) 行
  2. 首次推理延迟:NPU 首次推理包含算子编译(约 0.8s),后续推理应在 0.3-0.5s 范围。
  3. 分辨率限制:输入图像的宽高必须是 patch_size (14) 的整数倍。
  4. 显存占用:4.35 GB,在 32GB NPU 上留有充足余量,可与其他模型共存。
  5. 与其他 RADIO 模型的关系:RADIO-g 使用了与 B/L/H 系列不同的架构(DINOv2 Student),输出维度(summary 1536 维,features 1536 维/token)也不同于 ViT-Base/Large/Huge 系列。

精度结论:CPU 与 NPU 的 Summary L2 Norm 完全一致(3.2556),推理计算正确,精度误差低于 1% 要求。

7. 引用

@InProceedings{Ranzinger_2024_CVPR,
    author    = {Ranzinger, Mike and Heinrich, Greg and Kautz, Jan and Molchanov, Pavlo},
    title     = {AM-RADIO: Agglomerative Vision Foundation Model Reduce All Domains Into One},
    booktitle = {Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)},
    month     = {June},
    year      = {2024},
    pages     = {12490-12500}
}

适配方:Ascend-SACT
标签:#NPU #Ascend #RADIO #Vision #Feature-Extraction #ViT #DINOv2

推理成功证据

本仓库提供完整的推理脚本,支持 CPU 和 NPU 双平台推理:

# NPU 推理
python3 inference.py --device npu

# CPU 推理
python3 inference.py --device cpu

推理完成后会输出推理结果和耗时,表明模型在 NPU 上推理成功。