Search code examples
gpuqualcommonnxsnpe

Does Qualcomm SNPE work on a linux board?


I wish to get the qualcomm SNPE (snapdragon neural processing engine) working on my linux (not Android) board (flightPro w/ qualcomm 820.) . It works fine on the cpu.

I've successfully followed the examples provided to load alexnet onto my 820 board and run snpe (snpe-net-run) in cpu mode. It does not run in gpu mode.

Searching the web and forums (e.g., https://developer.qualcomm.com/forum/qdn-forums/software/qualcomm-neural-processing-sdk/59207) it seems that all (?) linux boards may be missing the opencl driver that would be required to make this work.

Following the example...

> snpe-net-run --container bvlc_alexnet.dlc --input_list target_raw_list.txt --use_gpu 
The selected runtime is not available on this platform. Continue 
anyway to observe the failure at network creation time.
Aborted

I expected the gpu to work (and hopefully, fingers crossed to be substantially faster than the cpu!)


Solution

  • You need to consult your board vendor/manufacturer and your Linux BSP provider.

    From the SNPE product page, the 820 is listed as supported but it is also mentioned that libOpenCL.so must be present on the device (highlighted in bold below).

    The Qualcomm Neural Processing SDK supports Qualcomm® Snapdragon™ 855, 845, 820, 835, 712, 675, 660, 653, 652, 650, 636, 632, 630, 626, 625, 450, 439, and 429 as well as Qualcomm® QCS605 and QCS403, Qualcomm® SM6125, the Qualcomm® Snapdragon™ 820Am automotive platform and Qualcomm Flight. For Qualcomm® Adreno™ GPU support, libOpenCL.so must be present on device.

    For our case, we were using a board with the 626 and an Adreno™ 506 GPU. The board vendor also provided the Linux BSP. When we built the Linux image, it already included a libOpenCL.so under /usr/lib (32-bit) and /usr/lib64 (64-bit).

    We were also using another development board from another vendor, and the SNPE SDK was included with the development kit along with instructions on how to set it up onboard.

    Basically, it depends on the board and the accompanying BSP. Otherwise, you'll probably need to customize your Linux image to add support for it.