- Neural Processing Engine
- AI Engine Direct
使用 Neural Processing Engine 部署模型
模型 DLC(量化或非量化)可以通过启用了 SNPE 的应用(使用 SNPE C/C++ API 编写的应用)进行部署。SNPE 提供了用于加载 DLC、选择运行模型的运行时以及执行推理等的 API。SNPE 提供了预构建的 snpe-net-run 工具(使用 C API 编写的应用),它可以加载任意模型 DLC 并对提供的输入运行该模型。- **模型文件:**由 SNPE 转换器工具或
snpe-dlc-graph-prepare工具(如果在 HTP 上运行)生成的 DLC 模型文件。 - **输入列表:**文本文件,类似于量化时使用的
input_list.txt文件,不同之处在于此列表中的输入 raw 文件用于推理。为简单起见,本示例中推理使用与量化相同的输入列表。 - **运行时:**用户必须选择在目标设备上运行模型的特定运行时。可用的运行时选项包括 CPU、GPU 和 DSP(HTP)。
有关更多详情,请参阅
snpe-net-run --help。运行 SNPE .dlc:x86 主机
转换后的 SNPE .dlc 可以使用snpe-net-run 工具运行,该工具以 .dlc 和输入列表作为参数。在 x86 上运行 SNPE DLC 纯粹用于调试目的。例如,以下命令加载 inception_v3.dlc 模型并在 x86 CPU 上运行该模型。它将输出文件生成到 /output_x86/。SNPE 的默认运行时是 CPU。使用
snpe-net-run 执行模型时,无需指定 CPU 运行时。
准备 SNPE 模型以在目标设备上运行
要在目标设备上运行模型,snpe-net-run 需要模型 .dlc、SNPE 运行时库和输入列表来运行推理以生成输出。在目标设备上运行之前,请确保已将 SNPE SDK 二进制文件和库推送到目标设备。
${QAIRT_ROOT}/lib/aarch64-oe-linux-gcc11.2 和 ${QAIRT_ROOT}/bin/aarch64-oe-linux-gcc11.2 的工件为 Qualcomm 评估套件使用正确的 DSP Hexagon 架构库:适用于 Qualcomm 评估套件的 Hexagon 架构库
对于其他硬件的 Hexagon 架构,请查看此页面。
需要在主机上执行以下
scp 命令,以便将 SNPE SDK 库和二进制文件复制到设备。将
<dsp-arch> 替换为:IQ-8275 使用 75,IQ-9075 使用 73,Qualcomm Dragonwing™ RB3 Gen 2 使用 68。运行 SNPE .dlc:基于 Arm 的 CPU
在执行模型之前设置环境变量,以确保 SNPE 二进制文件和库可用于运行模型。SNPE 的默认运行时是 CPU。使用
snpe-net-run 执行模型时,无需指定 CPU 运行时。
运行 SNPE DLC:GPU
要在 GPU 运行时上运行模型,请使用inception_v3.dlc 并将输出保存到 output_gpu 中。要在 GPU 上运行,请使用
--use_gpu 命令行参数指定运行时。运行 SNPE DLC:HTP
要在 HTP 后端运行模型,请使用inception_v3_quantized_with_htp_cache.dlc 并将输出保存到 output_htp 中。要在 HTP 上运行,请使用
--use_dsp 命令行参数指定运行时。
验证输出
对于馈送给snpe-net-run 的每个输入 raw 文件(通过 input_list 文件),都会生成一个输出文件夹,其中包含以 raw 文件保存的输出张量,其大小将与模型的输出层匹配,如下图所示。使用 Netron 工具对模型进行可视化。

inception_v3 示例中,输出 raw 文件是一个二进制文件,包含 1000 个分类类别的概率。我们使用 Python 脚本将该文件读取为 NumPy 数组,以执行后处理和输出验证。以下示例检查 HTP 预测是否与 CPU 预测相同。-
将输出文件从目标设备复制到主机,以便验证输出。
在下面的(
compare.py)Python 脚本中使用上面命令中的<path>。 -
将设备端推理的输出复制到主机后,准备一个脚本以加载
output_htp和output_cpu中保存的输出张量进行比较。 在此示例中,output_htp和output_cpu都被复制到~/models目录。 以下是用于比较所使用的示例输入之一的输出的示例脚本。可以使用numpy.fromfile(…)API 将snpe-net-run的输出加载到 NumPyndarrays中。默认情况下,snpe-net-run会将输出张量以 float32 格式保存到 NumPy 文件中。
使用 SNPE API 进行部署
SNPE SDK 提供 C/C++ API 用于创建/开发应用,这些应用能够在所选硬件(CPU、GPU 或 HTP)上以硬件加速的方式运行模型。请参阅演示 SNPE C/C++ API 的示例应用。使用 Qualcomm Intelligent Multimedia SDK(IM SDK)进行部署
为改善开发者在构建完整用例流水线(从摄像头进行流传输、预处理图像、执行推理等)时的体验,SNPE 已作为插件(qtimlsnpe)集成到 Qualcomm IM SDK 中。该插件基于 SNPE C API 开发,提供 SNPE 能力(加载并运行模型)。通过 qtimlsnpe 插件,您可以在 Qualcomm IM SDK 流水线中使用转换后的模型 DLC 来实现您的用例。有关如何使用 Qualcomm IM SDK 部署 SNPE DLC 的说明,请参阅 Qualcomm IM SDK 概述。

