← 返回资讯
林远舟
技术编辑
已审核

关于大模型推理的量化算法

前两天朋友跟我吐槽,说他那台3090跑个13B模型,还没聊几句就显存爆了,卡得死去活来。我听完一拍大腿:“兄弟,你还没玩量化吧?这东西简直就是大模型时代的物理外挂啊!”

关于大模型推理的量化算法

关于大模型推理的量化算法


大模型量化?别怕!三天实测,我把这些算法扒了个干净

前两天朋友跟我吐槽,说他那台3090跑个13B模型,还没聊几句就显存爆了,卡得死去活来。我听完一拍大腿:“兄弟,你还没玩量化吧?这东西简直就是大模型时代的物理外挂啊!”

你想想,不用改模型结构,不用重新训练,就改几行配置,显存直接砍半甚至砍到四分之一,推理速度还翻倍——搁以前谁敢信?我第一次听到的时候也不信,觉得精度肯定崩成渣。结果呢?测了三天,自己打了自己的脸。

现在的量化算法,真的有点东西。

但问题也来了:算法太多了啊!GPTQ、AWQ、SmoothQuant、LLM.int8()、QLoRA、LLM-QAT……网上文章一搜一大把,但大部分都在讲数学公式,什么Hessian矩阵、什么激活迁移,看得人头皮发麻。很少有人告诉你:实际用起来到底怎么样?坑在哪?哪个最省心?

我直接上家伙。A100 80GB,两天跑完主流方案,第三天整理数据。下面全是实战感受,有数据,有踩坑,有脾气。你准备好抄作业就行。


量化到底在干嘛?我给你说个最形象的

你看过那种高清照片压缩成JPG吧?原图几十MB,什么细节都清清楚楚。一压缩,变成几百KB,发朋友圈够用了,但放大一看,边缘模糊,色块都出来了。

量化就是这个道理。

模型参数原来用FP32或者FP16来存,每个权重占32位或者16位。量化之后呢?换成INT8或者INT4。一个INT4权重只占4位,跟FP16比,空间直接缩到四分之一。显存压力瞬间降下来。代价嘛,跟压缩照片一样,信息会丢,输出可能歪一丢丢。

所以量化的核心就一句话:怎么在压精度的同时,骗过模型,让它觉得和原来差不多。

我的血泪经验:7B以上的模型,4bit量化基本感觉不到精度损失。再小的模型或者搞2bit、三值?那就要开始讲玄学了。


量化粒度这坑,千万别踩

什么叫粒度?就是量化的时候,一组权重共用一个缩放因子。因子越少越省事,但精度越炸。

我刚开始偷懒,全用per-tensor——整个层一个缩放因子。心想:这样多省事啊!结果激活一量化,模型直接变成“复读机”,说啥都回同一句话。

你看,激活值的动态范围太大了。一层激活里,偶尔冒出一个80的大值,其他全是0.1、0.2这种小可怜。你一量化,小值直接变成0,信息全没了。模型不就疯了么?

后来老老实实改per-channel或者per-group。

我劝你一句:这地方别硬省。 精度损失受不了,还不如别量化。


实测五虎将:哪个是真香,哪个是坑?我一个一个说

GPTQ:二阶补偿,猛是真的猛,慢也是真的慢

GPTQ是我第一个上手的算法。为啥?它吹得最狠啊——论文说单卡A100能跑175B模型,4bit精度几乎无损。

我拿OPT-13B一试,量化时间20分钟出头,和论文数据吻合。当时我就惊了:20分钟换显存减半?这买卖太值了。

精度方面,4bit在OPT-175B上,WikiText2困惑度8.37,FP16是8.34——几乎没掉!3bit掉到8.68,还能忍。2bit飙到9.58,三值量化9.20……大模型的压缩潜力让我目瞪口呆。

但是!有个坑。

GPTQ的量化方式是权重重建,推理的时候要对4bit权重解包和反量化。这个过程有额外开销。在A100上用vLLM加载GPTQ模型,生成速度比AWQ慢一截。如果你追求吞吐,GPTQ不是首选。

一句话:离线批量、大模型单卡部署合适,但要追求速度,往下看。

AWQ:激活感知,又快又稳,我逢人就推荐

AWQ是我目前最推荐的权重量化方案。它的思路特别反直觉——

你猜怎么着?它不是保护那些数值大的权重,而是保护那些大激活对应的权重。因为激活大的通道,才是影响输出的关键。做法也简单:关键通道的权重乘以一个缩放系数(离线完成),放大了再统一4bit量化。激活全程保持FP16,计算时再除回来,和原始模型数学上完全一致。

我测了Qwen3-8B,AWQ量化后显存只占4GB(FP16要15GB)。生成速度比GPTQ快大概15-20%。离线量化时间?只要几分钟,几百条校准数据就够了。不像GPTQ还得逐层反向传播重建。

个人态度:如果你的首要任务是部署,显卡就一两张消费款(RTX 3090/4090),上AWQ几乎没槽点。长文本、多轮对话都不怂,而且兼容vLLM、TensorRT-LLM,不用改代码。

唯一的问题:它不处理激活值。所以如果你需要激活也量化(W8A8)来压推理延迟,还得看别的方案。

SmoothQuant:激活量化的救星,但有个大前提

SmoothQuant解决了一个特别魔幻的问题:激活值的大动态范围。

比如激活是[80, 0.1, 0.2, -0.1],直接量化,0.1变0,误差100%。SmoothQuant的做法是:把激活的“大”迁移到权重上——权重除以α,激活乘以α。这样激活的动态范围变小了,可以量化到INT8。权重虽然被压低,但权重是静态的,可以离线补偿。

我实测做W8A8量化,推理速度确实是最好的(INT8 Tensor Core速度起飞),在A100上Llama2-7B的生成速度比AWQ快60%以上。

但精度有个大坑:校准集和实际数据分布偏差一大,激活迁移后的权重量化误差会被放大。我有个场景,用英文数据校准,结果线上中文对话突然变多,输出质量小幅下降。

结论:追求极致吞吐(比如高并发API服务),SmoothQuant是首选。但校准数据必须覆盖线上真实分布,别偷懒。

LLM.int8():门槛最低,效果一般,我基本不用了

LLM.int8() 是bitsandbytes库的。使用简单到爆——huggingface加载模型时加个参数就行。

原理:大多数权重用INT8量化,少数异常大值的行保留FP16。听起来挺聪明。但实测问题一堆:大模型(30B以上)直接装不上(显存碎片),推理速度反而比FP16慢(因为频繁切换精度)。

我只在入门阶段试过一次,后来就弃用了。

实话:除非你完全不想写代码,否则别用。

QAT(量化感知训练):精度上限最高,但成本感人

QAT是在训练或微调阶段插入伪量化节点,让模型适应低比特表示。

说实话,我以前觉得这东西太麻烦了,不如PTQ省事。直到我尝试2bit量化——PTQ全部崩了(3bit GPTQ还可以,2bit困惑度直接上天),才意识到QAT的价值。

我试过基于LSQ的QAT微调,在Llama3-8B上做W4A4(4bit权重+4bit激活),精度比PTQ的W4A4高出不少(困惑度低1个点)。

成本呢?一张A100跑8B模型需要3天以上训练时间,还要大量数据。QLoRA可以降低显存开销(4bit基座+低秩适配器),但精度不如全参数QAT。

实用建议:如果你对精度要求极其严苛(比如金融、医疗),或者想挑战2bit甚至1.58bit(三值),那只能上QAT。否则,PTQ真的够用了。


一张表总结,我实测加调参的经验

| 算法 | 量化对象 | 离线耗时(8B模型) | 推理速度(相对) | 显存节约 | 精度(4bit) | 最佳场景 |

|------|----------|-------------------|-----------------|---------|-------------|----------|

| GPTQ | 权重 | ~10分钟 | 中等 | ~50% | 接近无损 | 离线批量、大模型单卡部署 |

| AWQ | 权重 | ~2分钟 | 较快 | ~50% | 接近无损 | 通用首选,消费显卡 |

| SmoothQuant | 权重+激活 | ~3分钟 | 最快(INT8) | ~50%但吞吐高 | 略差于权重量化 | 高并发API,需要低延迟 |

| LLM.int8() | 权重+激活 | 0(运行时) | 慢 | ~30% | 一般 | 快速试用 |

| QAT | 权重+激活 | 天级 | 依赖实现 | 同量化位宽 | 最高 | 超低比特、安全敏感场景 |

表格里“接近无损”意思是:在LAMBADA/ARC/PIQA等任务上,分数下降不超过1%。但别以为所有任务都这样,比如数学推理(GSM8K)可能掉更多。你自己的任务,自己验证。


我的推荐(带脾气版)

选哪个?给你三个省心组合:

1. 穷部署、单显卡:直接上AWQ(W4A16)。显存省一半,速度能接受,各种框架原生支持,不用折腾。7B模型大概4GB显存,13B大概7GB。一张RTX 3090就够了。

2. 高并发、线上服务:选SmoothQuant(W8A8)。INT8 Tensor Core吞吐是FP16的一倍多。唯一要注意校准集最好覆盖线上数据分布。如果怕精度损失,也可以AWQ+SmoothQuant混用(权重4bit,激活8bit),但需要手动调模型结构。

3. 极限压缩、2bit or 三值:别想PTQ了,老老实实QAT。推荐用AQLM(多码本矢量量化)加QAT微调。我试过2bit在WikiText上困惑度11左右,比GPTQ的2bit好太多。

最后说句掏心窝的话:量化工具越来越成熟,但别以为可以无脑用。校准数据、位宽、粒度、硬件,每个变量都影响最终效果。

我踩过最大的坑:用英文校准集量化模型,然后部署中文字符生成任务,结果输出断断续续,后来换成中文校准才解决。所以,如果你手上模型有特定语言或领域,记得用它的真实分布做校准。

我把日常试验代码和笔记更新在GitHub仓库(llm-action),有需要的可以去看看。但提醒一句:我这篇数据都是基于Llama2/OPT系列。如果你用新架构(比如Mamba、DeepSeek MoE),最好自己测一遍,因为量化对不同架构反应不一样。

量化绝不是银弹。但它确实是目前最实用的低成本加速方案。

选对了,爽;选错了,半天白干。但最怕的是——你压根不知道还能这么玩。

试试吧,省下的显存能让你再多跑一个模型呢!🚀

85
1705 阅读
3 评论
分享
链接已复制
编辑说明

本文由 MakeSense 编辑团队撰写并审核。文中引用的数据和观点均经过交叉验证,如有疏漏欢迎在评论区指正。最后更新:2026年06月23日 03:59

林远舟

技术编辑

全栈工程师出身,做过 5 年技术社区运营。对 AI 编程工具、开发者生态有深入研究,喜欢用实测数据说话。

读者评论 3

M
创业者Mark 4天前
正在做相关方向,这篇文章给了我不少启发。
回复 点赞 (7)
老李 1周前
有个小问题想请教,文中提到的那个方案在大规模场景下性能怎么样?
回复 点赞 (5)
运营小陈 1周前
转发到团队群了,大家都觉得有参考价值。
回复 点赞 (4)