将大型语言模型(LLM)推向极低比特表示,例如低于4比特(如INT3、INT2、特定FP4/NF4格式),可实现内存占用和推理 (inference)速度的显著提升。然而,这种激进的压缩显著增加了不可接受的精度下降的风险。量化 (quantization)误差,即原始浮点值与其量化表示之间的差异,在这些较低比特宽度下会大得多。LLM,特别是其注意力机制 (attention mechanism)和大型线性层,对此增加的噪声可能敏感,导致下游任务性能出现明显下降。简单应用基本的量化技术,常常导致模型无法通过基本的质量检查。针对量化能力极限下运行模型时产生的精度损失,详细说明了专门设计的方法。
理解低比特模型中的敏感性
缓解措施的第一步是弄清精度为何会如此急剧下降。LLM的不同部分对量化 (quantization)噪声表现出不同程度的敏感性。通常,特定层或操作类型对整体误差的贡献异常大。
- 激活值异常点: 激活值,特别是在GeLU或ReLU变体等非线性函数之后,可能具有宽广的动态范围和显著的异常值。标准量化技术难以用仅有的几比特准确表示常见值和这些稀有的异常点。
- 权重 (weight)分布: 类似地,权重矩阵可能不遵循简单的均匀或正态分布。NF4(NormalFloat 4)等格式的开发就是因为LLM权重通常类似于零均值的正态分布,但即使这些也是近似值。低比特整数格式尤其难以处理非均匀分布。
- 敏感模块: 经验上,Transformer架构中的某些模块,如注意力分数计算或特定的前馈网络层,对精度损失的敏感度通常高于其他模块。
在应用缓解技术之前,使用分析工具或经验测试来分析这些分布并识别敏感组件非常重要。在“处理激活值和权重异常点”一节中讨论的方法在此处非常适用。
精度恢复方法
一旦了解了敏感性,就可以采用多种方法来提高低比特量化 (quantization)模型的精度:
高级校准策略
对于像GPTQ或AWQ这样的训练后量化 (quantization)(PTQ)方法,校准数据集扮演着重要角色。在低比特情境下,标准校准做法可能不够用。
- 更大的校准数据集: 使用更多的校准数据有时有助于更准确地捕获激活分布,但通常会收益递减。
- 有代表性的数据: 比大小更重要的是确保校准数据与模型在目标任务推理 (inference)期间将遇到的数据的统计特性紧密一致。使用多样化、高质量的文本,以产生真实的激活模式是必需的。
- 自适应校准: 有些方法会基于最小化校准集甚或小验证集上的量化误差来迭代调整量化参数 (parameter)(如缩放因子或零点),这超出了简单的最小/最大范围计算。
量化 (quantization)后微调 (fine-tuning)或量化感知训练(QAT)
尽管PTQ旨在以最小改动量化预训练 (pre-training)模型,但有时让模型适应量化噪声是最有效的方法。
- 量化后微调: 使用PTQ方法量化模型后,可以在有代表性的数据集上进行短期微调(通常只需几百或几千步)。这使得剩余的全精度参数 (parameter)(甚至量化参数,取决于方法)能够调整并补偿量化引入的误差。这通常比完整的QAT计算成本更低。
- 量化感知训练(QAT): QAT在训练或微调过程中模拟量化的效果。通过将量化操作(使用如直通估计器(STE)等技术来近似梯度)纳入训练图,模型学习到的权重 (weight)对量化过程更具弹性。尽管QAT的计算成本高于PTQ,但对于极低比特量化,尤其是在从头开始训练或进行大量微调时,它通常能产生最佳精度结果。
这些选择取决于可用的计算资源和精度下降的严重程度。量化后微调提供了良好的平衡,而QAT通常保留给那些需要在极低比特宽度下达到最高精度的场景。
混合精度策略性应用
激进量化 (quantization)不一定是非此即彼的方法。混合精度量化,之前作为一种通用技术进行过讨论,在低比特情境下变得尤为重要。
- 识别瓶颈: 分析模型,找出哪些层或组件在量化到目标低比特宽度(如INT3)时精度下降最严重。
- 选择性地采用更高精度: 将这些已识别的敏感组件保持在稍高的精度(如INT8、FP8,甚至FP16),同时将模型大部分参数 (parameter)(如大型线性层)量化到所需的低比特宽度。
- 迭代改进: 这可能需要一些实验。首先激进地量化所有内容,然后评估,识别造成最大误差的层(或许通过测量与FP32模型相比的层级输出差异),提高它们的精度,并重复此过程,直到达到可接受的精度/性能权衡。
这种实用方法让您能在保护模型最关键部分的同时,获得低比特量化的大部分益处。性能影响需要仔细考虑,因为混合精度级别有时会使硬件内核优化复杂化。
示意性地比较了不同量化策略下随比特宽度降低的精度下降情况。请注意,与朴素PTQ相比,高级校准、混合精度和QAT等技术如何帮助保持更高的精度,特别是在低于4比特的水平。混合精度点反映了模型中的平均比特宽度。
先进量化 (quantization)算法和格式
研究不断产生专为极致压缩设计的新的量化算法和数值格式。
- 算法选择: 寻找专门为保持低比特精度而设计的算法。这些算法可能涉及更精密的舍入方案(如随机舍入而非四舍五入),在缩放/零点计算期间更好地处理异常点,或进行分组量化调整。
- 格式选择: 在INT3、INT2和FP4或NF4等专用浮点格式之间的选择会影响精度。像NF4这样的格式旨在更好地匹配权重 (weight)分布,但可能硬件支持有限。建议在硬件和库支持的情况下,尝试不同的可用格式。例如,一些FP4变体(如E2M1)相比低比特整数,为激活值提供了更好的动态范围。
评估缓解措施的成效
成功缓解精度损失需要严格的评估。
- 困惑度: 尽管困惑度作为通用指标有用,但它可能与下游任务性能不完全相关,尤其是在激进量化 (quantization)之后。
- 任务特定指标: 直接在模型预期使用的基准测试套件或任务上评估量化并恢复精度的模型(例如,摘要的ROUGE分数、问答的F1分数、代码生成的pass@k)。
- 定性分析: 对于生成模型,对生成的文本进行定性检查,以发现细微的退化,例如重复增多、连贯性降低或事实不准确,这些可能无法通过自动化指标捕获。
实际考量
缓解低比特量化 (quantization)中的精度损失通常是一个涉及实验的迭代过程。很少存在单一的“最佳”解决方案;最优方法通常涉及组合多种技术:可能从高级校准开始,然后对敏感层应用混合精度,如果仍未达到精度目标,则可能添加一个短期的量化后微调 (fine-tuning)步骤。始终权衡精度提升与增加的复杂性、计算成本(对于QAT/微调)以及对推理 (inference)速度的潜在影响(由于混合精度或更复杂的内核)。