“星瑞” O6 评测 ——NPU 算力对比高通骁龙 npu
前言
在当下人工智能蓬勃发展的时代,设备的 NPU(神经网络处理器)算力成为衡量其 AI 处理能力的关键指标。“星瑞” O6 凭借其独特的 NPU 设计在市场中崭露头角,而高通骁龙系列处理器中的 NPU 也以高性能著称。本文将深入剖析 “星瑞” O6 的 NPU 与高通骁龙相关型号 NPU 的算力表现,通过实际 yolox_l 模型的推理速度测试和数据对比,为读者呈现二者在 AI 运算能力上的差异。
1. "星瑞"O6NPU 简介
瑞莎星睿 O6 (Radxa Orion O6) 拥有高达 28.8TOPs NPU (Neural Processing Unit) 算力,支持 INT4 / INT8 / INT16 / FP16 / BF16 和 TF32 类型的加速。 此文档主要讲解用户如何使用 CIX P1 NPU SDK 运行基于 NPU 加速推理的人工智能模型和应用。包括模型编译工具,工具链和一些常见模型案例进行逐步讲解。
2. 高通骁龙 8gen1+/8gen4 简介
高通骁龙系列处理器集成的 NPU,作为其 AI 引擎的核心,在移动 AI 运算领域持续创新与突破,为各类智能设备注入强大的 AI 处理能力。手里有两台设备:骁龙 8gen1+和骁龙 8gen4。两台设备都是台积电的 4nm 工艺。算力指标网上都没有找到。所以这里只能实测对了。其他指标可以参考高通官网:https://www.qualcomm.com/prod...
3. "星瑞"O6NPU 跑 yolox
具体可参考官方:https://docs.radxa.com/orion/...
设备端 python 环境安装
#1.安装驱动/python sdk包
sudo dpkg -i ./cix-npu-driver_1.0.0_arm64.deb
sudo dpkg -i ./cix-noe-umd_1.0.0_arm64.deb
#安装完之后重启O6设备。推理用的python sdk包已经安装在系统python路径中
#2.下载model hub
git clone https://e.coding.net/g-uaqh1479/ai-model-hub/ai_model_hub.git
#3.创建python环境
cd ~/ai_model_hub
python3 -m venv --system-site-packages .venv
#4.安装依赖
cd ~/ai_model_hub
.venv/bin/pip3 install -r requirements.txt
设备端 yolox_l 推理
#1.激活.venv python环境
#2.下载预编译好的yolox模型。
mkdir ~/ai_model_hub/models && cd ~/ai_model_hub/models
wget https://modelscope.cn/models/cix/ai_model_hub_25_Q1/resolve/master/models/ComputeVision/Object_Detection/onnx_yolox_l/yolox_l.cix
#3.推理,并统计耗时
cd ~/ai_model_hub
python models/ComputeVision/Object_Detection/onnx_yolox_l/inference_npu.py --image_path models/ComputeVision/Object_Detection/onnx_yolox_l/test_data/ILSVRC2012_val_00004704.JPEG --model_path
~/ai_model_hub/models/yolox_l.cix
结果可视化/推理耗时
4. 高通 npu 跑 yolox
手里两台手机的处理器分别是骁龙 8gen1+与骁龙 8gen4。高通的推理需要 Qualcomm AI Engine Direct SDK,其安装与使用可参考:https://docs.qualcomm.com/bun...。
我用的 Qualcomm AI Engine Direct SDK 2.26 版本,首先将上面的 yolox 进行 A8W8/A8W16 量化,再用 Qualcomm AI Engine Direct SDK 中 python 进行推理测试。
4.1 A8W8 量化
$QNN_SDK_ROOT/bin/x86_64-linux-clang/qnn-onnx-converter -i onnx_models/yolox_l.onnx --float_bitwidth 32 -o qnn_models_a8w8/yolox_l.cpp --act_bitwidth 8 --weights_bitwidth 8 --bias_bitwidth 32 --input_list output/input_raw_radxa_yolox.txt
4.2 A16W8 量化
$QNN_SDK_ROOT/bin/x86_64-linux-clang/qnn-onnx-converter -i onnx_models/yolox_l.onnx --float_bitwidth 32 -o qnn_models_a8w8/yolox_l.cpp --act_bitwidth 16 --weights_bitwidth 8 --bias_bitwidth 32 --input_list output/input_raw_radxa_yolox.txt
4.3 骁龙 8gen1+推理测试
手机硬件配置是:12+256。骁龙 8gen1+的 dsp type 为 v69
cd $QNN_SDK_ROOT
python3.10 qnn_bench.py -c yolox_l_quant.json --dsp_type v69
yolox_l_quant.json 中的内容为:
{
"Name": "yolox",
"HostRootPath": "output/yolox",
"HostResultsDir": "output/yolox/results",
"DevicePath": "/data/local/tmp/qnnbm.repo",
"Devices": ["8bb435e6"],
"Runs": 3,
"Model": {
"Name": "YOLOX",
"qnn_model": "/home/5_radxa/qnn_run/qnn_models/aarch64-android/libyolox_l.so",
"InputList": "/opt/qcom/aistack/qairt/2.26.0.240828/output/input_raw_radxa_yolox.txt",
"Data": ["/opt/qcom/aistack/qairt/2.26.0.240828/output/cropped2"]
},
"Backends": ["DSP"],
"Measurements": ["timing"]
}
4.4 骁龙 8gen4 推理测试
手机硬件配置是:16+512。骁龙 8gen4 的 dsp type 为 v79
cd $QNN_SDK_ROOT
python3.10 qnn_bench.py -c yolox_l_quant.json --dsp_type v67
yolox_l_quant.json 中只需要改一下Devices
:
{
"Name": "yolox",
"HostRootPath": "output/yolox",
"HostResultsDir": "output/yolox/results",
"DevicePath": "/data/local/tmp/qnnbm.repo",
"Devices": ["AJTLVB4A31003354"],
"Runs": 3,
"Model": {
"Name": "YOLOX",
"qnn_model": "/home/5_radxa/qnn_run/qnn_models/aarch64-android/libyolox_l.so",
"InputList": "/opt/qcom/aistack/qairt/2.26.0.240828/output/input_raw_radxa_yolox.txt",
"Data": ["/opt/qcom/aistack/qairt/2.26.0.240828/output/cropped2"]
},
"Backends": ["DSP"],
"Measurements": ["timing"]
}
5. benchmark
序号 | 设备 | 模型 | 输入分辨率 | 量化类型 | converter engine | 执行 engine | 模型格式 | 推理耗时/ms |
---|---|---|---|---|---|---|---|---|
8gen1+ | yolox_l | 640x640 | A16W8 | 2.26 | 2.26 | so | 46.362 | |
8gen1+ | yolox_l | 640x640 | A16W8 | 2.27 | 2.26 | so | 51.677 | |
8gen1+ | yolox_l | 640x640 | A16W8 | 2.30 | 2.26 | so | 51.684 | |
8gen1+ | yolox_l | 640x640 | A16W8 | bin | 73.213 | |||
8gen1+ | yolox_l | 640x640 | A8W8 | 2.26 | 2.26 | so | 47.673 | |
8gen4 | yolox_l | 640x640 | A16W8 | 2.26 | 2.30 | 53.336 | ||
8gen4 | yolox_l | 640x640 | A16W8 | 2.27 | 2.30 | 52.714 | ||
8gen4 | yolox_l | 640x640 | A16W8 | 2.30 | 2.30 | 52.466 | ||
8gen4 | yolox_l | 640x640 | A8W8 | 2.26 | 2.30 | 23.799 | ||
orion o6 | yolox_l | 640x640 | 29.78 | |||||
说明:
- 8gen4 在 a16w8 上推理速度并没有提升,我换了 qnn sdk 版本编译,还是同样的推理速度
- 8gen4 比 8gen1+推理更慢。我已给高通提了 issue,期待回复,后续我会更新。
- 从推理速度来看 orion o6 只是比 8gen4 稍差,比 8gen1+能打,还需要更多模型的测试。
6. 参考
- https://docs.radxa.com/orion/...
- 高通骁龙 8 处理器简介:https://www.qualcomm.com/prod...
- 高通 Qualcomm AI Engine Direct SDK:https://docs.qualcomm.com/bun...