Troubleshooting for QNN LPAI Backends (x86 Simulator, ARM & aDSP)¶
This paragraph provides a comprehensive guide for executing and troubleshooting QNN LPAI backends across x86 (simulator), ARM (Android), and native aDSP targets.
Environment Variable Export Commands¶
ARM Target (Android)¶
export QNN_TARGET_ARCH=aarch64-android
export HW_VER=v6
aDSP Target (Hexagon DSP)¶
export QNN_TARGET_ARCH=aarch64-android
export DSP_ARCH=hexagon-v81
export DSP_VER=V81
export HW_VER=v6
x86 Simulator (Linux)¶
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${QNN_SDK_ROOT}/lib/x86_64-linux-clang
x86 Simulator (Windows)¶
set PATH=%PATH%;%QNN_SDK_ROOT%\lib\x86_64-windows-msvc
Execution Examples¶
x86 Simulator (Linux)¶
From Quantized Model:
cd ${QNN_SDK_ROOT}/examples/QNN/converter/models
${QNN_SDK_ROOT}/bin/x86_64-linux-clang/qnn-net-run \
--backend ${QNN_SDK_ROOT}/lib/x86_64-linux-clang/libQnnLpai.so \
--model ${QNN_SDK_ROOT}/examples/QNN/example_libs/x86_64-linux-clang/libQnnModel.so \
--input_list input_list_float.txt \
--config_file /path/to/config.json
From Serialized Buffer:
${QNN_SDK_ROOT}/bin/x86_64-linux-clang/qnn-net-run \
--backend ${QNN_SDK_ROOT}/lib/x86_64-linux-clang/libQnnLpai.so \
--retrieve_context qnn_model_8bit_quantized.serialized.bin \
--input_list input_list_float.txt \
--config_file /path/to/config.json
x86 Simulator (Windows)¶
cd %QNN_SDK_ROOT%\examples\QNN\converter\models
%QNN_SDK_ROOT%\bin\x86_64-windows-msvc\qnn-net-run.exe
--backend %QNN_SDK_ROOT%\lib\x86_64-windows-msvc\QnnLpai.dll
--model %QNN_SDK_ROOT%\examples\QNN\example_libs\x86_64-windows-msvc\QnnModel.dll
--input_list input_list_float.txt
--config_file C:\path\to\config.json
ARM Target (Android)¶
adb shell mkdir -p /data/local/tmp/LPAI/adsp
adb push ./output/qnn_model_8bit_quantized.serialized.bin /data/local/tmp/LPAI
adb push ${QNN_SDK_ROOT}/lib/${QNN_TARGET_ARCH}/libQnnLpai.so /data/local/tmp/LPAI
adb push ${QNN_SDK_ROOT}/lib/${QNN_TARGET_ARCH}/libQnnLpaiStub.so /data/local/tmp/LPAI
adb push ${QNN_SDK_ROOT}/lib/${QNN_TARGET_ARCH}/libQnnLpaiNetRunExtensions.so /data/local/tmp/LPAI
adb push ${QNN_SDK_ROOT}/lib/lpai-${HW_VER}/unsigned/libQnnLpaiSkel.so /data/local/tmp/LPAI/adsp
adb push ${QNN_SDK_ROOT}/examples/QNN/converter/models/input_data_float /data/local/tmp/LPAI
adb push ${QNN_SDK_ROOT}/examples/QNN/converter/models/input_list_float.txt /data/local/tmp/LPAI
adb push ${QNN_SDK_ROOT}/bin/aarch64-android/qnn-net-run /data/local/tmp/LPAI
adb shell
cd /data/local/tmp/LPAI
export LD_LIBRARY_PATH=/data/local/tmp/LPAI:/data/local/tmp/LPAI/adsp
export ADSP_LIBRARY_PATH="/data/local/tmp/LPAI/adsp"
./qnn-net-run --backend ./libQnnLpai.so --device_options device_id:0 \
--retrieve_context ./qnn_model_8bit_quantized.serialized.bin \
--input_list ./input_list_float.txt
aDSP Target (Hexagon DSP)¶
adb push ${QNN_SDK_ROOT}/lib/lpai-${HW_VER}/unsigned/libQnnLpai.so /data/local/tmp/LPAI/adsp
adb push ${QNN_SDK_ROOT}/lib/lpai-${HW_VER}/unsigned/libQnnLpaiNetRunExtensions.so /data/local/tmp/LPAI/adsp
adb push ${QNN_SDK_ROOT}/lib/${DSP_ARCH}/unsigned/libQnnHexagonSkel_App.so /data/local/tmp/LPAI/adsp
adb push ${QNN_SDK_ROOT}/lib/${DSP_ARCH}/unsigned/libQnnNetRunDirect${DSP_VER}Skel.so /data/local/tmp/LPAI/adsp
adb push ${QNN_SDK_ROOT}/lib/${QNN_TARGET_ARCH}/libQnnNetRunDirect${DSP_VER}Stub.so /data/local/tmp/LPAI
export LD_LIBRARY_PATH=/data/local/tmp/LPAI:/data/local/tmp/LPAI/adsp
export ADSP_LIBRARY_PATH="/data/local/tmp/LPAI/adsp"
Example config.json¶
The table below shows the differences in config.json for each supported backend type:
Target |
shared_library_path |
config_file_path |
context_configs |
|---|---|---|---|
Simulator (x86) |
${QNN_SDK_ROOT}/lib/x86_64-linux-clang/libQnnLpaiNetRunExtensions.so |
./lpaiParams.conf |
“is_persistent_binary”: false |
aDSP (Hexagon) |
/data/local/tmp/LPAI/adsp/libQnnLpaiNetRunExtensions.so |
./lpaiParams.conf |
“is_persistent_binary”: true |
ARM Android |
/data/local/tmp/LPAI/libQnnLpaiNetRunExtensions.so |
./lpaiParams.conf |
“is_persistent_binary”: false |
Each configuration should be wrapped in the following structure:
{
"backend_extensions": {
"shared_library_path": "<appropriate path>",
"config_file_path": "./lpaiParams.conf"
},
"context_configs": {
"is_persistent_binary": true
}
}
Troubleshooting Table¶
Issue Category |
Symptoms |
Resolution & Debugging Commands |
|---|---|---|
Library Not Found or Load Errors |
|
|
Context Binary Generator Setup Failure |
|
|
Simulator Setup Failure |
|
|
Incorrect Environment Variables |
|
|
ELF Format or Architecture Mismatch |
|
|
Unsigned or Improperly Signed Libraries |
|
|
Invalid or Missing Configuration |
|
{
"backend_extensions": {
"shared_library_path": "/data/local/tmp/LPAI/adsp/libQnnLpaiNetRunExtensions.so",
"config_file_path": "./lpaiParams.conf"
}
}
|
Model Execution Fails or Incorrect Output |
|
|
Root Permissions |
|
|