linux环境安装qnn_sdk 采坑记录

这里主要是介绍 Qualcomm AI Engine Direct SDK,高通新的AI模型推理框架,又名QNN,本文是记录在Linux上搭建qnn可以运行的软件环境。如果是wsl的话,请确认一定要是为wsl2, wsl1走到最后是不能成功的。

QNX sdk 链接。

https://code.qualcomm.com/nextev-usa-inc/automotive-ai-sdk-for-qualcomm-neural-networks-zip-2-0_qti-tools_oem/tree/r23104.2

一、linux上环境的配置

1.1 基础软件环境说明

注意: 这里测试python3.8故下载qnn==2.20(及ubuntu20)。2.22以上需要python3.10和ubuntu22环境,经过测试ubuntu22环境很重要,后面会有一些底层环境受到Ubuntu版本的限制。

环境采坑记录:

  1. 在wsl1 使用的是ubuntu22的环境,python3.10 创建虚拟环境但是在使用check-python-dependece的时候,却提示需要python3.8, 所以又创建了python3.8的虚幻环境,但是在高通环境安装qpm的时候出现了, 所以需要升级wsl2.官网上又提到要在wsl2的环境运行。所以转战linux 服务器上配置。

解决:a. 转战服务器 b. 升级wsl1到wsl2 c. 忽视错误继续尝试。

System has not been booted with systemd as init system (PID 1). Can't operate. Failed to connect to bus: Host is down

1. 选择了在服务器上运行,python3.8 和ubuntu20.04.3的环境进行运行, 但是运行qnn-net-run 的时候出现了下面的的库找不到。

qnn-net-run: error while loading shared libraries: libunwind.so.1: cannot open shared object file: No such file or directory。

原因分析:注意: 这里测试python3.8故下载qnn==2.20(及以下)。2.22以上需要python3.10和ubuntu22环境,经过测试ubuntu22环境很重要,后面会有一些底层环境受到Ubuntu版本的限制。

使用的qnn 是2.27的版本。

解决:1. 解决libunwind.so.1库的问题,那么可能后续还有其他的问题。2. 使用2.22以下的qnn sdk。

1.2 linux 服务器详细的配置过程

1. 获取qnn的SDK 软件包 官方网址可以下载,看自己需要的是linux还是android的。https://code.qualcomm.com/nextev-usa-inc/automotive-ai-sdk-for-qualcomm-neural-networks-zip-2-0_qti-tools_oem/tree/r23104.2

2. 安装pthon 依赖包

Sudo apt-get update

sudo apt-get install python3.10 python3-distutils libpython3.10 ubuntu 22.0以上使用python3.10

sudo add-apt-repository ppa:deadsnakes/ppa 可以指定安装源也可以不指定,看自己的环境。

sudo apt-get update

sudo apt-get install python3.8

3. 配置sdk的环境变量

export QNN_SDK_ROOT=/home/shengqing.liu/qnn_sdk-2-27

export QNN_SDK_ROOT=/home/lsq/qnn/qnn_sdk_tool/qaisw-2-27

source ${QNN_SDK_ROOT}/bin/envsetup.sh

这样子可以永久保存,打开新的命令终端也可以正常的加载环境变量。

echo 'export QNN_SDK_ROOT="/home/shengqing.liu/qnn_sdk-2-27"' >> ~/.bashrc

echo 'export PATH="${QNN_SDK_ROOT}:${PATH}"' >> ~/.bashrc

source ~/.bashrc

这种表示配置ok

4. 配置python虚拟环境

这个按照官网配置python3.10, 但是运行环境check的时候,提示需要的环境是3.8. 所以安装3.8的Python虚拟镜像。

sudo apt-get install python3.8-venv

sudo python3.8 -m venv qnn_vir

source bin/activate

5. 安装机器学习框架

Pip install tensorflow==2.8.0(Python3.8)

TensorFlow: tf-2.8.0

TFLite: tflite-2.3.0

PyTorch: torch-1.13.1

Torchvision: torchvision-0.14.1

ONNX: onnx-1.12.0

ONNX Runtime: onnxruntime-1.18.0

ONNX Simplifier: onnxsim-0.4.36 

5. 在虚拟环境中配置python依赖

python3 -m pip install --upgrade pip ------(可能会提示安装更新失败,所以失败的话可以增加权限

sudo chmod 77 -R qnnvir-3.8

${QNN_SDK_ROOT}/bin/check-python-dependency

6. 安装linux环境中依赖的库

sudo bash ${QNN_SDK_ROOT}/bin/check-linux-dependency.sh

查看是否配置成功

qnn-net-run --verison

出现报错:

qnn-net-run: error while loading shared libraries: libunwind.so.1: cannot open shared object file: No such file or directory。

原因: libunwind.so.1没有被找到。

查看是不是有这个库。 dpkg -l |grep libunwind

显示安装的是libunwind-dev和libunwind8, 但是需要的是libunwind.so.1 。

解决方法:

  1. 安装libunwind1 但是安装sudo apt install libunwind1 出现失败,找不到包。

A. 更新软件源 , 还是不能下载到。

  1. 进行libunwind8 ru链接, 不推荐, 但是有用

    # 查找已安装的库路径(通常为 /usr/lib/x86_64-linux-gnu/)
    find /usr/lib* -name "libunwind.so*"
    
    # 创建符号链接(假设找到 libunwind.so.8)
    sudo ln -s /usr/lib/x86_64-linux-gnu/libunwind.so.8 /usr/lib/x86_64-linux-gnu/libunwind.so.1
    
    # 更新动态链接器
    sudo ldconfig
    
    再次check环境
    
    ${QNN_SDK_ROOT}/bin/check-python-dependency
    
    sudo bash ${QNN_SDK_ROOT}/bin/check-linux-dependency.sh

问题:

x86_64-linux-clang/qnn-net-run: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.33' not found (required by x86_64-linux-clang/qnn-net-run)

x86_64-linux-clang/qnn-net-run: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by x86_64-linux-clang/qnn-net-run)

解决:

查看系统的版本是2.3,系统是是ubuntu是20.4的,高版本的qnn(2.22以上) 需要22.04, 所以后面会出现一系列的系统问题。

手动安装glic-2.34

sudo apt-get install build-essential cmake make libtool autoconf git

mkdir -p $HOME/glibc-2.34
cd $HOME/glibc-2.34
wget http://ftp.gnu.org/gnu/libc/glibc-2.34.tar.gz
tar -xvzf glibc-2.34.tar.gz
cd glibc-2.34
mkdir build
cd build
../configure --prefix=$HOME/glibc-2.34-install
make -j$(nproc)
make install
安装在$HOME/glibc-2.34-install 目录。
加入临时的环境变量:

export LD_LIBRARY_PATH=$HOME/glibc-2.34-install/lib:$LD_LIBRARY_PATH
x86_64-linux-clang/qnn-net-run

如果可行,加入配置文件,永久生效。
echo 'export LD_LIBRARY_PATH=$HOME/glibc-2.34-install/lib:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc

再次check环境。

${QNN_SDK_ROOT}/bin/check-python-dependency

sudo bash ${QNN_SDK_ROOT}/bin/check-linux-dependency.sh

qnn_2.27 版本太高了,需要glibc-2.33以上,这个是和linux版本绑定的),手动安装没有用安装。

没办法切换qnn低版本,使用qnn_2.12版本,成功了。

7. 配置android sdk的路径和环境变量

官方文档说,如果是wsl的环境,那么android sdk 一定需要在home 目录下解压,放置在这里,也不知道真假,所以只能重新下载一个配置路径。

​
sudo wget https://dl.google.com/android/repository/android-ndk-r26c-linux.zip

echo 'export ANDROID_NDK_ROOT="/home/android-ndk-r26c"' >> ~/.bashrc

echo 'export PATH="${ANDROID_NDK_ROOT}:${PATH}"' >> ~/.bashrc

source ~/.bashrc

​

这样子表示设置android ndk OK了。

这里面有check 各个环境的指令。

envcheck -a. 全部成功。

到这里,qnn_sdk就算安装成功了。

### Qualcomm Neural Network for Android 使用指南 #### 集成环境配置 为了在Android平台上使用Qualcomm神经网络(QNN),开发者需先安装并设置好开发环境。这包括下载和集成Snapdragon神经处理引擎(NPE) SDK,该工具包提供了必要的API接口来加速AI模型推理过程[^1]。 #### 创建QNN模型实例 通过NPE SDK可以创建用于执行DNN计算的任务对象。对于Android应用而言,通常会利用Java或Kotlin编写客户端代码,并调用JNI桥接至C++层实现高性能运算逻辑。下面是一个简单的例子展示如何初始化一个QNN模型: ```cpp // C++部分:加载预训练好的TensorFlow Lite或其他框架导出的模型文件 std::shared_ptr<qnn_model> model = qnn_create_model_from_file("path/to/model.tflite"); if (!model){ throw std::runtime_error("Failed to load QNN model."); } ``` #### 执行前向传播操作 一旦成功构建了QNN模型实例之后,则可以通过输入张量数据来进行预测或者分类等任务。这里需要注意的是,在实际部署过程中可能还需要考虑量化、优化等问题以提高效率降低功耗。 ```java // Java/Kotlin部分:准备输入特征并向native方法传递参数 float[] inputFeatures = new float[]{/*...*/}; int result = nativeRunInference(inputFeatures); switch(result){ case 0: Log.d(TAG,"Success!"); break; default: Log.e(TAG,"Error occurred during inference."); } ``` #### 性能优化建议 针对移动设备的特点,用适当的技术手段如混合精度浮点数表示法(FP16/INT8), 对于某些特定场景下的性能提升效果显著;另外也可以尝试调整batch size大小以及线程数量等超参选项进一步挖掘硬件潜力[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值