3,769
社区成员




qnn sdk: qualcomm_ai_engine_direct.2.31.0.250130.Linux-AnyCPU.qik
部署在高通8295安卓端
CPU部署,步骤:
```
qnn-onnx-converter -i model.onnx --out_name a --out_name b -d input_imgs 1,1,224,224 -o gaze_stat.cpp --input_list inputs_list.txt
qnn-model-lib-generator -c gaze_stat.cpp -b gaze_stat.bin -o bin -t aarch64-android
./qnn-sample-app --model "./libgaze_stat.so" --input_list "./inputs_list.txt" --backend "./libQnnCpu.so" --output_dir "./output_cpu"
```
问题1:
对于CPU推理的执行时间过长
模型未量化版本: 推理400+ms,量化版本:推理50ms左右
如何提升在cpu上部署的推理效率?
DSP V66部署, 步骤:
```
export ADSP_LIBRARY_PATH=/data/local/:/vendor/dsp/cdsp:/vendor/lib/rfsa/adsp:/system/lib/rfsa/adsp:/dsp
export LD_LIBRARY_PATH=/vendor/dsp/cdsp:/vendor/lib64/:/data/local/:${LD_LIBRARY_PATH}
./qnn-sample-app --model libgaze_stat.so --input_list inputs_list_1.txt --backend libQnnDspV66Stub.so
```
问题2:
出现如下错误:
[ ERROR ] Unable to access symbol [QnnInterface_getProviders]. pal::dynamicloading::dlError(): undefined symbol: QnnInterface_getProviders
Error initializing QNN Function Pointers
如何解决上述两个错误?
以下分别针对你在高通 8295 上 CPU 和 DSP 部署模型时遇到的问题进行分析并给出解决建议:
int main() {
#pragma omp parallel for
for (int i = 0; i < 100; ++i) {
// 并行计算的代码块
std::cout << "Thread " << omp_get_thread_num() << " processing iteration " << i << std::endl;
}
return 0;
}
- **内存优化**:减少内存的频繁读写操作,合理安排数据的存储和访问顺序。例如,采用内存池技术来管理内存,避免频繁的内存分配和释放。
#### 系统层面优化
- **CPU 调度**:确保 CPU 核心的频率和性能处于较高水平。可以通过调整系统的电源管理策略,将 CPU 设置为高性能模式。在 Android 系统中,可以使用相关的系统工具或 API 来实现。
- **编译器优化**:使用合适的编译器选项来优化代码。例如,在使用 GCC 编译器时,可以添加 `-O3` 选项来开启最高级别的优化。
### 问题 2:解决 DSP V66 部署时的符号未定义错误
#### 库文件检查
- **库文件是否存在**:确认 `libQnnDspV66Stub.so` 库文件是否存在于指定的 `LD_LIBRARY_PATH` 路径中。可以使用 `ls` 命令来检查文件是否存在。
```bash
ls /vendor/dsp/cdsp /vendor/lib64/ /data/local/ | grep libQnnDspV66Stub.so
libQnnDspV66Stub.so
库文件的版本与 QNN SDK 兼容。不兼容的库文件版本可能会导致符号未定义的错误。ADSP_LIBRARY_PATH
和 LD_LIBRARY_PATH
环境变量是否正确设置。可以使用 echo
命令来查看环境变量的值。echo $ADSP_LIBRARY_PATH
echo $LD_LIBRARY_PATH
确保环境变量中包含了所有必要的库文件路径。ldd
命令检查依赖:使用 ldd
命令检查 libQnnDspV66Stub.so
库文件的依赖是否都已正确加载。ldd /path/to/libQnnDspV66Stub.so
如果有依赖的库文件缺失或未正确加载,需要进行相应的处理。libQnnDspV66Stub.so
库文件,并确保编译过程中没有错误。