19-3 LLM之野望 3 – 模型量化基础知识

介绍

人工智能 (AI) 正在通过使机器能够执行复杂任务来彻底改变行业。随着 AI 模型变得越来越复杂,优化它们以实现高效运行至关重要。一项关键的优化技术是模型量化,它简化了模型中数字的精度,使其运行速度更快、功耗更低,同时对准确性的影响最小。此过程对于在计算资源有限的设备(如智能手机和嵌入式系统)上部署高级 AI 功能尤其重要。在本文中,我们将探讨量化的工作原理、其优势及其在增强各个领域的 AI 应用方面的作用。

理解模型量化

模型量化是人工智能中用于简化 AI 模型执行的一种技术。它通过降低模型中数值数据的精度来实现这一点。通常,AI 模型使用浮点算法,这可能需要大量计算和内存。量化将这些浮点数转换为整数,这对机器来说要简单得多。这种转换大大降低了模型对计算资源的需求,同时加快了其运行速度。

19-3 LLM之野望 3 - 模型量化基础知识

量化涉及什么?

量化主要涉及减少模型计算中表示每个数字所需的位数。常见格式包括:

32 位浮点:标准精度

32 位浮点表示允许宽动态范围和高精度。这种格式通常用于机器学习模型的训练阶段,因为它可以准确地表示非常小和非常大的值,这在神经网络计算中很常见。

结构: IEEE 754 标准定义的 32 位浮点数由三部分组成:

  • 符号位:决定数是正数还是负数的1位。
  • 指数: 8 位,确定数字的大小。
  • 尾数(或有效数字): 23 位,表示数字的精度。

内存存储示例:考虑像 6.25 这样的数字。在 32 位浮点格式中,它将被分解并存储如下:

  • 将6.25转换成二进制形式,即110.01
  • 将其标准化为二进制(以2为底)的科学计数法,即为1.1001 × 2^2
  • 对符号(正数)、指数(对于单精度,通过 127 的偏差进行调整,因此 2 + 127 = 129)和尾数(小数点后的数字,以规范化的形式表示)。

在内存中,这将表示为:

0 | 10000001 | 10010000000000000000000

16 位整数:半精度

16 位整数量化涉及将 32 位浮点数转换为 16 位整数。此格式可减小模型大小并加快计算速度,但仍保持比 8 位整数更高的精度,从而平衡性能和准确性。

结构: 16 位浮点数,也基于 IEEE 754,但精度较低:

  • 符号位:1位。
  • 指数:5 位。
  • 尾数:10位。

内存存储示例:对 16 位浮点数使用相同的数字 6.25:

  • 像以前一样标准化1.1001 × 2^2
  • 将指数调整为偏差 15(小于 32 位版本),因此 2 + 15 = 17。

它将以如下形式存储在内存中:0 | 10001 | 1001000000

8 位整数:生产级效率

8 位整数量化将每个数字所需的数据减少到仅一个字节。这种量化级别可最大限度地提高效率,通常用于计算资源有限的生产环境。

结构: 8 位整数仅存储从 0 到 255 的整数(如果有符号,则为 -128 到 127)。没有符号、指数或尾数;它是数字的直接二进制表示。

内存存储示例:对于 8 位整数 123 这样的数字:

  • 123 的二进制形式是01111011

它直接存储为:01111011

格式bfloat16

bfloat16格式或 Brain Floating Point 格式由 Google 推出,并广泛应用于其 TensorFlow 机器学习框架,尤其是用于在 TPU(张量处理单元)上训练模型。该格式是标准 IEEE 754 32 位浮点格式的截断版本,旨在保持 32 位浮点的范围,同时降低有效数字的精度。

bfloat16 的结构

  • 符号位:1位,与IEEE 754相同,表示数字的符号(正数或负数)。
  • 指数:8 位,与 IEEE 32 位浮点数中使用的指数相同。这允许bfloat16具有与 相同的范围float32
  • 尾数(有效数字):7 位,与 中使用的 23 位相比明显减少float32。位数的减少会导致精度损失,但仍保留了足够的细节,可用于神经网络中的许多高级计算。

bfloat16 的优点

  1. 内存效率:与 相比,通过将位数减半float32bfloat16可以在相同内存量中存储两倍的数字。这在深度学习中尤其有利,因为深度学习中大参数矩阵很常见。
  2. 计算速度:数字运算bfloat16比 运算更快float32,尤其是在针对此格式优化的硬件上,例如 Google 的 TPU。这可以显著加快深度学习模型的训练和推理阶段。
  3. 范围保留:使用相同的指数范围意味着float32可以bfloat16处理相同范围的值,从非常小到非常大,从而防止在其他降低精度的格式中常见的溢出和下溢等问题。

19-3 LLM之野望 3 - 模型量化基础知识

量化技术的类型:

量化技术大致可分为两种类型:对称量化和非对称量化。两者都用于降低运行 AI 模型的计算复杂度,但它们在将浮点数映射到整数方面采用不同的策略。

对称量化

定义:对称量化使用相同的比例因子来映射浮点数的正值和负值。此方法将零保留为零,这意味着浮点中的零点在量化格式中仍为零。

特征:

  • 以零为中心:由于零仍为零,因此量化间隔围绕零对称。这通常可以简化计算,尤其是在通常使用 ReLU 等激活函数的神经网络中。
  • 更简单的计算:对称性允许更简单的硬件实现和更少的模型推理期间的计算开销。
  • 潜在的精度损失:由于对称量化在所有值中使用单一比例因子,因此可能导致动态范围的利用率不理想,特别是当数字的分布不以零为中心时。

示例:在对称量化中,如果浮点数的范围是 -10 到 10,则比例因子将确保 -10 映射到可表示的最小整数,10 映射到最大整数,而零直接映射到零。

非对称量化

定义:非对称量化使用不同的比例因子,可以将零点从零移到另一个值。这种方法使量化范围能够更好地与数据的实际范围保持一致,从而可能更有效地利用可表示的范围。

特征:

  • 灵活零点:非对称量化中的零点可以移动,使得量化范围能够更好地适应原始数据的分布。
  • 优化动态范围:通过调整尺度和零点,非对称量化通常可以比对称量化保持更好的精度和更低的量化误差。
  • 更复杂的计算:额外的灵活性是以推理过程中更复杂的计算为代价的,因为必须同时考虑规模和零点。

示例:对于浮点数范围从 -3 到 12 的数据集,非对称量化可以使用非零的零点(例如,映射到整数 3),这使得映射能够更有效地覆盖从最小值到最大值的范围。

在对称和非对称量化之间进行选择

对称和非对称量化之间的选择通常取决于数据的具体特征和部署环境的操作约束:

  • 对称量化可能因硬件效率和更简单的实现而更受青睐,尤其适用于处理能力有限的设备。
  • 非对称量化适用于保持模型精度至关重要且计算资源允许处理额外复杂性的应用。

通过选择合适的量化方法,开发者和研究人员可以在部署AI模型时有效地平衡性能、准确性和效率。

量化从float32int8

仿射量化方案:

x = S * (x_q - Z)

变量:

  • xfloat32:我们正在量化的原始值。
  • x_q:量化int8值。
  • S:比例因子(浮点数),将原始float32值的范围缩放到该int8范围。
  • Z:零点(一个整数),它将范围移动以最好地适应原始数据的分布。

怎么运行的

仿射量化方案通过将float32值线性变换到域中来运行int8。变换的设计不仅压缩了范围,而且还将其移位以int8尽可能有效地使用可用范围(无符号为 [0, 255] 或有符号为 [-128, 127])。

逐步过程:

  1. 确定范围[a,b]:确定需要量化的值的最小值(a)和最大值(b) 。float32
  2. 计算比例因子(S):
  • 比例因子是根据浮点值的范围 [a, b] 和目标值的范围计算的int8
  • 对于有符号的int8S = (b - a) / 255如果对称或适应不对称范围。

3.计算零点(Z):

  • 零点的计算方式是,在必要时将其中一个int8值与空间中的零对齐float32。如果是对称分布,则可能是范围的中间值;int8如果针对非对称分布进行优化,则可能是另一个值。
  • 对于有符号的int8,计算示例如下Z = round(127 - b / S)

4.量化:

  • 对于每个float32x,使用以下公式计算相应的int8值: 。x_qx_q = round((x / S) + Z)
  • 该公式float32根据比例调整每个值并将其移动零点,然后将其四舍五入为最接近的整数以适合空间int8

5.去量化(如果需要可以逆转这一过程):

  • float32要从量化值获取近似的原始值int8,请使用量化公式的逆:x ≈ S * (x_q - Z)

例子

假设我们的float32值范围是从 -2.5 到 2.5,并且我们想要将它们量化为有符号的int8范围:

  • 计算 S 和 Z:假设S = (2.5 - (-2.5)) / 255 ≈ 0.0196,并选择 ,Z = 0以简单起见(假设对称量化)。
  • 量化一个值,例如 x = 1.0: x_q = round((1.0 / 0.0196) + 0) ≈ 51
  • 将 x_q = 51 反量化回 x: x ≈ 0.0196 * (51 - 0) ≈ 1.0

这种方法可确保将宽动态范围float32有效且高效地映射到更有限的int8范围内,从而优化在资源受限的环境中部署的 AI 模型的存储和计算要求。

如何确保量化而不显著损失准确性:

训练后量化

定义:训练后量化是使用浮点算法对模型进行全面训练后应用的一种过程。该技术不需要对训练过程本身进行任何更改。

程序:

  1. 模型训练:首先以通常的方式训练模型,所有权重和激活都表示为 32 位浮点。
  2. 范围确定:训练后,确定需要量化的值(权重和激活)的范围。这通常是通过在模型中运行训练或验证数据的子集并观察输出值的分布来完成的。
  3. 量化:应用量化方案(如前面提到的仿射变换)将这些浮点值转换为低精度整数。
  4. 校准:可选地,通过量化模型运行另一组数据,以微调量化参数(尺度和零点),以最大限度地减少准确性损失。

优点:

  • 实施简单、速度快,因为不需要重新培训。
  • 适用于训练的计算资源有限的场景。

缺点:

  • 与训练期间融入量化意识的方法相比,准确度损失可能会更大。
  • 对于量化如何影响模型内部的控制较少。

量化感知训练

定义:量化感知训练将量化直接纳入训练过程。在这里,模型在训练时就知道它将被量化,从而使其能够适应较低的精度约束。

程序:

  1. 模拟量化:在训练过程中,模拟量化的效果。这意味着前向和后向传递的计算方式就像权重和激活已经量化一样。
  2. 训练调整:训练过程包括针对精度降低的调整,通常通过微调梯度和优化算法来适应量化效应。
  3. 量化的应用:一旦模型完全训练完毕,就会应用实际的量化参数,与训练期间的模拟条件非常相似。

优点:

  • 通常会导致模型准确度下降较少,因为该模型是专门训练来处理量化的。
  • 提供更为稳健的处理方式,以应对可能受到训练后量化负面影响的边缘情况和分布变化。

缺点:

  • 更为复杂且资源密集,因为它需要修改培训过程。
  • 由于模拟量化效果的开销,训练时间可能会更长。

在两者之间做出选择

训练后量化和量化感知训练之间的选择取决于几个因素:

  • 资源可用性:如果再训练的资源和时间有限,训练后量化是更快捷、更便宜的选择。
  • 准确性要求:对于准确性至关重要且对性能下降的容忍度较低的应用,最好采用量化感知训练。
  • 模型复杂性和用例:一些复杂的模型,特别是部署在敏感或关键应用程序(如医学图像分析)中的模型,可能会从量化感知训练中受益更多。

挑战和注意事项

在 AI 中实现模型量化时,需要解决一些挑战和注意事项。这些挑战和注意事项包括由于精度降低而导致的准确度权衡、跨平台的兼容性问题以及识别量化可能不适合的场景。本节将详细探讨这些方面。

准确度权衡与降低精度的管理

关键挑战:量化本质上涉及降低模型数值数据的精度。这种降低会导致模型准确性和性能下降,尤其是对于对数据精度高度敏感的任务而言。

管理权衡:

  • 高级量化技术:采用量化感知训练等技术有助于最大限度地减少准确率损失。这种方法会调整训练过程以考虑量化的影响,从而生成一个对准确率损失更稳健的模型。
  • 混合方法:有时,模型的所有部分都不需要量化为低精度。使用混合精度方法(模型的关键部分保留更高的精度)可以成为一种有效的折衷方案。
  • 迭代优化:通过迭代测试和调整不断优化量化参数(尺度和零点),可以实现更好的性能保持。

不同硬件和软件平台的兼容性问题

主要挑战:量化模型在不同的硬件和软件平台上的表现可能不一致。某些平台可能不完全支持所有类型的量化,或者量化操作的实现方式可能存在差异。

解决兼容性问题:

  • 跨平台测试:在所有目标平台上进行广泛测试量化模型可以在部署过程的早期识别并解决兼容性问题。
  • 使用标准化框架:通过 TensorFlow 或 PyTorch 等得到良好支持的框架实现量化,这些框架可跨多个平台提供兼容性,可以缓解其中的一些问题。
  • 定制解决方案:对于关键应用,开发针对特定硬件功能的定制量化解决方案可以确保最佳性能。

量化可能不适合的案例研究或示例

精度要求较高的场景:

  • 医学成像:在 MRI 或 CT 扫描分析等应用中,每一点数据精度对于准确诊断都至关重要。量化可能会导致重要细节丢失,从而可能影响结果。
  • 金融服务:金融领域使用的算法(例如用于高频交易或风险评估的算法)需要高精度才能做出准确的预测和决策。精度降低可能会导致重大的财务差异。

具有微妙特征的复杂模型:

  • 自然语言处理:用于情感分析或机器翻译的高级 NLP 模型在量化时可能会失去捕捉语言细微差别的能力,从而导致性能下降。
  • 音频处理:语音识别或音乐合成等任务中,音频数据的细微差别非常重要,但在激进的量化策略下,它们可能会受到影响。

技术限制:

  • 旧硬件缺乏支持:旧硬件可能无法有效支持量化模型,从而限制量化 AI 解决方案的部署选项。

总之,虽然量化是优化 AI 模型性能和效率的可行途径,但它也带来了需要仔细考虑的挑战。了解这些权衡和限制对于成功实施量化策略至关重要,同时又不损害模型功能的关键方面。

  • 9
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拉达曼迪斯II

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值