- 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-net-run 工具运行转换后的 SNPE .dlc,该工具以 .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 架构库:- IQ-8275: 使用 v75 库
- IQ-9075: 使用 v73 库
- Qualcomm Dragonwing™ RB3 Gen 2: 使用 v68 库
需要在主机上执行以下
scp 命令,将 SNPE SDK 库和二进制文件复制到设备。对于 IQ-8275,将
<dsp-arch> 替换为 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 委托和后端:要在 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 智能多媒体 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 概述。

