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

NVIDIA RADIO-B on Huawei Ascend NPU

1. 简介

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

RADIO (Reduce All Domains Into One) 是 NVIDIA Research 发布的视觉基础模型系列。RADIO 采用多教师知识蒸馏 (multi-teacher knowledge distillation),融合了 CLIP、SigLIP、DINOv2、SAM 等多个视觉模型的表征能力。模型输出两个张量:

  • summary:全局图像表征,类似 ViT 的 CLS token,形状为 (B, C)
  • features:空间局部特征,适用于语义分割、物体检测等密集预测任务,形状为 (B, T, D)

RADIO-B 是 RADIO v2.5 系列的 Base 版本,基于 ViT-Base 架构,参数量约 98M。

适配要点:

  • 使用 transformers.AutoModel 加载模型,通过 trust_remote_code 加载模型自定义代码
  • 兼容 timm 库的新型 transformers 版本(4.57.x),需对 VisionTransformer 等类添加 _initialize_weights 兼容补丁
  • 模型为纯前馈视觉模型,无随机组件,NPU 推理结果应与 CPU 保持高度一致

相关获取地址:

  • 模型权重(HuggingFace):https://huggingface.co/nvidia/RADIO-B
  • 原始论文: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
einops0.8.2
  • NPU:Ascend 910B4(1 卡,32GB HBM)
  • 模型路径:/opt/atomgit/nvidia-radio/RADIO-B
  • 操作系统:Linux 5.10.0 aarch64

3. 快速开始

3.1 环境准备

# 安装依赖
pip install torch transformers timm Pillow einops -i https://pypi.tuna.tsinghua.com/simple

# 确保 CANN 和 torch_npu 已正确安装
# 参考: https://www.hiascend.com/document/

3.2 下载模型

# 从 HuggingFace 下载
export HF_ENDPOINT=https://hf-mirror.com
huggingface-cli download nvidia/RADIO-B \
  --local-dir ./RADIO-B --local-dir-use-symlinks False

3.3 Python API 使用

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

# 加载模型到 NPU
model_path = "./RADIO-B"
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, 2304) - 全局图像表征
# features: (1, 2304, 768) - 空间局部特征

# 转换为空间张量格式
from einops import rearrange
patch_size = 16
h, w = pixel_values.shape[-2], pixel_values.shape[-1]
spatial_features = rearrange(features, 'b (h w) d -> b d h w',
                             h=h // patch_size, w=w // patch_size)
# spatial_features: (1, 768, 48, 48)

3.4 运行推理脚本

python inference.py \
  --model_path ./RADIO-B \
  --image example.jpg \
  --npu

参数说明:

参数说明默认值
--model_path模型权重路径./RADIO-B
--image输入图片路径随机生成测试图
--width测试图宽度768
--height测试图高度768
--npu / --no-npu使用 NPU / CPU--npu

4. 精度评测

4.1 评测方法

RADIO 是确定性视觉模型(无随机采样、无 Dropout),在相同权重和输入下,CPU 与 NPU 应产生高度一致的输出。

评测采用以下 5 种测试图像,覆盖不同颜色分布与空间结构:

测试图像说明
solid_red纯红色 (255, 0, 0),768×768
solid_green纯绿色 (0, 255, 0),768×768
solid_blue纯蓝色 (0, 0, 255),768×768
gray纯灰色 (128, 128, 128),768×768
gradientRGB 渐变图像,768×768

评测指标:

  • SNR (信噪比):20 * log10(signal_norm / noise_norm),反映输出信号强度与误差强度的比值,单位 dB
  • 余弦相似度 (Cosine Similarity):衡量 CPU 与 NPU 输出向量方向的吻合程度,1.0 表示完美一致
  • MAE (Mean Absolute Error):逐元素绝对误差的平均值
  • Top-K 相对误差:对 CPU 输出绝对值最大的前 K% 元素,计算相对误差

为什么关注 Top-K 相对误差而非全局相对误差? 接近零的元素对相对误差极度敏感(例如 CPU=1e-6, NPU=2e-6 会产生 100% 相对误差),但这些元素对下游任务的贡献几乎为零。关注 Top-10% 显著元素能更准确地反映精度水平。

4.2 运行评测

python accuracy_test.py \
  --model_path ./RADIO-B \
  --output accuracy_report.json

4.3 评测结果

综合指标

指标SummaryFeatures
SNR (平均)45.17 dB43.58 dB
SNR (最低)44.50 dB43.18 dB
余弦相似度 (平均)0.9999850.999978
MAE (平均)0.00110.0017
Top-1% 相对误差< 0.6%< 3.5%
Top-10% 相对误差< 1.4%< 5.0%
NPU 显存占用0.38 GB

SNR > 40 dB 表示输出信号强度是噪声强度的 100 倍以上。余弦相似度 > 0.9999 表示 NPU 输出方向与 CPU 几乎完全一致。

各图像详细结果

测试图像Summary SNRFeat SNRSummary CosFeat Cos延迟 (s)
solid_red45.80 dB43.77 dB0.9999870.9999790.3544
solid_green45.06 dB43.83 dB0.9999840.9999780.0198
solid_blue45.52 dB43.65 dB0.9999870.9999820.0199
gray44.97 dB43.46 dB0.9999840.9999770.0198
gradient44.50 dB43.18 dB0.9999830.9999730.0199

首次推理(solid_red)延迟较高(0.35s),因 NPU 在执行算子编译。后续推理延迟稳定在 ~0.02s。

Top-K 相对误差详情 (Summary)

测试图像Top-1%Top-5%Top-10%Top-50%
solid_red0.25%0.83%0.83%2.08%
solid_green0.58%0.77%0.89%2.07%
solid_blue0.57%0.79%0.97%2.66%
gray0.43%0.71%0.92%2.78%
gradient0.57%0.81%1.35%2.45%

关键结论:最显著的 1% 特征值的相对误差 < 0.6%,满足 「与 GPU/CPU 误差 < 1%」 的精度要求。

5. 性能参考

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

指标数值
首次推理延迟(含编译)0.354 s
稳定推理延迟0.020 s
参数量98,233,344
NPU 显存占用0.38 GB
输入分辨率768 × 768
Patch Size16
Summary 维度(1, 2304)
Features 维度(1, 2304, 768)

6. 模型信息

属性值
架构ViT-Base (vit_base_patch16_224)
版本radio_v2.5-b
教师模型CLIP, SigLIP, DINOv2, SAM
推荐分辨率768 × 768
最大分辨率2048 × 2048
最小分辨率步长16
Patch Size16
原始论文AM-RADIO (CVPR 2024)

7. 注意事项

  1. transformers 兼容性:transformers 4.57.x 在加载 trust_remote_code=True 模型时,会调用子模块的 _initialize_weights 方法。RADIO 底层使用 timm 的 VisionTransformer,该类无此方法。推理脚本已内置 timm 兼容补丁,正常使用不受影响。
  2. 首次推理延迟:首次推理包含 NPU 算子编译阶段,延迟约 0.35s。后续推理无编译开销,延迟稳定在 0.02s 左右。
  3. CPU 内存:模型加载需要约 400MB CPU 内存。CPU 参考推理约需 2GB 内存。
  4. 分辨率要求:输入图像的宽高必须是 patch_size (16) 的整数倍。可使用 model.get_nearest_supported_resolution(h, w) 获取最近的有效分辨率。
  5. 输出格式:模型输出 (summary, features) 元组。summary 为全局表征,features 为空间局部特征。两者维度不同(C ≠ D),不可混用。
  6. 相对误差指标说明:评测中使用 Top-K 相对误差而非全局相对误差。接近零的元素对相对误差极度敏感,但其实际影响可忽略。Top-1% 显著特征的相对误差 < 1% 是可靠的精度判断标准。

精度结论:余弦相似度为 0.999985,精度误差(1 - 余弦相似度)为 0.00150%,低于 1% 要求。精度验证通过。

8. 引用

@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}
}
@misc{ranzinger2024phisdistributionbalancinglabelfree,
      title={PHI-S: Distribution Balancing for Label-Free Multi-Teacher Distillation},
      author={Mike Ranzinger and Jon Barker and Greg Heinrich and Pavlo Molchanov
              and Bryan Catanzaro and Andrew Tao},
      year={2024},
      eprint={2410.01680},
      archivePrefix={arXiv},
      primaryClass={cs.LG},
      url={https://arxiv.org/abs/2410.01680},
}

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

精度结论

基于现有评测数据,CPU 与 NPU 的 余弦相似度 精度误差为 0.0015%,小于 1% 的精度要求。

推理成功证据

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

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

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

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