前提条件
- 在主机上设置 QAIRT SDK。 有关详细的安装和配置说明,请参阅设置 Qualcomm AI Runtime SDK。
- 选择要进行分析的模型。 您可以使用 QAIRT 工具转换和量化自定义模型,也可以通过 AI Hub 生成量化模型。 有关编译和优化模型的详细指南,请参阅 编译并优化 AI 模型。 以下说明使用来自 AI Hub 的 Inception V3 模型。
- 在设备上启用 Wi-Fi 和 SSH。 设备需要联网,以下载运行示例应用所需的工件。如果已经配置了 SSH 和 Wi-Fi,请跳过此步骤。 按照设置 SSH 连接的说明,在设备上启用 Wi-Fi 和 SSH。
-
确保已在目标设备上安装以下 QNN 工具作为构建的一部分。
- qnn-net-run
- qnn-throughput-net-run
- qnn-context-binary-generator
- qnn-profile-viewer
HTP 上的分析级别
下表列出了各分析级别、其描述及配置方式:
图:HTP 基本分析事件
使用 qnn-net-run 进行 Lint 分析
Lint 分析可提供主线程上每个操作的详细周期计数以及后台执行信息。以下步骤在 Inception-v3 AI Hub 模型上执行 lint 分析。请按照这些步骤操作,并将模型替换为您的自定义模型。
通过 SSH 连接到目标设备
在目标设备上从 AI Hub 下载已量化(w8a8)的 inception_v3 dlc 模型以进行分析
使用生成的输入文件对模型进行分析
inception_v3_quantized.dlc 模型定制的 Python 脚本生成这些输入文件。将以下脚本另存为 /etc/models 目录中的 generate_random_input.py
/tmp/RandomInputsForInceptionV3Profiling/
目录中,并生成一个 input_list_profiling.txt 文件,其中包含每个生成样本的路径。在目标设备上运行脚本
创建 backend_extension_config_file.json 和 htp_config.json 文件
/etc/models 目录中创建 backend_extension_config_file.json 和 htp_config.json 文件,
以便使用 HTP 运行时对模型进行分析。-
backend_extension_config_file.json -
htp_config.json- 对于 Qualcomm Dragonwing™ RB3 Gen 2,使用
"dsp_arch": "v68" - 对于 Dragonwing IQ-8275,使用
"dsp_arch": "v75" - 对于 Dragonwing IQ-9075,使用
"dsp_arch": "v73"
- 对于 Qualcomm Dragonwing™ RB3 Gen 2,使用
进入 /etc/models 目录并在目标设备上运行 qnn-net-run 命令
通过指定 --profiling_level=backend 启用 Lint 分析
/etc/models/output_htp 目录中创建 execution_metadata.yaml 和 qnn-profiling-data_0.log 文件。要查看 qnn-profiling-data_0.log 文件中的日志,请使用 qnn-profile-viewer。
使用 qnn-profile-viewer 查看 lint 分析日志
通过将 qnn-profile-viewer 工具与以下插件配合使用,查看在后端分析级别生成的分析输出:- libQnnHtpProfilingReader.so
- libQnnChrometraceProfilingReader.so
libQnnHtpProfilingReader.so 插件运行 qnn-profile-viewer。此插件提供每次单独运行的原始输出。
图:使用 libQnnHtpProfilingReader.so 进行 Lint 分析的示例输出在 linting 分析报告中,每个操作都有:- Cycle count(周期计数):在主线程上执行所花费的时间。
- Wait entry(等待项):在开始执行之前所花费的等待周期数。
- Overlap(重叠):在主线程执行当前操作时,至少一个后台操作所花费的周期数。
- Overlap (wait)(等待期间的重叠):在主线程等待期间,至少一个后台操作所花费的周期数。
使用 QNN HTP Optrace 进行高级分析
使用 QNN optrace 分析来了解 QNN HTP 硬件模块的详细内部操作。此功能可帮助您:- 识别可能未很好并行化的问题操作。
- 查看操作在整个执行过程中的调度方式。
- 观察各操作符之间的交互。
- 评估 HVX 并行性对每个操作的工作效率。
使用 qnn-throughput-net-run 进行分析
使用 qnn-throughput-net-run 在一个或多个 QNN 后端上进行多线程执行。此分析支持多线程执行,并允许您在指定的持续时间或设定的迭代次数内重复运行模型。此分析适用于需要对多个模型进行并发或重复执行以进行性能基准测试的场景。
通过 SSH 连接到目标设备
在目标设备上创建工作目录
在目标设备上从 AI Hub 下载已量化(w8a8)的 inception_v3 dlc 模型
在目标设备上创建 backend_extension_config.json 和 htp_config.json 文件
/etc/models 目录中创建这些文件。在下一步中生成上下文二进制文件时需要用到这些文件。-
backend_extension_config.json
-
htp_config.json
- 对于 Qualcomm Dragonwing™ RB3 Gen 2,使用
"dsp_arch": "v68"。 - 对于 Dragonwing IQ-8275,使用
"dsp_arch": "v75"。 - 对于 Dragonwing IQ-9075,使用
"dsp_arch": "v73"。
在目标设备上,使用 qnn-context-binary-generator 工具生成上下文二进制文件(.bin 文件)
qnn-throughput-net-run 命令将摄取生成的上下文二进制文件。要使用 qnn-throughput-net-run 对模型进行分析,请创建 qtnr_config.json 和 htp_backend.json 文件
/etc/models/ 目录中创建这些文件。-
htp_backend.json: -
qtnr_config.json:
- 对于 Qualcomm Dragonwing™ RB3 Gen 2,使用
"dsp_arch":"v68" - 对于 Dragonwing IQ-8275,使用
"dsp_arch":"v75" - 对于 Dragonwing IQ-9075,使用
"dsp_arch":"v73"
要执行分析,请在目标设备上运行以下命令
/etc/models 目录中生成。
图:qnn-throughput-net-run 分析的示例输出

