系列回顾与核心问题引入

在之前的量化系列视频中,我们已经建立了基础认知。第一期解释了量化的本质:用更少的位数去近似表达高精度的模型权重,从而减少存储和内存占用。第二期介绍了GGUF格式,明确它只是封装模型结构、分词器和权重的推理文件格式,而非量化算法本身。第三期以Q4_K为例,拆解了权重分块、缩放系数映射及编码存储的具体过程。

“走完这前三期,我们已经知道模型为什么能变小,也知道一个Q4_K量化块是怎样编码的。”

尽管我们掌握了模型变小的原理和编码细节,但一个关键问题悬而未决:量化后究竟有没有损失能力?损失了多少? 本期视频将从三个方面回答这个问题:使用困惑度(PPL)和KL散度来评估量化带来的变化,并利用imatrix提供的校准信息尽量减少误差。简单来说,前两项指标用于评估量化的结果,后一项技术则用于改进量化的过程。## 困惑度(PPL)的原理与局限 困惑度,英文为Perplexity,通常缩写为PPL。我们可以将其理解为一场连续的猜下一个token的测试。当模型读取文本时,每到一个位置就预测接下来出现的token。如果实际内容符合模型的预期概率分布,PPL就会较低;反之,若文本经常出乎模型预料,PPL则会升高。因此,PPL衡量的是模型对指定测试文本的概率预测能力。

“它不是事实准确率,也不能直接代表推理、代码或者工具调用的能力。”

在量化评测中,必须固定模型版本、tokenizer、测试集上下文长度和实现方式,再比较高精度模型与量化版本的PPL。通常认为,量化模型的PPL越接近高精度基准或增量越小,说明对概率预测能力的影响越小。在llama.cpp中可通过llama-perplexity运行评测,社区常用WikiText-2数据集测试F16、Q8、Q6、Q5和Q4版本,并绘制体积与PPL的变化曲线。

然而,使用PPL存在三个主要限制。首先,不同的tokenizer、测试集或实现得到的PPL通常不能直接横向对比。其次,它将整份数据概括为一个数值,即使两个模型PPL接近,个别token的概率分布仍可能有显著差异。最后,结果高度依赖测试数据的分布。如果校准数据与评测数据相似(如都以维基文本为主),结果可能偏向此类文本,无法充分代表对话、代码或工具调用等实际场景。## KL散度:衡量概率分布的差异 为了弥补PPL的不足,我们需要观察另一个指标:KL散度(Kullback-Leibler Divergence),中文也称相对熵。它用于衡量两个概率分布之间的差异大小。

“KL散度不只看模型最终选择了哪个token,而是比较完整的概率分布。”

假设同一句话中,“模型”和“系统”在高精度模型中的概率分别为40%和20%,量化后变为30%和28%。KL散度关注的是这两组完整概率分布的接近程度。数值越接近0,说明两个模型的输出分布越一致;数值越大,表明量化模型偏离高精度模型越多。llama.cpp的评测分为两步:先用高精度模型处理测试集,保存每个位置的logits(原始分数)作为基准文件;再让量化模型处理同一文本并与之比较。

在官方WikiText-2示例中,LLaMA 2的基准文件约为11 GiB,LLaMA 3则高达约37 GiB。因此该测评需要预留充足的运行时间和存储空间。结果不仅包含平均KL散度,还包括概率变化的均方根以及Same top p(最高概率token一致率)。这个比例越高,说明两个模型最倾向选择的下一个token越一致。

“KL散度也不是模型的智力分数,它反映的是输出分布改变了多少。”

需要注意的是,KL散度不能直接等同于模型能力下降。量化误差有时甚至会让PPL略微降低。若真正关心代码、工具调用或长上下文能力,必须补充相应的任务评测。## imatrix:量化过程中的校准信息 与前两个评估指标不同,imatrix(importance matrix)不是评测分数,而是量化时使用的校准信息。它通过让高精度模型处理有代表性的文本,收集各张量对应的激活平方统计。某个方向在实际输入中越活跃,量化时就越需要控制该位置的误差。

“为了便于理解,可以把这些统计信息想象成一张重要性的热力图。”

实际操作分为两步:先用llama-imatrix生成imatrix.gguf文件,再通过llama-quantize的imatrix参数读取该文件进行量化。量化器可利用这些统计信息更好地控制重要方向上的误差。

这里需避免一个常见误解:imatrix不会自动决定第一层用4位、第二层用6位。它仅提供张量重要性的参考,具体量化类型和精度保留仍由算法和预设方案决定。此外,校准文本同样可能带来偏差。若用维基文本来生成imatrix并用同类数据评测KL,结果虽好看但未必代表实际场景。对于指令模型,准备校准数据时必须正确套用chat template(聊天模板)。

“理解了这一点,也就更容易理解Unsloth Dynamic的做法。”

Unsloth Dynamic的实践与完整流程

前三期介绍的Dynamic 2.0采用针对不同模型、不同层、不同张量使用不同量化组合的策略。官方说明指出,2.0版本的校准集根据模型大小从30万token增加到150万token,并专门考虑了对话场景。

以Gemma 3 12B为例:Q4_0 QAT版本在5-shot MMLU上得分为67.07%,BF16版本为67.15%。Q4_0文件大小仅为7.52 GB。这组数据说明评价量化结果时必须综合考虑方法、校准数据和任务评测,而非证明所有4位量化无损失。目前Unsloth已发布Dynamic 3.0,延续训练后量化思路,将imatrix、逐张量选择和独立评测结合在同一流程中。

我们可以总结出一套完整的校准与评测流程: 1. 准备接近实际使用场景且不与最终测试集重复的校准数据。 2. 使用imatrix制作多个量化版本。 3. 在独立测试文本上评测PPL和KL散度。 4. 按量化程度排列版本,比较内存占用、推理速度和测评结果。

“所谓的拐点不是某个固定的量化格式。”

如果从某一档开始,每节省一部分内存但PPL和KL增幅明显变大,或任务得分跌破下限,拐点就在这一档附近。最后应挑选拐点前后的两三个版本,用真正关心的代码、对话或工具调用任务进行验证。Q4_K_M和Q5_K通常是实用起点,但这仅是社区经验。可靠的结论应来自同一模型版本、测试集和测评命令。

“四位量化版本能跑,这只是一个开始。”

结论

本期内容通过引入PPL、KL散度和imatrix,系统性地回答了“量化后能力是否损失及如何评估”的问题。PPL反映了模型预测测试文本的能力变化,KL散度衡量了输出概率分布的偏离程度,而imatrix则为量化过程提供了张量重要性的参考信息。只有分清评测指标与校准信息的各自作用,并结合实际任务验证,才能准确判断量化带来的具体损失。