虽然量化大型语言模型(LLM)的主要目的是提升推理效率,但这种优化会引入数值近似,从而可能降低模型的预测质量。因此,系统评估精度影响是量化流程中不可或缺的一部分。评估量化如何影响LLM在语言任务上表现的方法和指标得到了详细说明。仅仅测量延迟或内存减少(如前所述)只提供了评估的一个方面。如果一个更快、更小的模型在生成连贯文本、准确回答问题或执行其指定功能方面的能力受到严重影响,那么它的价值不大。我们必须确认量化模型为其预期应用保持可接受的质量水平。评估内在质量:困惑度困惑度(PPL)是评估语言模型时常用的内在指标。它衡量概率模型预测样本的效果。在LLM中,它量化了模型在预测文本序列中下一个词元时的不确定性或“惊讶程度”。较低的困惑度分数表示模型对其预测更有信心且更准确,表明具有更好的流畅性和连贯性。数学上,对于词元序列$w_1, w_2, ..., w_N$,困惑度计算为每个词元的平均负对数似然的指数:$$ PPL = \exp\left(-\frac{1}{N} \sum_{i=1}^N \log p(w_i | w_{<i})\right) $$此处$p(w_i | w_{<i})$是模型在给定前面词元的情况下,为第$i$个词元分配的概率。评估量化模型时,您会计算其在有代表性的测试数据集上的困惑度,并将其与原始全精度模型(例如FP32或BF16)在相同数据集上的困惑度进行比较。困惑度增加表明模型语言建模能力可能因量化而下降。然而,困惑度有其局限性。它主要衡量统计相关性和流畅性,不一定衡量事实正确性、推理能力或在特定下游任务上的表现。一个模型即使困惑度很低,也可能生成无意义或不正确的输出。因此,尽管困惑度对于快速评估或量化策略间的相对比较很有用,但它不应是精度评估的唯一指标。评估外在质量:下游任务基准评估精度下降的一种更全面且通常更有意义的方法,是通过在下游任务上进行外在评估。这涉及在特定基准测试上测试量化模型的表现,这些基准反映了模型在实际应用中预期执行的任务。用于评估LLM的常用基准测试套件包括:通用语言理解: GLUE、SuperGLUE提供了一系列多样的自然语言理解任务。大规模多任务语言理解 (MMLU): 衡量跨多个学科的知识,测试推理和事实回忆能力。代码生成: HumanEval、MBPP评估模型生成正确代码片段的能力。问答: SQuAD、Natural Questions、TriviaQA等数据集评估理解和信息检索能力。摘要: CNN/Daily Mail、XSum使用ROUGE等指标衡量生成摘要的质量。翻译: WMT基准测试使用BLEU等指标评估翻译质量。安全性与幻觉: TruthfulQA或HaluEval等基准测试专门评估模型的诚实性和产生幻觉的倾向。基准测试的选择应与LLM的预期应用场景一致。例如,如果部署模型用于客户支持聊天机器人,在问答和对话基准上进行评估比代码生成更具相关性。评估过程包括:在选定的基准测试上运行原始(基线)模型,以建立参考分数(例如:准确率、F1、ROUGE、BLEU、精确匹配)。在相同评估条件下,在相同基准测试上运行量化模型(例如:INT8、INT4-GPTQ、INT4-AWQ)。将量化模型的得分与基线进行比较。使用一套多样化的基准测试,可以更全面地了解量化对不同模型能力的影响。评估设置严谨的评估需要仔细的设置:评估数据集: 选择具有代表性的数据集,这些数据应与模型在部署时会遇到的数据相似。确保数据集足够大,以产生统计学上显著的结果。在可能的情况下,使用标准、经过充分验证的基准数据集,以方便比较。基线比较: 最重要的比较是量化模型与其原始未量化版本之间的比较(通常是FP16或BF16,因为FP32对于LLM推理基线来说通常太慢)。这可以隔离量化的影响。确保所有其他因素(如生成参数温度、top-p、评估脚本)保持不变。比较量化策略: 在相同基准上并行评估不同的量化方法(例如朴素PTQ、GPTQ、AWQ)和位精度(例如INT8、INT4、NF4),以了解它们各自的权衡。分析权衡评估的目的不仅仅是测量精度下降,而是要理解精度和效率提升(延迟减少、内存节省)之间的权衡。绘制精度指标与性能指标的图表可以帮助直观显示这种关系。{"layout": {"title": "量化Llama-2-7B的精度与延迟权衡", "xaxis": {"title": "每词元平均延迟 (ms)"}, "yaxis": {"title": "MMLU 精度 (%)"}, "legend": {"title": "量化方法"}, "template": "plotly_white"}, "data": [{"x": [15.2], "y": [54.1], "mode": "markers+text", "text": ["FP16"], "textposition": "top right", "marker": {"color": "#4263eb", "size": 12}, "name": "FP16"}, {"x": [9.8], "y": [53.9], "mode": "markers+text", "text": ["INT8"], "textposition": "bottom right", "marker": {"color": "#12b886", "size": 12}, "name": "INT8 (PTQ)"}, {"x": [6.5], "y": [53.5], "mode": "markers+text", "text": ["GPTQ"], "textposition": "top left", "marker": {"color": "#f76707", "size": 12}, "name": "INT4 (GPTQ)"}, {"x": [6.8], "y": [53.7], "mode": "markers+text", "text": ["AWQ"], "textposition": "bottom left", "marker": {"color": "#ae3ec9", "size": 12}, "name": "INT4 (AWQ)"}]}MMLU基准上的精度与特定GPU上每词元平均生成延迟的比较。延迟越低越好(越快),精度越高越好。靠近左上角的点表示更优的权衡。解读此类图表有助于决策。对于对延迟高度敏感但能容忍小幅精度下降的应用,像INT4这样激进的量化可能可以接受。对于需要最高保真度的任务,INT8甚至保持FP16/BF16可能也是必要的,尽管资源使用量更高。“可接受的”精度下降完全取决于具体的用例及其对错误的容忍度。影响精度下降的因素精度下降的程度受多种因素影响,一些因素在其他章节中讨论:量化算法: 像GPTQ和AWQ这样的高级PTQ方法明确设计用于与更简单的舍入技术相比,最小化精度损失。校准数据: PTQ中使用的校准数据集的质量和代表性很大程度上影响最终精度。模型架构和大小: 更大的模型或具有某些架构特征(如特定激活函数或归一化层)的模型可能对量化表现出不同的敏感性。权重或激活中异常值的存在也是一个已知问题(在第5章中讨论)。位精度: 较低的位精度(例如INT4、INT3)通常会带来更高的效率提升,但与INT8相比,也伴随着更高的精度下降风险。总之,评估精度下降是部署量化LLM时不可或缺的一步。结合使用像困惑度这样的内在指标进行快速检查,以及在相关下游任务基准上进行外在评估,可以全面了解其影响。分析精度和性能指标之间的权衡,有助于根据您的特定应用需求,做出明智的决策来选择合适的量化策略。