量化,其本质上是一种近似。当我们把像32位浮点数($FP32$)这样的高精度值映射到像8位整数($INT8$)这样的低精度格式时,不可避免地会损失一些信息。原始值与量化表示之间的这种差异即为量化误差,有时也称作量化噪声。了解并度量此误差是评估量化策略是否适用于给定模型和应用的基础。虽然目标是使此误差最小化,但简单地度量原始差异并非总是足够。我们需要有助于理解此误差对模型整体行为和性能影响的指标。直接误差指标在基本层面,我们可以直接比较原始浮点张量(权重或激活)与它们的量化后反量化版本。(反量化将低精度整数转换回浮点值,以便直接比较)。常用指标包括:均方误差 (MSE): 此指标度量原始值 ($x$) 与量化后反量化值 ($x_q$) 之间的平均平方差。对于一个包含 $N$ 个元素的张量: $$ MSE = \frac{1}{N} \sum_{i=1}^{N} (x_i - x_{q,i})^2 $$ 较低的 MSE 通常表示更好的近似。然而,MSE 对异常值敏感,并且并非总是与模型在复杂任务上的最终性能直接相关。信噪比 (SNR): 通常以分贝 (dB) 表示,SNR 比较原始信号(张量值)的功率与量化噪声(误差)的功率。较高的 SNR 表明原始信号相对于量化引入的误差更强。它通常按如下方式计算: $$ SNR = 10 \log_{10} \left( \frac{\sum_{i=1}^{N} x_i^2}{\sum_{i=1}^{N} (x_i - x_{q,i})^2} \right) $$ 较高的 SNR(例如,> 20 dB)通常更受青睐,这表明量化噪声相对于原始值而言较小。这些直接指标在量化算法的开发和调试过程中很有用,有助于评估特定层或张量的量化过程本身的数值准确度。模型层面的性能指标虽然直接误差指标量化数值差异,但它们不能完全说明量化如何影响 LLM 的功能。LLM 是一个复杂的系统,小的数值误差有时可能会放大,而另一些时候可能对最终输出影响微乎其微。因此,评估量化模型在相关任务上的表现是必不可少的。困惑度 (PPL): 这是评估语言模型的标准指标。困惑度衡量概率模型预测样本的能力。较低的困惑度表明模型对测试数据的“意外程度”较低,这意味着它为观察到的词序列分配了更高的概率。在评估量化时,我们通常在相同的验证数据集上计算原始 $FP32$ 模型和量化模型(例如,$INT8$)的困惑度。与原始模型相比,量化模型的困惑度略微增加,表明量化过程很好地保持了模型的语言建模能力。大幅增加可能表明量化存在问题。任务专属指标: 通常,最有意义的评估涉及衡量量化 LLM 在其预期特定下游任务上的性能。这可能包括:准确率: 用于分类任务。F1分数: 用于像命名实体识别或问答这类精确率和召回率都很重要的任务。BLEU/ROUGE 分数: 用于翻译或摘要等生成任务,比较模型的输出与参考文本。比较原始模型和量化模型之间的这些任务专属指标,提供了对量化 功能 影响最直接的评估。误差与量化选择的关系量化误差的大小和分布受量化过程中所做选择的影响:数据类型: 量化到 $INT4$ 通常会比量化到 $INT8$ 引入更多误差。量化方案: 在某些情况下,非对称量化可能比对称量化更好地处理偏斜分布,这可能导致较低的误差。粒度: 逐通道或逐组量化通常比逐张量量化产生更低的误差,因为它能更紧密地根据权重或激活更小子集的具体统计数据调整量化参数(缩放因子和零点)。校准数据: 对于静态量化方法(在第 2 章中讨论),用于确定量化参数的校准数据选择会明显影响未见数据上的最终误差。权衡衡量量化误差并非为了实现零误差;而是为了理解其中的权衡。我们有意降低精度以获得效率(更小的尺寸、更快的推理、更低的能耗)。主要目的是使用适当的指标(如困惑度或任务专属分数)来量化由此带来的准确性或性能下降,并确定这种下降是否在效率提升的权衡下,对于目标应用来说可以接受。在后续章节中讨论的技术,例如高级 PTQ 方法和 QAT,旨在最小化这种性能下降,同时仍能实现大幅压缩。