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

章节6

总结与结论

  深度学习已经成为许多机器学习应用的重要组成部分,现在可以在无数的电子设备和服务中找到,从智能手机和家用电器到无人机、机器人和自动驾驶汽车。随着深度学习在我们日常生活中的普及和应用范围的扩大,对快速和高效的神经网络推理的需求也越来越大。神经网络量化是减少神经网络在推理过程中能量和延迟需求的最有效方法之一。

  量化允许我们从浮点表示转换为定点格式,并结合利用高效定点运算的专用硬件,有潜力实现显著的功耗节约和推理加速。然而,为了利用这些节约,我们需要能够在减少权重和激活位宽的同时保持高精度的稳健量化方法。为此,我们考虑了两类主要的量化算法:后训练量化(PTQ)和量化感知训练(QAT)。

  后训练量化技术将预训练的FP32网络转换为无需原始训练流程的定点网络。这使得它们成为一种轻量级、一键式的量化方法,工程工作量和计算成本都很低。我们描述了PTQ的一系列最新进展,并介绍了一个PTQ流程,可以在各种模型和机器学习任务中实现接近浮点精度的结果。特别是,使用所提出的流程,我们可以在仅损失1%浮点精度的情况下,对各种网络(视觉任务)进行8位量化的权重和激活。此外,我们还介绍了一种调试工作流程,以有效地识别和修复在量化新网络时可能出现的问题。

  量化感知训练通过模拟量化操作来建模训练过程中的量化噪声。这种训练过程可以找到比PTQ更好的解决方案。与PTQ类似,我们引入了一个标准的QAT流程。

  PTQ和QAT方法都是高通的AI模型效率工具包(AIMET)的一部分。正如本文中的代码示例所示,AIMET提供了简单易用的API,可以在PyTorch模型上应用这些技术。此外,AIMET还支持TensorFlow模型,并提供了相应的代码示例,可以在开源GitHub页面上找到-https://quic.github.io/aimet-pages/index.html。AIMET的技术性能已经在各种模型和任务上得到验证。这些优化模型也作为AIMET模型仓库在GitHub上提供-[https://github.com/quic/aimet-model-zoo]。我们希望通过本白皮书分享的提出的流程和相应的AIMET代码示例,能够帮助工程师以更少的时间和精力部署高性能的量化模型。

章节7

附录

7.1 术语表

表7.1

7.2 支持的层类型

7.2.1 PyTorch

卷积层:
   torch.nn.Conv1d, torch.nn.Conv2d, torch.nn.ConvTranspose1d, torch.nn.ConvTranspose2d
批归一化层:
  torch.nn.BatchNorm1d, torch.nn.BatchNorm2d

7.3 PyTorch模型指南

为了充分利用AIMET的功能,建议用户在定义PyTorch模型时遵循以下几个指导原则:
• 模型应支持转换为ONNX格式。用户可以按照下面所示的方式检查模型是否兼容ONNX转换。

#代码块7.1 ONNX检查
model = Model()
torch.onnx.export(model, <dummy_input>, <onnx_file_name>):

• 将层定义为模块而不是使用torch.nn.functional的等效函数,当使用激活函数和其他无状态层时。PyTorch允许用户将层定义为模块(在构造函数中实例化并在前向传递中使用),或者仅在前向传递中使用torch.nn.functional的等效函数。对于AIMET,要成功添加量化模拟操作,所有层都必须定义为模块。将模型定义更改为使用模块而不是函数式定义,在数学上是等效的,不需要重新训练模型。在某些情况下可能不可能,其中操作只能表示为函数式而不是类定义,但应尽可能遵循此方法。
• 避免重用类定义的模块。在类定义中定义的模块应仅使用一次。如果要重用任何模块,而不是重复使用,应在类定义中定义一个新的相同模块。

7.3.1 其他层和量化

神经网络中使用了许多其他类型的层。如何对其进行建模取决于具体的硬件实现。有时,模拟量化与目标性能之间的不匹配是由于层没有正确量化。在这里,我们提供了一些关于如何模拟量化常用层的指导:
最大池化 不需要激活量化,因为输入和输出值在相同的量化网格上。

平均池化 整数的平均值不一定是整数。因此,需要在平均池化之后进行量化步骤。然而,我们使用相同的量化器用于输入和输出,因为量化范围没有显著变化。

逐元素相加 尽管它的性质很简单,但这个操作很难准确模拟。在相加过程中,两个输入的量化范围必须完全匹配。如果这些范围不匹配,则需要额外的注意使相加正常工作。对于这个问题没有单一的解决方案,但可以通过添加重新量化步骤来粗略地模拟添加的噪声。另一种方法是通过使用相同的量化参数来优化网络,以便所有输入到相加的元素都具有相同的量化参数。这将避免重新量化步骤,但可能需要微调。

连接 通常,被连接的两个分支不共享相同的量化参数。这意味着它们的量化网格可能不重叠,因此需要进行重新量化步骤。与逐元素相加类似,可以优化网络以使被连接的分支共享量化参数。

  • 24
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值