高效模型量化工具包-AIMET(二)

高效模型量化工具包-AIMET(二)

章节2

量化基础知识

  在本章中,我们介绍神经网络量化的基本原理以及量化网络所依赖的定点加速器。我们首先从硬件动机开始,然后介绍标准的量化方案及其属性。随后,我们讨论了现代神经网络中常见的层及其对定点加速器的实际考虑因素。

2.1 硬件背景

  在深入技术细节之前,我们首先探讨量化的硬件背景,以及它如何实现在设备上的高效推理。图2.1提供了神经网络(NN)加速器中计算矩阵-向量乘法 y = Wx + b 的原理图概览。这是神经网络中更大的矩阵-矩阵乘法和卷积的构建模块。这样的硬件块旨在通过尽可能并行地执行尽可能多的计算来提高神经网络推理的效率。该NN加速器的两个基本组件是处理单元Cn,m和累加器An。我们示例中的图2.1具有16个处理单元排列成方形网格和4个累加器。计算开始时,将累加器加载到偏置值bn。然后,将权重值Wn,m和输入值xm加载到数组中,并在相应的处理单元中计算它们的乘积 Cn,m = Wn,m xm 在一个周期内。它们的结果然后添加到累加器中:
公式2.1

  上述操作也被称为乘加运算(MAC)。对于更大的矩阵-向量乘法,这一步骤将重复多次。完成所有周期后,累加器中的值将被移回内存,以便在下一个神经网络层中使用。神经网络通常使用FP32权重和激活进行训练。如果我们要使用FP32进行推理,处理单元和累加器将需要支持浮点逻辑,并且我们需要将32位数据从内存传输到处理单元。MAC运算和数据传输消耗了神经网络推理过程中的大部分能量。因此,通过使用较低位的定点或量化表示,可以实现显著的性能提升。低位定点表示,如INT8,不仅可以减少数据传输量,还可以减小MAC运算的大小和能耗。这是因为数字算术的成本通常与使用的位数呈线性或二次方比例,并且定点加法比浮点加法更高效。与FP32相比,8位推理提供了高达16倍的功耗性能,并为边缘推理提供了显著的能源效率。
要从浮点运算转换为高效的定点运算,我们需要一种将浮点向量转换为整数的方案。浮点向量x可以近似表示为标量乘以整数向量的乘积:

公式2.2

图2.1 神经网络加速器硬件中矩阵相乘逻辑的示意概览
  sx是一个浮点数缩放因子,xint是一个整数向量,例如,INT8。等式左边表示的是向量的量化版本。通过量化权重和激活,我们可以写出累加方程的量化版本:
公式2.3
  我们使用了单独的权重比例因子sw 和激活比例因子sx。这提供了灵活性并减少了量化误差。由于每个比例因子应用于整个张量,这种方案允许我们将比例因子从方程(2.3)的求和中分离出来,并以定点格式执行MAC运算。我们有意忽略偏置的量化,因为偏置通常以更高的位宽(32位)存储,并且其比例因子取决于权重和激活的比例因子。
  图2.2显示了当我们引入量化时神经网络加速器的变化。在我们的示例中,我们使用INT8算术,但为了讨论的完整性,这可以是任何量化格式。对于累加器,通常需要保持较高的位宽,通常为32位。否则,在计算过程中累积更多乘积时会产生溢出损失的风险。
  存储在32位累加器中的激活在可以由下一层使用之前需要写入存储器。为了减少数据传输和下一层操作的复杂性,这些激活被重新量化为INT8。这需要一个重新量化步骤,如图2.2所示。

2.2 概念

  均匀仿射量化 均匀量化是最常用的量化方案,因为它允许有效地实现定点算术。均匀仿射量化,也称为非对称量化,由三个量化参数定义:比例因子 (s),零点 (z) 和位宽 (b)。这些量化参数有时也称为量化编码。一组完整的量化参数定义了一个量化器。比例因子和零点用于将浮点值映射到整数网格,其大小取决于位宽。比例因子通常表示为浮点数,并指定量化步长。零点是一个整数,确保实际零被量化而不产生误差。这很重要,以确保常见操作,如零填充或ReLU,不会引入量化误差。
图2.2 神经网络加速器中用于量化推理的矩阵乘法逻辑的示意图
  一旦定义了三个量化参数,我们就可以进行量化操作。从实值向量 (x) 开始,我们首先将其映射到无符号整数网格 {0, . . . , 2(^b) − 1}:
公式2.4
  ⌊⌉是最接近的舍入运算符,而clamp运算定义如下:
公式2.5
  为了近似实值输入 (x),我们执行了一个反量化步骤:
公式2.6
  将上述两个步骤结合起来,我们可以给出量化函数q(.) 的一般定义:
在这里插入图片描述
  通过反量化步骤,我们还可以定义量化网格的上下限(qmin,qmax),其中qmin = −sz and qmax = s(2^b − 1 − z)。任何超出此范围的 (x) 值将被截断到其限制范围内,产生截断误差。如果我们想要减少截断误差,我们可以通过增加比例因子来扩展量化范围。然而,增加比例因子会导致舍入误差增加,因为舍入误差位于 [ − 1 2 s , 1 2 s ] [-\frac{1}{2}s, \frac{1}{2}s] [21s,21s]的范围内。在第4.4节中,我们将更详细地探讨如何选择量化参数以在截断误差和舍入误差之间取得正确的折衷。
  对称均匀量化:对称量化是一种简化的非对称情况。对称量化将零点限制为0。这减少了在累积运算中处理零点偏移的计算开销(见方程2.3)。但是,缺少偏移限制了整数和浮点域之间的映射。总之,选择有符号或无符号整数网格很重要:
公式2.8
  无符号对称量化非常适用于单侧分布,例如ReLU激活(参见图2.3)。另一方面,有符号对称量化可用于大致对称于零点的分布。
图2.3
(图2.3 这是一个比特宽度为8时不同均匀量化网格的视觉解释。其中,(s) 是缩放因子,(z) 是零点。浮点网格用黑色表示,整数量化网格用蓝色表示)

  量化粒度 到目前为止,我们已经为张量定义了单个量化参数集,或者说是每个张量一个量化器,一个用于权重,一个用于激活,如方程(2.3)所示。这称为每张量量化。我们还可以为张量的各个段定义单独的量化器(例如,权重张量的输出通道),从而增加量化粒度。在神经网络量化中,每张量量化是由于其更简单的硬件实现而成为最常见的粒度选择:方程(2.3)中的所有累加器都使用相同的比例因子 swsx。然而,我们可以使用更细的粒度来进一步提高性能。例如,对于权重张量,我们可以为每个输出通道指定不同的量化器。这被称为每通道量化,其影响将在后续内容中详细讨论。
  其他研究超越了每通道量化参数,并对权重或激活的一组应用了单独的量化器。增加组的粒度通常会提高准确性,但会增加一些额外开销。这些额外开销与处理具有不同比例因子的值的累加器有关。目前大多数现有的定点加速器不支持这种逻辑,因此我们在本文中不会考虑它们。然而,随着这一领域的研究不断发展,未来可以期待对这些方法的更多硬件支持。

2.3 实际考虑

  当量化具有多个层的神经网络时,我们面临着一个庞大的量化选择空间,包括量化方案、粒度和比特宽度。在本节中,我们探讨了一些帮助减少搜索空间的实际考虑因素。
  请注意,在本文中,我们只考虑了均匀比特宽度。这意味着权重或激活选择的比特宽度在所有层中保持不变。均匀比特宽度在硬件上具有更普遍的支持,但一些最近的研究也探讨了异构比特宽度或混合精度的实现。
  对称与非对称量化 对于每个权重和激活量化,我们都必须选择一个量化方案。一方面,非对称量化更具表现力,因为存在额外的偏移参数,但另一方面可能会有一些计算开销。为了理解为什么会这样,请考虑当非对称权重 W ^ x ^ \hat{W}\hat{x} W^x^ = sw(Wint - zw) 与非对称激活 x ^ \hat{x} x^ = sx(xint - zx) 相乘时发生了什么
公式2.9
  第一项是如果两个操作都采用对称格式时的情况。第三和第四项仅取决于比例、偏移和权重值,这些值是预先知道的。因此,这两项可以预先计算,并且几乎没有额外成本就可以添加到层的偏置项中。然而,第二项取决于输入数据 x。这意味着对于每个数据批次,我们需要在推断过程中计算一个额外的项。这可能会导致延迟和功耗方面的显著开销,因为这相当于添加了一个额外的通道。
因此,常见的方法是使用非对称激活量化和对称权重量化,避免了额外的数据相关项。
  逐张量和逐通道量化 在第2.2节中,我们讨论了不同级别的量化粒度。权重和激活的逐张量量化一直是标准的,因为它得到了所有定点加速器的支持。然而,当权重的分布在通道之间有显著差异时,权重的逐通道量化可以提高准确性。回顾等式(2.3)中的量化MAC操作,我们可以看到,通过在加速器中应用单独的逐通道权重比例因子,可以实现逐通道权重量化,而不需要重新调整。激活的逐通道量化要难得多,因为我们无法将比例因子分解出来进行求和,因此需要为每个输入通道重新调整累加器。虽然权重的逐通道量化越来越普遍,但并非所有商业硬件都支持它。因此,重要的是要检查你打算使用的目标设备是否支持这种方法。

  • 19
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值