Skip to main content

使用 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 预测相同。
  1. 将输出文件从目标设备复制到主机,以便验证输出。
    在下面的(compare.py)Python 脚本中使用上面命令中的 <path>。
  2. 将设备端推理的输出复制到主机后,准备一个脚本以加载 output_htp 和 output_cpu 中保存的输出张量进行比较。 在此示例中,output_htp 和 output_cpu 都被复制到 ~/models 目录。 以下是用于比较所使用的示例输入之一的输出的示例脚本。可以使用 numpy.fromfile(…) API 将 snpe-net-run 的输出加载到 NumPy ndarrays 中。
    默认情况下,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 概述。