
你以为显卡买到80GB就能随便跑大模型?一个700亿参数的LLM,用FP16存权重就要140GB显存,连H100都装不下。很多人卡在“显存不够”这一步,以为只能上多机多卡、张量并行,结果推理还没开始,工程复杂度已经爆表。量化技术存在的意义,就是把这类“巨兽”压缩到单卡也能跑的程度,而且尽量不把模型精度毁掉。
一个拥有700亿参数的模型,使用FP16格式时,仅权重就需要140GB内存。
这远远超过了目前任何单个GPU的容量:

- H100拥有80GB显存
- RTX 4090拥有24GB显存
如果坚持用半精度直接跑,你几乎必然要上多GPU配置和张量并行,光是把模型加载进去就已经很折腾,更别说在生产环境里稳定服务。

量化的核心思路,是把权重从高精度浮点数压缩到更低位宽的整数表示,从而减少内存占用和带宽压力。
常见做法是:把每个权重从FP16映射到一个离散整数网格。先估计张量的动态范围,再把这个范围切成 2^b 个等级(例如4位就是16个等级),然后把每个权重四舍五入到最近的等级,并额外存一个缩放因子,推理时用它把整数还原回近似的浮点值。


当位宽降到4位时,权重内存理论上可以减少4倍。140GB的模型压缩后只剩约35GB,已经能塞进一张40GB或48GB显存的卡里。
听上去像白捡:精度只损失一点点,显存压力却大幅下降。可现实没这么美好,如果简单四舍五入真是“几乎无损”,那下面这张图就不会有五行不同方法,而只需要一行最朴素的方案。


异常值:量化里最难缠的“少数派”
隐藏在0.1%里的致命信息
图里之所以有五行,是因为大型Transformer中的权重和激活值并不是“人人平等”的。
《LLM.int8()》这篇论文给出了一个关键发现:当模型规模超过约67亿参数后,每一层Transformer里都会冒出少数隐藏维度,它们的数值比其他维度大 20 倍到 100 倍。
这些维度只占模型特征的大约0.1%,但如果你把它们粗暴地置零,模型的文本预测能力几乎会被直接摧毁。有用户在本地实验过,把这些通道屏蔽后,生成内容立刻变得前后不连贯,长文本尤其明显。


这些异常值也是简单四舍五入方案翻车的根源。
量化网格要覆盖整个张量的数值范围,当大部分值都在1左右时,突然出现一个幅度为60的激活,就会把缩放因子整体拉大。结果是:绝大多数正常值被挤到网格里的少数几个等级,精度被严重压缩,信息损失远超预期。

据一些开源评测数据,某些模型在4位“裸RTN”量化后,MMLU等基准分数会掉到原来的60%以下,而采用更聪明的异常值处理策略,分数可以回到90%以上。
这也是为什么量化不只是“压缩存储格式”,而是一个需要认真设计的数值工程问题。
前面图里的每一种方法,其实都在用不同的方式回答同一个问题:如何在不牺牲这些关键异常值的前提下,把模型压缩到更低位宽?
5种主流量化技术的核心差异
从工程视角看,这5种方法的关键区别在于:它们在什么时间点处理异常值问题——
- 四舍五入时:RTN
- 四舍五入后:GPTQ
- 四舍五入前:AWQ
- 推理时:LLM.int8()
- 训练过程中:QAT
我自己的观察是:很多团队选方案时,只看“精度掉多少”和“显存省多少”,却忽略了“部署复杂度”和“推理速度”这两个维度,结果上线后才发现不适合自己的场景。

下面就按这个时间轴,把5种技术拆开讲清楚。
四舍五入阶段:RTN 与 GPTQ
RTN:最便宜的基线,也是最容易翻车的方案
- RTN(round to nearest,四舍五入到最近值)是最直接的量化方式:对每个张量估计范围、计算缩放因子,然后把所有权重直接映射到最近的整数等级。
- 这个过程完全不需要校准数据,也不做任何“聪明”的修正,所以实现极其简单,速度也非常快。
- 代价是:在低位宽(比如4位)下,累积的四舍五入误差无法恢复,尤其在有大量异常值的层里,模型精度会明显崩塌。
- 有用户反馈,用RTN把一个130B模型压到4位后,虽然能在单卡上跑起来,但生成内容经常出现逻辑断裂、事实错误暴增的情况。

RTN的价值更多在于提供一个“下限”:任何更复杂的方案,都应该在精度上明显优于它,否则就没必要引入额外复杂度。
GPTQ:一边量化一边“补偿损伤”
GPTQ的思路,是在量化过程中即时修正四舍五入带来的损伤,而不是事后再去救火。

- 它会把一层的权重分成若干小块,按块依次量化。
- 每量化完一块,就测量这一步引入的误差,然后调整还没量化的权重,让它们“吸收”这部分误差。
- 这种调整并不是平均摊,而是利用校准数据的统计信息,挑出那些对输出影响最小的权重来承担误差。

据公开实现的经验,一个1750亿参数模型做4位GPTQ量化,大约需要4个GPU小时,算是“可接受但不算轻量”的级别。
风险点在于:GPTQ高度依赖校准数据,如果校准集分布和真实线上请求差异太大,就会出现“对校准集很准,对真实用户很飘”的情况。
AWQ的作者就指出,GPTQ在某些跨领域任务上会明显掉分,这一点在近期多轮开源评测里也有印证。
在部署上,GPTQ适合离线一次性量化,然后长期复用权重量化结果的场景,比如发布一个固定的推理模型版本。
四舍五入前:AWQ 的“优先保护要害”策略
AWQ:先找出关键权重,再决定怎么舍入
AWQ(Activation-aware Weight Quantization)的出发点很简单:与其事后修补,不如在四舍五入前就保护好最重要的权重。
- 它会用一小批校准样本跑一遍模型,观察哪些权重经常被“最大输入值”乘到。
- 这些权重的四舍五入误差会在层输出中被最大放大,所以是需要重点保护的对象。
- 统计下来,大约只有1%的权重通道属于这种“高敏感通道”。

AWQ没有给这些通道单独用更高精度存储,而是玩了一个“数学小把戏”:

- 在四舍五入前,先把这些重要通道乘以一个更大的缩放因子,让它们在整数网格上分布得更稀疏,细节不那么容易被抹平;
- 同时在后续计算里乘上一个匹配的逆缩放因子,保证整个层的输出在数学上保持不变。
最终所有权重都以普通INT4形式存储,推理时不需要任何特殊分支逻辑,这一点对工程实现非常友好。
AWQ对校准样本的依赖远低于GPTQ,几十到几百条样本就能起效,这也是它被vLLM等高性能服务引擎选为“默认量化方案”的重要原因之一。
AWQ 在真实项目中的体验
我曾帮一位朋友把一个70B开源模型迁到单卡环境,他原本用的是RTN 4bit,结果长文本问答经常“说着说着就跑题”。
换成AWQ后,在同样的显存占用下,主观体验明显稳定很多,尤其是代码生成和多轮对话,逻辑连贯性提升很直观。客观评测上,GSM8K和MMLU的分数也都比RTN高出10个百分点以上。

当然,AWQ也不是完美:对于极端长上下文或非常偏门的任务,偶尔还是会出现“量化后比全精度更爱胡编”的情况,这一点在社区里也有人吐槽过。
推理时与训练中:LLM.int8() 与 QAT
LLM.int8():把异常值单独拎出来算
LLM.int8()选择的路线,是在推理时把异常值“隔离”出来,而不是在权重上做太多手脚。
- 模型加载时,它会识别出那些携带极端值的维度。
- 每次矩阵乘法被拆成两部分:
- 异常值部分用完整FP16精度计算;
- 其余99.9%的维度用INT8计算,最后再把两部分结果合并。

这种方法不需要预先跑校准,也不必生成新的权重文件,所以在工程上非常“即插即用”。

在bitsandbytes库里,你只要打开 load_in_8bit 这个标志,就能直接用上这套机制,这也是很多人本地玩QLoRA微调时的默认配置。
代价是速度:每次矩阵乘法都要拆分和合并,比起一个高度优化的4位内核要慢不少。
对大规模在线服务来说,这种额外开销会直接转化为更高的延迟和更少的QPS,所以LLM.int8()更多被用在开发调试和小规模部署上。
QAT:在训练阶段就让模型“习惯被量化”
QAT(Quantization-Aware Training,量化感知训练)走的是另一条路:不再只改量化步骤,而是直接修改训练过程。

- 在短期微调阶段,每次前向传播前,先把权重量化到INT4,让模型在“真实的量化损伤”下进行预测。
- 反向传播和权重更新仍然在全精度空间里进行,因为四舍五入操作本身不可导,需要用一些近似技巧来传递梯度。
- 经过一段时间微调,权重会逐渐收敛到一种状态:即便被四舍五入到INT4,损失也不会显著上升。

谷歌在Gemma 3上就采用了这种策略:据公开信息,他们用大约5000步微调,在原始模型输出的基础上生成了QAT检查点。最终的INT4版本,在内存占用降低约3倍的情况下,主流基准测试的表现非常接近全精度模型。
说实话,QAT的门槛不低:需要训练资源、数据和工程管线,但一旦打通,能获得目前最接近“无损量化”的效果。对于追求极致性价比的大规模部署,这是值得认真评估的一条路线。
量化方案怎么选:一个简单决策框架

如果把上面所有内容压缩成一个可复用的判断标准,可以用这几个问题来筛选:
- 你是否有校准数据?
- 是否需要极致的推理速度?
- 能不能接受一次性离线量化的成本?
- 是否有能力做少量微调?
一个常见的选择清单可以是:
- 只想本地跑起来、改动最少:LLM.int8() / load_in_8bit
- 有少量校准数据,追求4bit高性价比:AWQ
- 有较多校准数据,愿意花时间离线量化:GPTQ
- 只是做快速实验,对精度要求不高:RTN
- 有训练资源,追求接近无损的4bit:QAT
数据显示,在不少开源模型上,AWQ 4bit 的MMLU分数能做到全精度的90%~95%,而显存占用只有原来的1/3左右。
在当前“显卡紧缺、推理成本高企”的环境下,这种级别的性价比,已经足以改变很多团队的技术路线选择。
如果你正纠结“要不要上量化”“该选哪种方案”,不妨把这套判断方法先收起来。等到下次需要在单卡上塞进一个超大模型,或者要把推理成本砍一半时,这些细节会比随口问朋友靠谱得多。
常见问题
Q:4位量化会不会让大模型变得“很蠢”?
A:不会必然变蠢,但粗暴的4位量化(比如RTN)确实可能让模型能力大幅下降。原因在于异常值通道被严重压缩,关键信息丢失,表现为逻辑跳跃、事实错误增多。更先进的方案如AWQ、GPTQ和QAT,会在量化前后或训练过程中专门处理这些通道,能把精度损失控制在10%以内。建议在上线前用与你业务接近的评测集做对比测试,而不是只看通用基准分数。
Q:没有校准数据,还能做高质量量化吗?
A:可以,但选择会受限。没有校准数据时,RTN和LLM.int8()是最容易落地的方案,其中LLM.int8()通过推理时拆分异常值,通常比RTN更稳。缺少校准数据的主要问题,是无法精确识别“哪些权重最重要”,像GPTQ、AWQ这类方法就发挥不出全部优势。建议至少收集几十到几百条真实请求作为简易校准集,哪怕不完美,也能显著提升量化效果。
Q:量化后推理速度一定会变快吗?
A:不一定,甚至可能变慢。理论上,位宽降低会减少内存带宽和算力需求,但实际速度还取决于内核实现和框架支持。比如LLM.int8()需要在每次矩阵乘法前后拆分和合并结果,在某些GPU和库版本上会比FP16还慢。相反,AWQ配合高度优化的4bit内核,往往能在保持精度的同时显著提速。建议在目标硬件上做端到端基准测试,而不是只看理论算力。
Q:QAT 值得为一个项目专门搭建吗?
A:如果你有稳定的大规模推理需求,QAT是值得认真考虑的。它的优势是能在4bit甚至更低位宽下,保持接近全精度的效果,长期来看能显著降低显卡成本和能耗。代价是需要训练资源、数据和工程投入,而且调参过程不算轻松。更现实的做法,是先用AWQ或GPTQ验证量化收益,如果发现精度瓶颈明显且业务体量足够大,再规划QAT管线,这样投入产出比会更清晰。
Q:如何判断一个量化模型是否“可上线”?
A:可以从三层标准来判断。第一层是离线指标:在与你业务相关的评测集上,对比全精度和量化模型的准确率、BLEU、MMLU等,差距控制在10%以内通常是可接受区间。第二层是在线体验:用真实用户问题做盲测,关注逻辑连贯性、事实错误率和幻觉频率。第三层是稳定性:长时间压测下的延迟、OOM情况和崩溃率。满足这三层标准,再结合成本收益评估,量化模型就基本具备上线条件了。



