尽管标准8比特整数量化(INT8)提供了显著优势,但现代大型语言模型(LLM)的规模通常需要更大力度的压缩。进一步降低到INT8以下,主要是4比特范围,可以显著减少内存占用并加速计算,使在资源受限硬件上运行大型模型成为可能。然而,这种增加的压缩伴随潜在的精度下降,需仔细权衡所用技术。本节探讨了用于LLM的主要低比特量化策略,侧重于低于INT8精度的方法。4比特整数量化 (INT4)INT8量化最直接的扩展是进一步降低精度至4比特(INT4)。仅使用4比特意味着我们可以表示 $2^4 = 16$ 个不同的整数值。这立即将内存需求比INT8减半,并比16比特浮点格式(如FP16或BF16)减少了四倍。与INT8类似,INT4量化涉及将原始浮点值(权重或激活)映射到这个有限的整数集合。映射通常使用缩放因子($s$)和可选的零点($z$):对称量化: $q = \text{clip}(\text{round}(x / s), -8, 7)$ (假设有符号INT4范围为 [-8, 7])非对称量化: $q = \text{clip}(\text{round}(x / s) + z, 0, 15)$ (假设无符号INT4范围为 [0, 15])截断边界取决于选择有符号还是无符号表示。缩放因子($s$)和零点($z$)可以按张量、按通道,甚至按通道内的一组权重来确定。分组量化(例如,将张量内的64或128个值分组,并为每组计算缩放因子/零点)在LLM量化中已变得普遍,因为它提供比按通道更细的粒度,有助于保持精度,特别是在INT4等较低比特深度下。挑战: 用仅16个不同的级别表示LLM权重和激活的宽动态范围具有挑战性。异常值对模型性能很重要,但特别容易出现大的量化误差。因此,普通的INT4训练后量化通常会导致不可接受的精度损失。像GPTQ和AWQ(稍后介绍)这样的高级PTQ算法是专门开发用于减轻在目标为INT4时这种退化的。此外,INT4矩阵乘法的高效硬件支持对于实现性能提升不可或缺,尽管这在现代GPU和加速器中变得越来越普遍。低比特浮点格式 (FP4, FP8)除了整数,低比特量化也可以使用浮点表示。像FP4(4比特浮点)和FP8(8比特浮点)这样的格式分配比特的方式与整数不同,通常为符号位、指数位和尾数位保留比特。例如,一个FP4格式可能会使用1比特用于符号,2比特用于指数,1比特用于尾数。这种结构使得低比特浮点数能够表示比相同比特宽度的INT格式更宽的动态范围,尽管可表示数字之间的精度可能较低。指数位使得表示非常小和非常大的数字比线性整数映射更有效。这有利于处理LLM权重和激活中经常出现的异常值。FP8获得了广泛关注,特别是在NVIDIA Hopper和Ada Lovelace GPU等新型架构中获得原生硬件支持。两种常见的FP8变体是:E4M3: 1个符号位,4个指数位,3个尾数位。提供更宽的动态范围,适合权重或梯度。E5M2: 1个符号位,5个指数位,2个尾数位。提供更高的精度但动态范围较窄,常用于激活。尽管FP4标准化程度较低,硬件支持也比FP8更少见,但这种方法说明了低比特表示的另一种方法。低比特整数格式和浮点格式之间的选择涉及动态范围覆盖、精度以及目标硬件上高效计算内核可用性之间的权衡。NormalFloat 4比特 (NF4)NF4是QLoRA论文中提出的一种特殊的4比特数据类型。它的设计基于一个观察:预训练神经网络中的权重通常遵循零均值正态分布。NF4是信息论上最优的格式,适用于符合这种分布的数据。与标准INT4使用均匀间隔的量化级别不同,NF4使用由标准正态分布($N(0, 1)$)的分位数决定的非均匀级别。具体来说,NF4中16个可表示的值的选择使得每个值表示 $N(0, 1)$ 分布概率质量(曲线下面积)的等量 $1/16$ 部分。这意味着NF4将更多精度分配给接近零的值,即正态分布权重的主要部分所在的地方,而将较少精度分配给尾部稀有、幅度较大的值。NF4的特点:非均匀: 量化步长不相等。分布感知: 为正态分布数据优化。对称: 围绕零点对称。固定级别: 16个目标量化值是根据标准正态分位数预定义的。量化涉及为每个输入找到最接近的NF4值,并进行适当的缩放。NF4常结合双重量化(对量化参数本身进行量化)等技术使用,以进一步降低内存开销。像bitsandbytes这样的库提供了NF4量化和计算的高效实现。{"layout": {"title": {"text": "量化级别分布"}, "xaxis": {"title": {"text": "原始值(归一化范围)"}, "range": [-1, 1]}, "yaxis": {"title": {"text": "量化表示"}, "zeroline": false, "showticklabels": false}, "legend": {"title": {"text": "量化类型"}}}, "data": [{"type": "scatter", "mode": "markers", "x": [-0.875, -0.625, -0.375, -0.125, 0.125, 0.375, 0.625, 0.875], "y": [0, 0, 0, 0, 0, 0, 0, 0], "marker": {"color": "#228be6", "size": 10, "symbol": "line-ns-open"}, "name": "INT4 (均匀步长)"}, {"type": "scatter", "mode": "markers", "x": [-0.9, -0.6, -0.4, -0.25, -0.1, 0.1, 0.25, 0.4, 0.6, 0.9], "y": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], "marker": {"color": "#40c057", "size": 10, "symbol": "line-ns-open"}, "name": "NF4 (非均匀步长)"}]}上图说明了均匀量化(如标准INT4)和非均匀量化(如NF4)之间的区别。均匀量化使用均匀间隔的级别,而NF4将其表示能力集中在零附近,反映了LLM权重的典型分布。请注意,这是一个简化的一维表示;实际量化涉及缩放。低比特技术选择选择合适的低比特技术取决于几个因素:目标硬件: 硬件是否为INT4、FP4、FP8提供高效内核,或者需要特定格式?缺乏原生支持可能会抵消性能提升。精度要求: 可接受的精度下降程度是多少?NF4和高级INT4方法(与GPTQ/AWQ结合)通常比朴素INT4更好地旨在减少这种损失。FP8提供了一种更接近BF16/FP16的平衡。模型特性: 权重分布是否与NF4的假设密切吻合?是否存在通过FP格式处理可能更好的显著异常值?软件生态: 是否有支持所选格式的库和部署框架可用(例如,NF4的bitsandbytes,INT4/FP8的TensorRT-LLM)?降低到INT8以下引入了复杂性,但通常是高效部署最大规模LLM的必要一步。了解INT4、低比特FP格式以及NF4等特殊类型的属性和权衡,是有效应用这些方法的基础。然而,这些方法的成功很大程度上依赖于校准数据和所用训练后量化算法的复杂程度,我们将在后续章节中介绍。