骁龙神经处理引擎SDK参考指南(11)

281 篇文章 30 订阅

骁龙神经处理引擎SDK参考指南(11)


4.5.8 离线图缓存

HTP 上 DSP 运行时的离线图形缓存

具有Hexagon 张量处理器 (HTP) 的目标上的 SNPE DSP 运行时支持离线图形缓存功能,这有助于在 Linux x86-64 平台上准备后端图形。这有助于减少初始化时间并在执行模型时直接加载设备上的缓存。

SNPE 用户的工作流程更改:

  • 使用 snpe-caffe/caffe2/tensorflow-to-dlc 进行模型转换
  • 使用 snpe-dlc-quant 进行模型量化
  • 使用 snpe-dlc-graph-prepare 对离线图形缓存准备进行建模
  • 使用 snpe-net-run 或自定义应用程序在目标上执行模型
    请添加图片描述
    上图中的 DLC Quantize 包含 2 个步骤,即首先量化模型,然后生成离线缓存。snpe-dlc-graph-prepare工具用于在 DLC 被snpe-dlc-quant工具量化后为 SNPE HTP 运行时生成 DLC 缓存 blob。snpe-dlc-graph-prepare工具也可以与浮动模型一起使用,为 HTP FP16 运行时生成缓存。

例如,以下命令将 Inception v3 DLC 文件转换为量化的 Inception v3 DLC 文件,并生成 HTP 图形缓存并存储在 DLC 中。

snpe-dlc-quant --input_dlc inception_v3.dlc --input_list image_file_list.txt --output_dlc inception_v3_quantized.dlc 

snpe-dlc-graph-prepare --input_dlc inception_v3_quantized.dlc --output_dlc inception_v3_quantized_cache.dlc --htp_socs sm855 0

运行snpe-dlc-graph-prepare触发在提供的模型上生成 HTP 图,并将生成的缓存添加到 HTP 记录到 DLC 中。如果 HTP 编译器无法处理/编译网络的任何部分,snpe-dlc-graph-prepare 会发出一条错误消息。

snpe-dlc-graph-prepare可以帮助使用相同/不同版本的 SNPE 快速为图形重新准备离线缓存,而无需重新执行量化步骤,如果输入数据集很大,量化步骤可能会花费大量时间。

同样,作为量化过程的一部分,snpe-dlc-quantize工具使用 –enable_htp 选项为 SNPE HTP 运行时生成 DLC 缓存 blob。

例如,以下命令将 Inception v3 DLC 文件转换为量化的 Inception v3 DLC 文件,并生成 HTP 图形缓存并存储在 DLC 中。

snpe-dlc-quantize --input_dlc inception_v3.dlc --input_list image_file_list.txt --output_dlc inception_v3_quantized.dlc 
                  --enable_htp --htp_socs sm8550

笔记:

  • 离线准备的图缓存和运行时的 SNPE 对象必须指定相同的图输出。如果在运行时未请求与准备好的图形中指定的相同的图形输出,则准备好的图形被视为无效并将被忽略。然后,图形准备将在运行时完成(称为在线准备),从而拒绝 DLC 中的缓存 blob,导致在这种情况下明显增加初始化时间。
  • 为了启用离线准备的 CPU 回退,位于 CPU 子网之前的 DSP 子网需要将输入到后续子网的所有输出张量标记为图形输出。
  • 使用snpe-dlc-quantize 的离线图形准备将在未来被弃用。目前,snpe-dlc-quantize用于支持遗留工作流程。建议迁移到snpe-dlc-graph-prepare用于离线 htp graph cache blob 准备

4.5.9 添加 HTA 部分

在 Hexagon Tensor Accelerator (HTA) 上运行模型需要对模型进行量化,并为在 HTA 上运行的部分生成二进制文件。两者都是使用snpe-dlc-quantize工具完成的,该工具经过扩展以包含内部的 HTA 编译器。

请添加图片描述
例如,以下命令将 Inception v3 DLC 文件转换为量化的 Inception v3 DLC 文件,并生成 HTA 部分以在 HTA 上运行整个模型。

snpe-dlc-quantize --input_dlc inception_v3.dlc --input_list image_file_list.txt
                  --output_dlc inception_v3_quantized.dlc --enable_hta

除了最后一个 (enable_hta) 之外的所有参数都与常规量化相同,并在量化模型中进行了解释。添加此参数会触发在提供的模型上生成 HTA 部分,并将编译的部分添加到 AIP 记录到 DLC 中。如果 HTA 编译器无法处理/编译网络的任何部分,snpe-dlc-quantize会发出一条错误消息。但是,DLC 仍将创建 - 只是没有 HTA 部分。

模型划分
默认情况下,HTA 编译器会自动对网络进行分区,以最大化在 HTA 上运行的部分。
在这种情况下,加载模型时,AIP 运行时使用 Hexagon NN 在 HVX 上运行非 HTA 部分。
如果启用了 CPU 回退,则 AIP 运行时未处理的任何部分都可能回退到 CPU 运行时执行。

在某些情况下,可能需要手动对网络进行分区,并选择可能与编译器自动生成的分区点不同的分区点。当事先知道网络的某个部分不支持在 HTA 上运行时,这可能是一个可预知的选项,请求只为 HTA 编译剩余部分,或者为了性能优势。

在所有情况下,SNPE snpe-dlc-quantize 工具都会创建记录,这些记录存储有关 HTA 子网的元数据以及 HTA 编译器为指定部分生成的编译二进制文件。
此外,它还为 HNN 子网检测并创建记录以覆盖模型的其余部分,并存储关于它们的元数据,这些元数据指定与分区确定的其他 HTA 子网的缓冲区连接。
所有这些记录都以加载模型时在运行时解析的格式存储在 DL 容器中。

要在对模型进行分区时手动指定使用的 HTA 部分,除了“enable_hta”之外,还应将附加参数“hta_partitions”传递给snpe-dlc-quantize 。

分区边界指定为逗号分隔(开始-结束)对,它们引用必须属于分区的层的 ID。
例如,以下命令将 Inception v3 DLC 文件转换为量化的 Inception v3 DLC 文件,并为层 0-11 生成单个 HTA 部分。

snpe-dlc-quantize --input_dlc inception_v3.dlc --input_list image_file_list.txt
                  --output_dlc inception_v3_quantized.dlc --enable_hta --hta_partitions 0-11

以下命令将分区扩展到多个 HTA 分区,在本例中为 0-11 和 177-215。

snpe-dlc-quantize --input_dlc inception_v3.dlc --input_list image_file_list.txt
                  --output_dlc inception_v3_quantized.dlc --enable_hta --hta_partitions 0-11,177-215

笔记:

  • HTA 编译过程会删除之前使用 --enable_hta 运行的 snpe-dlc-quantize 中可能已经存在于 DLC 中的任何旧 AIP 记录。
    建议用户从原始 DLC 开始进行 HTA 编译,以免无意中丢失之前生成的 AIP 记录。
  • 由于 HVX 和 HNN 子网之间发生的重复重新量化和格式转换,在 AIP 子网内创建大量分区可能会导致运行时性能不佳和精度下降。
  • 在这种情况下优化 AIP 性能的一种方法是重新排序与源网络中每个层关联的唯一 ID(在转换为 DLC 之前),以便离线编译在网络中产生更有意义的分区和更少的碎片。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Standalone SDK编程指南是一份关于使用Standalone SDK的开发指南,Standalone SDK是一款用于开发轻量级应用程序的软件开发工具包。该指南主要包括了Standalone SDK的概述、安装、配置以及使用方法。 首先,该指南介绍了Standalone SDK的概述,它是一个轻量级的开发工具包,适用于开发不需要与其他应用程序或服务进行交互的独立应用。该工具包包含了开发所需的所有组件和库,方便快速开发应用程序。 接着,该指南介绍了如何安装和配置Standalone SDK,它可以在Windows、Linux和Mac等多个操作系统上运行。安装和配置过程涵盖了安装Java和Android Studio,配置环境变量和路径等步骤。 最后,该指南详细介绍了Standalone SDK的使用方法,包括了应用程序开发的基本步骤、组件和库的使用、应用程序的编译和打包等。同时,该指南还提供了一些示例代码、技巧和实用工具,帮助开发者更好地应用Standalone SDK进行开发。 总之,Standalone SDK编程指南是一份非常实用的开发指南,对于想要使用Standalone SDK进行轻量级应用程序开发的开发者来说,是一本不可缺少的参考书。 ### 回答2: Standalone SDK编程指南是指用于创建独立应用程序的软件开发工具包。该指南提供了使用Standalone SDK的步骤和教程,用于开发高质量、高效的应用程序。Standalone SDK提供了许多功能和工具,可以帮助开发人员创建各种类型的应用程序,并提供了许多开发人员需要的资源和文件。 Standalone SDK可以支持多种编程语言和开发环境,如Java、C++等。它还支持多种操作系统,包括Windows、Linux、Mac等。Standalone SDK提供了许多不同的API,包括图形界面API、多媒体API、网络API等,这些API可以帮助开发人员将应用程序的功能整合到一个整体中。 使用Standalone SDK编程指南,开发人员可以了解如何创建基于Standalone SDK的应用程序。该指南提供了以下内容: 1.环境设置:安装和配置开发环境以开始编程。 2.使用Standalone SDK:学习如何使用Standalone SDK来创建应用程序,包括如何使用API和工具来实现应用程序的功能。 3.开发过程:介绍开发过程的主要步骤,包括设计、开发、测试和部署。 4.调试:学习如何使用调试工具以及如何调试应用程序中的错误。 5.发布:介绍发布应用程序的不同方式,包括发布到应用商店或直接安装到设备上。 通过Standalone SDK编程指南,开发人员可以掌握如何使用Standalone SDK来创建高质量、高效的应用程序。该指南提供了许多实用的技巧和建议,可帮助开发人员解决常见的问题和提高开发速度。 ### 回答3: Standalone SDK编程指南是一本介绍如何使用Standalone SDK进行软件开发的指南。Standalone SDK是华为公司推出的一种软件开发工具,可以帮助开发人员快速开发出高质量的软件应用程序。 这本指南涵盖了Standalone SDK的重要概念、基本功能和开发流程。其中包括如何配置开发环境、如何创建新项目、如何编写代码和如何调试程序,也介绍了一些常用的API和工具。 在本指南中,开发者可以学习到如何使用Standalone SDK开发具有不同功能的应用程序,如群组聊天应用、移动支付应用和位置服务应用等。同时,还介绍了如何在开发过程中处理不同类型的错误和异常情况。 除了基本内容之外,该指南还提供了一些实用的建议和技巧,帮助开发人员更快、更高效地开发应用程序。例如,如何优化代码性能、如何增强安全性和如何使用版本控制等。 总之,Standalone SDK编程指南是一本非常实用的指南,适用于那些想要使用Standalone SDK进行软件开发的开发人员。无论您是初学者还是有经验的程序员,都可以从中获得非常有价值的知识。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值