基于高通QNN SDK的ONNXRuntime推理引擎重编

ONNX Runtime QNN 快速参考

前言:MicorSoft/onnxruntime原生只支持CUDA,TensorRT,CPU进行模型部署以及运算,本文阐述的是如何将onnx格式的模型部署在高通硬件平台并使用高通后端,例如:GPU,DSP等资源实现数据运算,跟着小编带大家一起构建ONNXRuntime-QNN

关注公众号“CrazyNET”,回复“ort-qnn-building”获取qnnbase项目,回复“qnn-sdk”获取高通最新QNN SDK

环境设置 (一次性)

# 1. 访问公众号获取项目

# 2. Python安装
add-apt-repository ppa:deadsnakes/ppa
apt update
apt install python3.11 -y
update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 1
update-alternatives --config python3
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python3.11 get-pip.py

# 3. 编译环境安装
apt update
apt install gcc g++ make git wget build-essential -y (cmake版本需要3.28及以上)

# 4.编译安装cmake_3.28.0
cd qnnbase/cmake-3.28.0 (由于小编已经构建过所有请删除CMakeCache.txt再重新构建)
echo 'export LD_LIBRARY_PATH=/your/path/to/gcc/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
strings /your/path/to/gcc/lib64/libstdc++.so | grep GLIBCXX_3.4.29
./bootstrap
make -j$(nproc)
make install

# 5. 设置 QNN SDK作者使用的是QNN v2.35.3.250617版本,这个版本包含Genie库是专门针对LLM模型的推理库
mkdir -p /opt/qcom/aistack/
unzip v2.35.3.250617.zip -D /opt/qcom/aistack/
vim /opt/qcom/aistack/qairt/2.35.3.250617/bin/envsetup.sh # 将文件中所有包含x86_64-linux-clang的字段替换为aarch64-oe-linux-gcc11.2
echo "source /opt/qcom/aistack/qairt/2.35.3.250617/bin/envsetup.sh" >> ~/.bashrc
source ~/.bashrc

# 6. 自动脚本构建编译“onnxruntime-qnn”whl库
# 参考“常用构建命令”章节

常用构建命令

# 基础构建
./auto_build.sh

# 指定 Python 版本
./auto_build.sh --python 3.9

# Debug 模式
./auto_build.sh --config Debug

# 清理构建
./auto_build.sh --clean

# 详细输出
./auto_build.sh --verbose

# 自定义并行数
./auto_build.sh --parallel 16

# 运行测试
./auto_build.sh --run-tests

Wheel 包位置

# 默认位置
onnxruntime/build/Linux/Release/dist/onnxruntime_qnn-*.whl

# 查找 wheel 文件
find onnxruntime/build -name "*.whl"

安装和使用

# 安装
pip install onnxruntime/build/Linux/Release/dist/onnxruntime_qnn-*.whl

# 验证
python -c "import onnxruntime; print(onnxruntime.get_available_providers())"

Python 示例代码

import onnxruntime as ort
import numpy as np

# QNN 配置
providers = ['QNNExecutionProvider']
provider_options = [{
    'backend_path': f'{os.environ["QNN_SDK_ROOT"]}/lib/x86_64-linux-clang/libQnnCpu.so',
}]

# 创建会话
session = ort.InferenceSession('model.onnx', providers=providers, provider_options=provider_options)

# 推理
input_data = np.random.randn(1, 3, 224, 224).astype(np.float32)
output = session.run(None, {session.get_inputs()[0].name: input_data})

日志和调试

# 查看构建日志
ls -lt logs/
tail -f logs/build_*.log

# 查看最新日志
tail -f logs/$(ls -t logs/ | head -1)

常见错误快速修复

错误解决方案
QNN_SDK_ROOT not setexport QNN_SDK_ROOT=/path/to/qnn-sdk
CMake version too old安装新版 CMake (>= 3.26)
Python.h not foundsudo apt-get install python3-dev
Permission denied使用 sudo 或检查文件权限
Out of memory减少并行数: --parallel 4

构建选项速查

选项说明示例
-h, --help显示帮助./auto_build.sh -h
-j, --parallel并行任务数./auto_build.sh -j 8
-c, --config构建类型./auto_build.sh -c Debug
-d, --build-dir构建目录./auto_build.sh -d build/custom
-p, --pythonPython 版本./auto_build.sh -p 3.10
--qnn-homeQNN SDK 路径./auto_build.sh --qnn-home /opt/qnn
--clean清理构建./auto_build.sh --clean
--run-tests运行测试./auto_build.sh --run-tests
--verbose详细输出./auto_build.sh --verbose
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值