1. Introduction
1.1 什么是QNN
QNN是高通发布的神经网络推理引擎,是SNPE的升级版,其主要功能是:
- 完成从Pytorch/TensorFlow/Keras/Onnx等神经网络框架到高通计算平台的模型转换;
- 完成模型的低比特量化(int8),使其能够运行在高通神经网络芯片上;
- 提供测试工具(qnn-net-run),可以运行网络并保存输出;
- 提供测试工具(qnn-profile-viewer),可以进行FLOPS、参数量、每一层运行时间等分析;
1.2 QNN与SNPE的变化
- SNPE模型使用容器(DL container)格式保存,QNN模型使用cpp,json和bin文件保存;
- SNPE模型在运行前无需编译,可以直接在不同平台下运行,QNN的模型需要先编译到对应平台,才可以运行;
- SNPE模型转化(snpe-xxx-to-dlc)和模型量化(snpe-dlc-quantize)在QNN中被合并到一个步骤(qnn-xxx-converter)
2. Linux端
QNN的Linux端提供这些功能:
qnn-accuracy-debugger
qnn-netron
qnn-platform-validator
qnn-tensorflow-converter
qnn-accuracy-evaluator
qnn-net-run
qnn-profile-viewer
qnn-tflite-converter
qnn-context-binary-generator
qnn-onnx-converter
qnn-pytorch-converter
qnn-throughput-net-run
qnn-model-lib-generator
qnn-op-package-generator
qnn-quantization-checker
模型转化、模型量化、模型分析等操作需要在Linux下完成。
2.1 环境配置
2.1.1 拷贝文件
以qnn-2.13.2.230822为例,将QNN的SDK解压到服务器端,然后配置环境变量(仅在当前终端生效,新开终端需要再次配置):
export QNN_SDK_ROOT=/path/to/your/qnn-2.13.2.230822
执行初始化操作:
source ${QNN_SDK_ROOT}/bin/envsetup.sh
输出:
[INFO] AISW SDK environment set
[INFO] QNN_SDK_ROOT: /xxx/xxx/qnn-2.13.2.230822
2.1.2 配置Python环境
新建Conda环境(推荐):
conda create -n qnn python==3.8
conda activate qnn
自动安装依赖:
${QNN_SDK_ROOT}/bin/check-python-dependency
如果遇到Permission denied,需要把 ${QNN_SDK_ROOT}/bin
路径下的文件赋予可执行权限:
chomd 777 ${QNN_SDK_ROOT}/bin/*
2.1.3 安装Linux依赖
执行:
bash ${QNN_SDK_ROOT}/bin/check-linux-dependency.sh
2.1.4 测试
执行
qnn-net-run --version
输出:
qnn-net-run pid:1947023