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

RADIO-L Ascend NPU 适配

1. 简介

本文档记录 RADIO-L 在 Ascend 910B3 NPU 上的推理适配与精度验证。

RADIO-L(RADIO Large)是 NVIDIA AM-RADIO 系列中的大型视觉基础模型,基于 ViT-L/16 骨干网络(约 304M 参数),参考分辨率 768×768。模型可输出 summary token(全局特征)和 spatial features(空间特征),适用于图像分类、分割、检索等通用视觉任务。

相关获取地址:

  • 权重下载地址(HuggingFace):https://huggingface.co/nvidia/RADIO-L
  • 官方仓库:https://github.com/NVlabs/RADIO

2. 验证环境

硬件环境

组件配置
NPUAscend 910B3(8×64GB HBM)
CPU192 核

软件环境

组件版本
操作系统EulerOS
torch2.10.0+cpu
torch_npu2.10.0
transformers5.8.1
timm1.0.27
CANN8.5.1
NPU 驱动25.5.2

环境变量

export OPENBLAS_NUM_THREADS=128
export OMP_NUM_THREADS=128

3. 使用方法

3.1 依赖安装

pip install torch==2.10.0+cpu torchvision==0.20.0 \
  --index-url https://repo.huaweicloud.com/repository/pypi/simple/
pip install torch_npu==2.10.0 \
  --index-url https://repo.huaweicloud.com/repository/pypi/simple/
pip install transformers timm pillow \
  --index-url https://repo.huaweicloud.com/repository/pypi/simple/

3.2 单图推理

python inference.py \
  --model_path ./RADIO-L \
  --image_path /path/to/image.jpg \
  --device npu:0

可选参数:

参数说明默认值
--model_path模型路径(HF 格式)必填
--image_path输入图片路径必填
--device运行设备npu:0
--no_warmup跳过预热False
--warmup_image预热用图片(默认同输入)None

推理日志示例:

2025-07-14 08:35:48 - INFO - Input: test_image.jpg
2025-07-14 08:35:48 - INFO -   Image size: (768, 768)
2025-07-14 08:35:48 - INFO -   pixel_values shape: (1, 3, 768, 768)
2025-07-14 08:35:48 - INFO - Inference time: 0.2706s
2025-07-14 08:35:48 - INFO -   summary shape:  (1, 3072)
2025-07-14 08:35:48 - INFO -   features shape: (1, 2304, 1024)

3.3 精度与性能评估

python eval.py \
  --model_path ./RADIO-L \
  --npu_device npu:0

评估流程:

  1. CPU 参考推理(FP32)
  2. NPU 推理(3 轮 warmup + 1 轮计时,FP32)
  3. 逐张量对比(summary + features):Frobenius 相对误差、余弦相似度、百分位误差
  4. 性能加速比

支持自定义图片:

python eval.py \
  --model_path ./RADIO-L \
  --image_path /path/to/your_image.jpg \
  --npu_device npu:0

4. 精度评测

NPU vs CPU 逐张量对比结果(FP32,生成测试图 768×768):

Summary 输出

指标数值
向量相对误差(Frobenius %)0.778983%
余弦相似度0.9999753237
最大绝对误差1.12e-02
平均绝对误差1.50e-03
P50 / P90 / P95 / P991.16e-03 / 3.22e-03 / 4.04e-03 / 5.38e-03

Features 输出

指标数值
向量相对误差(Frobenius %)0.579109%
余弦相似度0.9999881387
最大绝对误差2.74e-02
平均绝对误差2.12e-03
P50 / P90 / P95 / P991.78e-03 / 4.40e-03 / 5.25e-03 / 6.99e-03

误差说明

  • 向量相对误差(Frobenius 范数):||NPU - CPU||_F / ||CPU||_F × 100%,衡量整体数值偏差。阈值 < 1% 为 PASS。
  • 余弦相似度:衡量输出向量的方向一致性,1.0 表示方向完全一致。
  • P50/P90/P95/P99:绝对误差的百分位分布,反映误差离散程度。

5. 性能参考

性能指标数值
CPU 推理时间(FP32)2.2086s
NPU 推理时间(FP32,3 轮预热后)0.2529s
加速比 (CPU / NPU)8.73×

6. 精度分析结论

RADIO-L(约 320M 参数,768×768 分辨率)在 Ascend 910B3 NPU 上的 FP32 推理验证结果:

  • 精度:Summary 相对误差 0.78%,Features 相对误差 0.58%,均远低于 1% 阈值。余弦相似度 > 0.99997,方向几乎完全一致。
  • 性能:NPU 推理 0.2529s vs CPU 2.2086s,加速比 8.73×。
  • 结论:✅ PASS — RADIO-L 在 Ascend 910B3 NPU 上的推理精度和性能均满足要求。

7. 注意事项

7.1 all_tied_weights_keys 错误

TypeError: Can't instantiate class <ModelClass> without an `all_tied_weights_keys` attribute

transformers 5.8.1 要求模型类显式定义此属性。需在源模型 hf_model.py 的 RADIOModel 类中添加:

all_tied_weights_keys = {}

7.2 timm 依赖

pip install timm --index-url https://repo.huaweicloud.com/repository/pypi/simple/

7.3 OpenBLAS 线程数警告

OpenBLAS Warning : Detect OpenMP Loop and this application may hang...

设置环境变量:

export OPENBLAS_NUM_THREADS=128
export OMP_NUM_THREADS=128

7.4 NPU 显存不足

npu-smi info           # 检查 NPU 占用
# 指定空闲设备:--device npu:5

8. 文件说明

RADIO-L-ascend/
├── inference.py    # 单图推理脚本
├── eval.py         # NPU vs CPU 精度与性能评估脚本
├── README.md       # 本文档
├── log.txt         # 评测运行日志
└── .gitignore      # Git 忽略规则

9. 参考资料

  • RADIO 官方仓库
  • Hugging Face Model Hub — nvidia/RADIO-L
  • torch_npu 官方文档