像 GPTQ 和 AWQ 这样的训练后量化 (PTQ) 方法,在无需重新训练的情况下为量化大型语言模型 (LLM) 提供了有效方式。然而,这些方法有时难以保持高准确性,尤其是在采用极低位宽(例如 INT4 或更低)时。当保持模型精度非常要紧,或者 PTQ 结果不理想时,量化感知训练 (QAT) 提供了一种有效的替代方案。QAT 将量化过程直接整合到模型训练或微调循环中。QAT 不像对已训练模型进行量化,而是在训练期间模拟量化效果,使模型的权重能够适应并弥补最终转换前可能出现的精度损失。与 PTQ 相比,这通常会带来量化模型更高的准确性,尤其是在较低位级别下。主要权衡点是什么?QAT 需要访问有代表性的训练数据集,并涉及大量的计算成本,这与微调 LLM 本身相当。从零开始对大型 LLM 进行完整 QAT 通常不切实际;因此,最常见的方法是量化感知微调 (QAFT),即对预训练模型进行相对较少的步骤微调,并启用量化模拟。训练期间的量化效果模拟QAT 的核心机制是向模型的计算图插入操作,以在前向传播过程中模拟量化和反量化的效果。这些操作通常被称为“假”量化节点或量化-反量化 (QDQ) 节点。在前向传播过程中,对于给定的权重张量 $w$ 或激活张量 $a$:使用选定的量化方案(例如,对称 INT8 每通道)对张量进行量化:$q = \text{Quantize}(w, s, z)$。量化后的张量 $q$ 立即反量化回浮点表示:$w' = \text{Dequantize}(q, s, z)$。这个反量化后的张量 $w'$(现在包含模拟的量化误差)用于后续的模型操作。数学上,该操作模拟了往返转换: $$ w' = \text{反量化}(\text{量化}(w)) $$ 这确保了网络在训练期间能够体验到精度降低的影响。反向传播需要仔细处理。由于量化函数(通常涉及舍入)在几乎所有地方都具有零梯度或未定义梯度,标准反向传播无法直接应用。解决此问题最常用的技术是直通估计器 (STE)。STE 近似计算量化函数的梯度。在最简单的形式下,它将量化/反量化模块视为梯度方面的恒等函数。也就是说,梯度直接穿过而不变: $$ \frac{\partial L}{\partial w} \approx \frac{\partial L}{\partial w'} $$ 其中 $L$ 是损失函数。更复杂的 STE 变体可能会根据量化范围对梯度应用裁剪或缩放。这种近似使得模型权重 $w$ 能够根据使用量化后再反量化的权重 $w'$ 计算出的损失进行更新。大型语言模型的 QAT 难点将 QAT/QAFT 应用于大型 LLM 会带来一些特定难点:计算成本: 即使是 QAFT 也需要大量的 GPU 内存和计算时间,这与常规微调类似。在拥有数千亿参数的模型上运行 QAFT 需要大量的硬件资源。训练稳定性: 模拟量化,尤其是低位量化,有时会使训练过程不稳定。梯度可能爆炸或消失。缓解策略包括:渐进式量化: 从更高精度(例如 FP16)开始微调,并逐步引入模拟量化,可能随时间降低位宽。可学习的量化参数: 将比例因子 $s$ 和零点 $z$ 视为可学习参数,与权重一起在训练期间进行优化。仔细初始化: 根据权重和激活的初始统计数据初始化 $s$ 和 $z$。梯度裁剪: 标准梯度裁剪技术变得更加重要。数据要求: QAFT 需要一个合适的微调数据集。该数据集应能代表量化 LLM 的目标领域或任务。对于通用模型,寻找或创建足够多样化且大型的数据集可能是一个障碍。实现复杂性: 在复杂的 LLM 架构和训练循环中集成 QDQ 节点并管理 STE 可能很复杂。框架支持(如 PyTorch 的 torch.quantization 或 TensorFlow 的模型优化工具包)简化了这一点,但仍需要仔细配置。超参数调优: QAT 增加了更多需要调优的超参数,例如量化参数的学习率、具体的 STE 变体、要量化的层,以及引入量化的时间表。高级策略与考量一些高级技术可改进 LLM 的 QAT:混合精度 QAT: LLM 的并非所有部分对量化都同样敏感。对不同层应用不同位精度的 QAT。例如,对嵌入层、注意力机制或最终输出层保留更高精度(例如 8 位或 FP16),而对大部分前馈网络权重使用较低精度(例如 INT4)。这需要仔细分析或自动化搜索算法来寻找最优精度组合。处理异常值: 尽管 QAT 允许模型适应,但权重或激活中的极端异常值仍可能带来问题。将 QAT 与专门用于处理异常值的技术(例如,量化前激活裁剪、专用量化方案)结合使用可能会产生更好的结果。微调计划: QAFT 的持续时间和学习率计划很重要。通常,在相关数据集上仅需少量 epoch 甚至一个 epoch 的一部分就足以使模型适应量化效果,而不会导致灾难性遗忘或过高的计算成本。何时考虑 QATQAT(特别是 QAFT)通常在以下情况考虑:需要最高准确性: PTQ 方法无法满足目标应用所需的准确性门槛,尤其是在极低位宽(4 位或更低)时。计算资源允许: 具备必要的 GPU 资源和微调时间。已需要进行特定任务微调: 如果 LLM 已在为特定下游任务进行微调,那么与之后单独的 PTQ 步骤相比,整合 QAFT 增加的边际成本更少。推向量化到极低精度: 对于低于 4 位的激进量化,QAT 通常是保持可接受性能更可行的途径,尽管这仍是一个活跃的研究方向。总而言之,与 PTQ 相比,QAT 为量化 LLM 提供了一种可能获得更高准确性的方法,但其代价是增加了复杂性和计算需求。它涉及在微调阶段模拟量化,使模型能够学习对精度降低引入的噪声具有适应性的权重。了解其中的利弊和难点对于决定 QAFT 是否是您 LLM 量化目标的正确策略非常重要。