Qualcomm® AI Engine Direct 使用手册(8)

这篇具有很好参考价值的文章主要介绍了Qualcomm® AI Engine Direct 使用手册(8)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


4.1.2 HTP - QNN 上下文二进制大小

QNN 上下文二进制大小

QNN 使用 QNN 上下文二进制来执行神经网络。图形准备后,“QNN 上下文” 二进制”包含信息和为了更快地推理模型而进行的优化。 “QNN 上下文二进制”具有 与 QNN 模型的尺寸相比,尺寸更大。尺寸增大的原因如下:

  • 操作数:HTP 尝试并行运行尽可能多的操作。为了能够融入 VTCM,将繁重的操作拆分为较小的操作。这通常会导致数量增加 上下文二进制中需要存在的操作,导致其大小增加。例如,如果 每个操作占用 40 个字节的 Context Binary 以及上述优化前后的操作数量 是 30 和 300,000,那么我们在 Context Binary 中分别需要 1.2 KB 和 12 MB。下图展示了一个大 需要将转换操作分解为更小的操作。
    int 16 a8w8 a16w16,Qualcomm,笔记,AI,人工智能,Qualcomm,ai

  • 排序和数据分页:随着操作数量的增加,Context Binary 还必须需要存储 有关操作顺序的信息以及有关数据分页的信息(需要进行哪些操作) 写入 DDR 并需要在执行期间带回 VTCM)。这些信息也有助于 到准备好的上下文二进制文件的大小。

  • 图中的常量数据:QNN 上下文二进制包含图的所有常量数据。恒定数据 其中包括卷积滤波器。这些过滤器可以填充到 QNN 上下文二进制文件中 表示内部 HTP 格式以提高性能效率,导致 QNN 上下文的大小额外增加 二进制。

Op写作指南
本节作为用户为可运行的图形开发自定义操作的指南 HTP 后端。它还包括一些示例,可以帮助用户熟悉 HTP 核心软件的不同方面。

  • QNN HTP Op 包 - 常见默认包操作使用示例
  • QNN HTP 优化实用函数使用示例
  • Op 封装的 HTP 核心接头
  • 实施行动
  • QNN HTP Op Package API 修订历史
  • 优化语法
  • QNN HTP Op 包 - Relu Op 示例
  • QNN HTP-FP16 Op 封装 - Relu Op 示例
  • 调度与分配
  • 为暂存缓冲区分配内存
  • 张量和内存布局
  • 编写 QNN HTP Op 包
  • 一般 OpPackage 中心迁移指南
  • Op 包迁移指南

网络设计建议

HTP 支持 A8、A16 和 FP16 激活。一般来说,精度以及功率和能量要求遵循: 订单 A8 < A16< FP16。因此,为了最大限度地降低功耗,应首先尝试 A8 模式并检查结果的准确性。 如果精度不够,请尝试 A16 模式,如果仍无法达到所需的精度,请转至 FP16 模式。

以下部分介绍了图形设计中的一些最佳实践,可实现 HTP 硬件的最佳使用 从性能和准确性的角度来看。

  • 性能和能源指南
  • 避免低深度激活
  • 避免低深度激活(更多示例)
  • 尽可能使用空间到深度变换
  • 降低 TCM 对性能和功能的要求
  • 激活函数的选择
  • 通道数
  • 量化 16 位激活 (A16) 与 FP16 和激活融合:性能和功耗差异
  • 避免首先将 PyTorch 模型转换为 onnx
  • 权重的 INT4 编码
  • 其他性能和能源指南
  • 准确性指南
  • 权重的对称量化
  • 建议在量化模型时始终使用权重的对称量化 以获得基于 HTP 的目标的最佳精度。建议激活数据不对称。

量化意识训练
建议尽可能使用量化感知训练以提高准确性 特别是在高分辨率图像转换模型的情况下。使用量化感知训练可以消除使用 16 位激活的需要,并且可以允许使用 8 位激活,这将提高性能和功耗。 使用量化感知训练时,请记住以下几点:

  1. 对原始浮点模型和具有 fakequant 节点的模型之间的原始框架中的输出进行比较有助于确定量化感知训练模型的质量

  2. 确保所有层/内核都有 fakequant 节点

UINT16 激活 & INT16 权重/滤波器
A16W16(int16 权重以及 uint16 激活)支持多种卷积类型的操作。这通常用于图像增强网络,但也可用于其他类型的用例。

此功能仅在选定的 SoC 上启用。 为了进一步提高精度,未来将添加每通道量化方法。

A16W16机型与A16W8、FP16机型对比预期如下:

  1. 通过训练后量化,A16W16 模型预计将比 A16W8 模型获得更好的精度。

  2. A16W16 模型预计将比 FP16 模型实现更好的功效,同时保持相似的精度结果。

A16W16 支持的卷积类型运算列表:

  1. 转换2d

  2. 深度Conv2d

  3. 转置Conv2D

  4. 完全连接

  5. 马特穆尔

  6. 批归一化

  7. 层规范

所有权重/滤波器都需要对称量化。对于Matmul,输入A必须是非对称量化的,输入B必须是对称量化的。详情请参阅HTP后端操作定义补充。

限制:由于 Hexagon 硬件限制,INT16 权重有一个特殊限制,即权重值的范围为 0x8000 到 0x7F7F,而不是完整的 16 位范围 0x8000 到 0x7FFF。使用 A16W16 时,请添加 到量化器选项。–restrict_quantization_steps “-0x8000 0x7F7F”

让步和先发制人
Yielding 和 Pre-Emption 是一种基于用户的合作实现 上下文切换。以下文档旨在帮助用户理解 不同的并发场景及其预期行为。

  • HTP产量

VTCM分享
从hexagon-v73开始,同一进程中的其他线程可以共享VTCM资源 使用 QNN HTP,使用以下页面中描述的过程:

  • VTCM分享

子系统重启 (SSR)
QNN HTP BE 特定功能,允许 CDSP 子系统自动重新启动无效连接 崩溃后。详细信息见下页:

  • QNN HTP SSR

Qmem 图(仅共享缓冲区图)
QNN HTP BE 特定功能,允许用户使用数据缓冲区进行共享访问 QNN HTP 后端处理域。使用共享缓冲区可以消除数据 在主机 CPU 和 HTP 加速器上的客户端代码之间进行复制。

  • QNN HTP Qmem 图

HTP 会话和神器使用指南

QNN 每个进程仅支持一组库。这些库必须具有相同的 SDK 版本并且 有匹配的 Hexagon 架构版本。出于说明目的,V73 Hexagon 架构 图表中将使用库;同样的准则也适用于非 V73 工件。这 下面显示了 QNN 支持的库布局。
int 16 a8w8 a16w16,Qualcomm,笔记,AI,人工智能,Qualcomm,ai
为了防止不正确的 QNN 库布局,Qualcomm 建议采取以下措施:

  • 对于单个进程(后端、存根、skel 等),应提供每个库的一份副本。

  • 后端库 (libQnnHtp.so) 应使用 dlopen 显式加载,而不是作为依赖项动态链接。

  • 库应该彼此位于同一目录中(只要正确设置 ADSP_LIBRARY_PATH 来查找库,skel 就是一个例外)。

  • 不要重命名库以加载多个副本,因为这是不受支持的。

QNN 不支持在单个访问中访问 QNN 后端库 (libQnnHtp.so) 的多个副本 过程。下面描述了两种不同的布局,其中设备上存在多个后端库。

int 16 a8w8 a16w16,Qualcomm,笔记,AI,人工智能,Qualcomm,ai

对于要加载的两个后端库,可以从某个库显式加载该库的第二个副本 与第一个库所在的目录不同的目录,或者在期间创建了重复的文件系统 进程执行(对于 android 目标,adb remount)。无论哪种情况,上面显示的两个工件布局 不支持。如果在运行时检测到这些布局,则会出现 QNN_COMMON_ERROR_LOADING_BINARIES 从以下 API 返回:

  • QnnBackend_registerOpPackage

  • QnnBackend_validateOpConfig

  • QnnContext_create

  • QnnDevice_create

  • QnnGraph_create

批量推理和多线程推理的好处
多线程隐藏了 CPU/HTP 通信时间 (RPC) 的成本。 在单线程推理中,HTP 硬件的利用效率不高,如下例所示。
int 16 a8w8 a16w16,Qualcomm,笔记,AI,人工智能,Qualcomm,ai
将此与多线程推理进行比较。这里,第一次推理的 RPC 使用的时间被掩盖了 在第二个线程中进行推理。因此,HTP 硬件花费的空闲时间更少。同样,使用多重推论 每批次提高了权重内存的重用,从而避免重新加载权重。这里需要注意的是 激活大小是影响使用批次效益的一个因素。

  • 对于低分辨率模型,权重和激活适合 VTCM。在这种情况下,使用批量激活重用 所有激活的权重,从而提高每批的效率。

  • 对于大分辨率模型,由于激活占用更多 VTCM 空间,因此权重会被重用以减少 激活次数。这降低了每批次权重的重用效率。

例子:

对于 SNPE 2.9,SM8550 (Kailua.LA.1.1-00190 GKI.HY11-1) 在使用 snpe-parallel-run 时显示出 resnet50 大约 1.8 倍的优势。

  • 基线:使用 1 个批次和 1 个线程可实现约 1500 inf/s

  • 批处理和多线程:使用 5 个和 2 个线程的批处理可实现约 2800 inf/s文章来源地址https://www.toymoban.com/news/detail-801572.html

到了这里,关于Qualcomm® AI Engine Direct 使用手册(8)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C#】Int32.Parse()、Int16.Parse()

    Int32.Parse() 和 Int16.Parse() 都是 C# 中用于将字符串转换为整数的方法,分别用于处理 32 位整数和 16 位整数。以下是它们的解释: Int32.Parse() : Int32 是 C# 中的数据类型,表示 32 位整数(有符号整数)。 Int32.Parse() 方法用于将字符串转换为 Int32 类型的整数。 例如: Int16.Parse()

    2024年01月19日
    浏览(47)
  • Golang中int, int8, int16, int32, int64和uint区别

    在Go语言(Golang)中,整数类型用来表示整数,主要包括int系列和uint系列。这两大系列根据能否表示负数,分为有符号整数和无符号整数。 int系列( 有符号整数 ): int8: 占用1个字节(8位),能够表示的有符号整数范围从 -128到127。 int16: 占用2个字节(16位),能够表示的有

    2024年01月25日
    浏览(58)
  • 芯片算力(TOPS, GOPS, MOPS)与精度(int8,int16)

    芯片算力是描述处理器进行运算,对数据进行操作的能力的指标。字面上理解,芯片算力越大,每秒能够进行的运算次数就越多,执行计算任务就越快。 算力 的基本单位有: TOPS:Tera Operations Per Second, 处理器每秒可以进行一万亿次操作(10*12) GOPS:处理器每秒可以进行一

    2024年02月11日
    浏览(42)
  • Unity 开发人员转CGE(castle Game engine)城堡游戏引擎指导手册

    一、简介 2. Unity相当于什么GameObject? 3. 如何设计一个由多种资产、生物等组成的关卡? 4. 在哪里放置特定角色的代码(例如生物、物品)?Unity 中“向 GameObject 添加 MonoBehaviour”相当于什么? 5.Unity子目录相当于什么Assets? 6. 支持哪些模型格式? 7. 支持FBX模型格式吗? 8.

    2024年02月07日
    浏览(76)
  • 详解C语言中的int8_t、uint8_t、int16_t、uint16_t、int32_t、uint32_t、int64_t、uint64_t

    2023年8月8日,周二上午 目录 为什么会产生int8_t、uint8_t等这类数据类型 int8_t、uint8_t等这类数据类型有什么用 头文件 int8_t、uint8_t等这类数据类型是怎么实现的 根本原因在于,C 语言标准只是规定了各个基本类型的最小字节长度,但并没有指定它们的确切字节长度: char 类型

    2024年02月13日
    浏览(42)
  • 模型量化!ONNX转TensorRT(FP32, FP16, INT8)

    本文为Python实现,C++实现链接模型量化 若还没有配置环境(CUDA,CUDNN,TensorRT),请移至C++实现中查看环境配置方法    支持三种不同精度的量化 模型单精度量化 (FP32) 模型半精度量化 (FP16) 模型Int8量化 (INT8) 经测试yolov5,yolov6,yolov7,yolov8转化成功 yolov5: https://github.com/u

    2024年02月16日
    浏览(39)
  • @alilclowcode-engine-ext@1.0.5 不支持安装react@^16.3.0

    @alilclowcode-engine-ext@1.0.5 不支持安装react@^16.3.0 https://github.com/alibaba/lowcode-demo https://lowcode-engine.cn/site/docs/demoUsage/intro https://github.com/alibaba/lowcode-engine https://docs.appsmith.com/getting-started/setup/installation-guides?utm_source=githubutm_medium=organicutm_campaign=readme 打包放入web网站中 https://qingflow.c

    2024年02月10日
    浏览(28)
  • 开源:小狐狸GPT付费AI-v2.0.0 H5和小程序端增加使用手册

    小狐狸GPT付费AI体验系统、系统版本更新至1.2.0, 源码为小程序、H5、WEB版本 ,购买含更新, 独立版; 开源、开源、开源、可二开!!200包含H5、web的vue全开源, 最新版更新了:H5和小程序端增加使用手册 测试环境:系统环境:CentOS Linux 7.6.1810 (Core)、运行环境:宝塔 Linux

    2024年02月12日
    浏览(51)
  • 【FPGA】SPI-FLASH-M25P16手册解读

    M25P16概述: M25P16是一款带有先进写保护机制和高速SPI总线访问的串行Flash存储器。M25P16特点如下: 存储结构:16M Bit(2M Byte)的存储空间,一共32个扇区(sector),每个扇区256页,每页256字节,每个字节的的存储地址由扇区地址(8bit)+页地址(8bit)+字节地址(8bit)构成。 SP

    2024年02月04日
    浏览(38)
  • EPCS1、EPCS4、EPCS16数据手册解读

    本文是关于Altera公司生产的串行配置设备(EPCS1, EPCS4, EPCS16, 和 EPCS64)的数据手册。这些设备用于通过活动的串行(AS)配置方案来串行配置Stratix® II FPGA和Cyclone™系列FPGA。以下是对文档内容的翻译和详细解读。 特性 提供1-, 4-, 16-, 和64-Mbit闪存设备,用于串行配置Altera的Str

    2024年04月23日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包