Qualcomm® AI Engine Direct 使用手册(9)
4.1.3 HTA
本部分提供特定于 QNN HTA 后端的信息。
4.1.3.1 API 专业化
本节包含与 HTA 后端 API 专业化相关的信息。所有 QNN HTA 后端专业化都可以在<QNN_SDK_ROOT>/include/QNN/HTA/目录下找到。
QNN HTA 后端 API 的当前版本是:
QNN_HTA_API_VERSION_MAJOR 2
QNN_HTA_API_VERSION_MINOR 0
QNN_HTA_API_VERSION_PATCH 0
4.1.3.2 QNN HTA 支持的操作
QNN HTA 支持运行量化 8 位和量化 16 位网络。QNN HTA Quant 运行时支持的操作列表可以在支持的操作中的后端支持 HTA 列下查看
4.1.3.3 QNN HTA 16 位整数支持限制
要启用 16 位整数推理,请将激活的量化位宽指定为 16,同时将权重保持为 8。输入/输出数据格式应定义为 16 位。
由 QNN 转换器工具使用 来生成具有 16 位激活和 8 位权重的模型。–act_bw 16 --weight_bw 8
QNN HTA 性能基础架构 API
客户端可以在加载 QNN HTA 库后调用 QnnBackend_getPerfInfrastruct ,然后调用文件 QnnHtaPerfInfrastruct.h 中可用的方法 。这些 API 允许客户端控制 HTA 加速器的系统设置,从而对加速器进行细粒度控制。一些用例是:
设置加速器的电源模式。
4.1.4 LPAI
本节提供特定于 QNN CPU 后端的信息。
API 专业化
本节包含与 CPU 后端 API 专业化相关的信息。所有 QNN CPU 后端专业化都可以在<QNN_SDK_ROOT>/include/CPU/目录下找到。
QNN CPU 后端 API 的当前版本是:
QNN_CPU_API_VERSION_MAJOR 1
QNN_CPU_API_VERSION_MINOR 1
QNN_CPU_API_VERSION_PATCH 0
4.1.5 CPU
This section provides information specific to QNN CPU backend.
4.1.5.1 API 专业化
本节包含与 CPU 后端 API 专业化相关的信息。所有 QNN CPU 后端专业化都可以在<QNN_SDK_ROOT>/include/CPU/目录下找到。
QNN CPU 后端 API 的当前版本是:
QNN_CPU_API_VERSION_MAJOR 1
QNN_CPU_API_VERSION_MINOR 1
QNN_CPU_API_VERSION_PATCH 0
4.1.5.2 支持的操作
QNN CPU 支持在当前启用的 Qualcomm 芯片组和平台目标上运行量化 8 位和浮点 32 位网络。QNN CPU 在量化和浮点精度方面支持的操作列表可以在支持的操作中的后端支持 CPU 列中查看。
请注意,尽管 FP32 和 INT8 在支持的操作中的单独列下列出 ,但它们是由同一 CPU 后端库启用的。
4.1.5.3 操作包
CPU Op Package 提供与在 CPU 后端注册的 OpPackage 库进行交互的接口。有关该接口的更多详细信息可以在此处找到File QnnCpuOpPackage.h。
4.1.5.4 Op 包写作指南
有关 op 包编写的详细信息将在未来版本中提供。同时,请参考op包示例,可以在 中找到${QNN_SDK_ROOT}/examples/OpPackage/CPU/。
4.1.5.5 调试回调
调试回调是一项允许用户在 CPU 后端执行时接收中间输出的功能。QNN CPU 为用户提供了一个配置选项,可以通过客户端使用来启用它,如下所示:
1 QnnCpuGraph_CustomConfig_t customConfig;
2 customConfig.option = QNN_CPU_GRAPH_CONFIG_OPTION_OP_DEBUG_CALLBACK;
3 customConfig.cpuGraphOpDebug.cpuGraphOpDebugCallback = <QnnCpuGraph_OpDebugCallback_t funtion>;
4 customConfig.cpuGraphOpDebug.callBackParam = <param to be returned with callback funtion>;
5
6 QnnGraph_Config_t graphConfig;
7 graphConfig.option = QNN_GRAPH_CONFIG_OPTION_CUSTOM;
8 graphConfig.customConfig = &customConfig;
9
10 const QnnGraph_Config_t* pGraphConfig[] = {&graphConfig, NULL};
4.1.6 图形处理器 (GPU)
4.1.6.1 API 专业化
本节包含与 GPU 后端 API 专业化相关的信息。所有 QNN GPU 后端专业化都可以在该${QNN_SDK_ROOT}/include/QNN/GPU/目录下找到。
QNN GPU 后端 API 的当前版本是:
QNN_GPU_API_VERSION_MAJOR 3
QNN_GPU_API_VERSION_MINOR 3
QNN_GPU_API_VERSION_PATCH 0
4.1.6.1 操作限制
QNN GPU 操作限制记录在GPU 后端操作定义补充中。
4.1.6.2 内核持久化
QNN GPU 后端支持 QNN 上下文中保存的两种内核持久性策略:内存中和磁盘上。我们将内存中的持久性称为内核注册表,将磁盘上的持久性称为内核存储库。这是两种重用内核来减少模型初始化时间的机制。下面将通过介绍一个简单的用例来概述如何使用这些功能。
用户通过使用 提供有效kernelRepoDir的自定义配置设置调用QnnContext_create来创建新的 QNN GPU 上下文。我们假设这条路径是。假设没有与此路径对应的现有磁盘存储库。因此,内核不会被反序列化,并且内存注册表将不包含内核。源自内置 qti.aisw op 包的内核将在 QnnContext_create期间反序列化。当通过QnnBackend_registerOpPackage注册该 op 包时,源自另一个 op 包的内核将被反序列化 。${QNN_GPU_KERNEL_REPO}
用户创建模型 A 并最终确定它。假设模型 A 由内核 1、2 和 3 组成。这些内核是从头开始创建的,并添加到内存中的内核注册表中。用户创建模型 B 并最终确定它。假设模型 B 由内核 3 和 4 组成。内核 3 将从内存中的内核注册表中恢复,内核 4 将从头开始创建并添加到注册表中。
用户现在调用QnnContext_free。由于提供了有效的内核存储库路径,QNN GPU 上下文将序列化内存中内核,并且对于每个 op 包,将它们写入其中 Q N N G P U K E R N E L R E P O / g p u k e r n e l c a c h e . {QNN_GPU_KERNEL_REPO}/gpukernelcache. QNNGPUKERNELREPO/gpukernelcache.{OP_PKG_NAME}OP_PKG_NAME 是 op 包 packageName。
如果用户创建另一个指定相同内核存储库路径的 QNN GPU 上下文,这些内核将按照上面所述进行反序列化并添加到内存中内核注册表中。如果用户现在创建模型 A 或 B,所有内核都将准备好通过内存注册表创建,从而大大减少初始化时间。
请注意,op 包 向 Context提供了kernelRepoHash 。如果 QNN GPU 上下文检测到磁盘上的内核存储库是由同名的 op 包生成的,但 kernelRepoHash 不同,则磁盘上的存储库将自动失效。这可以确保不会发生内核版本不匹配的情况。
另请注意,这些 QNN GPU 内核持久性功能与 QNN 上下文缓存功能是分开的(请参阅 QnnContext_getBinary)。QNN GPU 上下文缓存将存储重新创建上下文所需的所有内容,包括内核。
4.1.6.3 精确模式
QNN GPU 后端通过 QNN 图自定义配置功能提供四种精度模式(请参阅QnnGpuGraph_CustomConfig_t和 QnnGpu_Precision_t)。这些模式是:
-
QNN_GPU_PRECISION_FP32(FP32 模式)
-
FP32 模式会将 NATIVE 张量数据类型转换为 FP32,并选择使用 FP32 累加器的内核。
-
FP32 模式可提供最佳精度,但会牺牲性能。
-
-
QNN_GPU_PRECISION_FP16(FP16 模式)
-
FP16 模式会将 NATIVE 张量数据类型转换为 FP16,并尽可能选择使用 FP16 累加器的内核。
-
FP16 模式可提供最佳性能,但会牺牲准确性。
-
-
QNN_GPU_PRECISION_HYBRID
-
混合模式会将 NATIVE 张量数据类型转换为 FP16,并选择使用 FP32 累加器的内核。
-
混合模式在性能和准确性之间提供了良好的权衡。
-
-
QNN_GPU_PRECISION_USER_PROVIDED
-
当未提供自定义配置时,这是默认的精度模式。
-
QNN GPU 后端不会优化 NATIVE 张量数据类型。
-
4.1.6.4 性能提示
QNN GPU 通过 QNN 上下文自定义配置功能提供三种性能提示(请参阅QnnGpuContext_CustomConfig_t和 - QnnGpuContext_PerfHint_t)。这些提示是:
-
QNN_GPU_CONTEXT_PERF_HINT_HIGH
-
HIGH perf 提示将最大化 GPU 时钟频率。
-
HIGH 性能提示以功耗为代价提供最佳推理延迟。
-
这是默认设置。
-
-
QNN_GPU_CONTEXT_PERF_HINT_NORMAL
- NORMAL 性能提示提供取决于电源管理的平衡性能。
-
QNN_GPU_CONTEXT_PERF_HINT_LOW
-
LOW perf 提示将最小化 GPU 时钟频率。
-
低性能提示以推理延迟为代价提供最低功耗。
-
请注意,性能提示包含在上下文缓存中。但是,对 QnnContext_setConfig 的调用可以覆盖缓存的性能提示设置。
4.1.6.5 上下文配置
支持QnnContext 自定义配置(QnnGpuContext_CustomConfig_t)和上下文优先级(请参阅Qnn_Priority_t 和QnnContext_ConfigOption_t )。