量化不是万能药:你的模型真的需要INT4吗

📅 2026/8/19 7:28:44
量化不是万能药:你的模型真的需要INT4吗
当INT4量化把准确率从78分压到56分我们学到了什么去年Q3我们团队接了一个紧急需求把一个13B参数的对话模型部署到客户的单张RTX 3090上。客户明确说显存只有24GBFP16模型光权重就要26GB加上一系列的推理开销OOM是必然的。我们的第一反应很直接上INT4量化。网上到处都是INT4无损的帖子GGUF Q4_K_M的 perplexity 曲线看起来也漂亮团队里几个人一合计就全量切了INT4。上线第一天模型能跑了显存压到了11GB速度也还行。结果第三天客户客服开始收到投诉模型在回答技术问题时莫名其妙出现常识性错误表述模糊前言不搭后语。我们跑了一下基准测试拿原始FP16版本做对照结果令人窒息技术问答类任务准确率从78%掉到了56%。后来复盘发现embedding层的词向量余弦相似度从0.992跌到了0.967这在开放域对话里不是小问题。这个教训逼着我们重新理解了一件事量化不是简单的压缩它是有代价的而这个代价在不同的任务上表现差异极大。一、量化到底是什么不只是把数字变小从原理上说量化是把FP32或FP16的浮点权重映射到一个更窄的整数空间。比如INT8把权重映射到[-128, 127]INT4则更激进只有[-8, 7]这16个离散值可以选。这个过程依赖一个关键变量缩放因子scale。拿INT8来说如果某一层权重的最大值是3.2那么scale就等于127除以3.2约等于39.69。量化时每个浮点权重乘以scale再四舍五入就变成了一个-128到127之间的整数。反量化时除以scale近似还原。问题就出在四舍五入这里。每一次量化操作都在引入一次舍入误差rounding error。INT8还好只有256个离散点误差相对可控。但INT4只有16个点对于权重分布范围大的层误差会被显著放大。打个比方用一把只有16个刻度的尺子去量精度要求1mm的零件量出来的结果能准吗二、INT4/INT8/FP16的真实精度损失哪些场景INT4真的没问题去年底有一篇对LLaMA 3.1全系列模型的量化评估研究做了超过50万次独立测试结论非常有参考价值。FP8权重和激活值同时量化W8A8-FP在所有规模模型上基本实现无损精度损失几乎都在1%以内。INT8权重和激活值同时量化W8A8-INT在经过适当的阈值调整后精度损失通常控制在1%到3%之间。这两个格式对于大多数生产环境都是可以接受的。INT4的情况就复杂得多。全量INT4W4A16或W4A8如果不借助特殊技术如QLoRA、AWQ的激活感知权重量化精度损失可能在2%到10%之间波动具体取决于模型规模和任务类型。拿LLaMA-7B在常见学术基准上的测试结果来看FP16基准得分约78分INT8版本约68分掉8分INT4版本约56分掉12分。这个差距在一些对精度敏感的场景下是不可接受的。但INT4并非一无是处。在以下场景它是合理的选择embedding层之外的纯生成推理任务知识蒸馏后的较小模型7B以下推理硬件严重受限如消费级显卡、边缘设备以及对输出质量容忍度较高的检索增强类任务。而INT8则是大多数场景的甜点区速度提升2到4倍精度损失通常不超过2%到3%对embedding层和attention层的精度影响相对温和。这也是为什么很多生产环境默认选择INT8而非INT4。三、量化上线前必须测的三个指标我们踩过坑之后的经验是量化做完不等于可以上线。下面三个指标缺一不可。第一个指标任务基准分。跑和你业务最相关的测试集比如你的模型做代码生成就用HumanEval或MBPP做客服对话就用自己标注的真实QA对。不要只看 perplexity那个指标和实际用户体验的相关性在很多场景下是有限的。我们当时只看perplexity就是踩了这个坑。第二个指标关键层激活值分布。尤其是attention层和embedding层的输出分布。量化后这两个层的激活值如果出现较大偏差往往是准确率断崖式下降的根本原因。简单的检查方法是抽取一批代表性样本对比FP16和量化版本在关键层的余弦相似度低于0.97就要警惕。第三个指标长尾case召回率。不要只看平均分拉一个你业务里错误成本最高的TOP 50 case跑量化前后两次对比通过率。很多时候平均分差不多但这50个case里有10个出现了明显退化这种长尾退化在生产环境里会被放大很多倍。四、什么时候别碰量化量化是一个工具不是银弹。以下几种情况我的建议是不要强行量化或者至少不要贸然上线INT4。第一对精度要求极高的垂直领域任务。比如医疗影像辅助诊断、金融风控、法律文书生成这类场景1%的准确率损失可能对应着巨大的实际风险。量化感知训练QAT或许可以考虑但成本不低要认真评估ROI。第二模型本身已经不够大。有人做过一个有意思的对比用量化方法把LLaMA-2 13B压到INT4精度和原始LLaMA-2 7B几乎一样。如果量化带来的加速没有达到13B/7B的倍数直接用小模型是更务实的选择。第三硬件本身不支持INT4计算加速。很多国产AI芯片和部分消费级GPU对INT4的kernel支持并不完整实际推理时会发生INT4存储、FP16运算的情况——既没省显存也没快起来。这种场景下INT8或FP16才是更稳妥的选择。写在最后量化这件事最危险的不是技术本身而是它看起来没问题的错觉。全INT4上线后模型能跑、显存省了、速度数字好看直到用户反馈开始涌进来才发现代价早就付过了只是没测到。我的建议是先把基准打清楚选量化方案时以INT8为默认档只有在硬件严重受限或者对输出质量有充分容忍度的场景才考虑INT4。上线前用真实业务数据做三个指标的全量验证而不是只看一个 perplexity。模型优化是一场持续的事量化只是其中一个环节。别让省显存这个目标悄悄偷走了你真正想保护的东西。本文基于公开技术资料与行业实践整理不构成具体产品选型或部署方案建议。