大模型推理跑不起来、跑起来太慢、显存装不下的朋友,多半最后都会走到量化这条路上。低精度量化(Quantization)这个词在LLM领域出现频率极高,但不少人对它的理解停留在“把FP16变成INT4能省显存”这种粗颗粒度层面,真到选方案、调参数、排查精度掉点的时候,又容易抓瞎。这篇文章把这套东西从头到尾拆开讲清楚,覆盖量化数学原理、主流精度格式、PTQ与QAT两条路线、实操流程和常见问题排查,帮你建立一张完整的量化知识地图。
1. 量化到底在做什么:从FP16到INT4的数学本质
1.1 一张映射表搞定量化的核心逻辑
量化本质上是数值映射。用一句话概括:把一个高精度数值范围,映射到一个低精度整数范围。原始权重是FP16(16位浮点),表达范围很广,精度也高;INT4(4位整数)只能表达16个离散整数(比如-8到7),信息量少了4倍,但推理时每个数占的显存小了4倍,计算速度也快得多。
假设一个权重矩阵里的数值分布在-0.5到0.5之间,我们要把它映射到INT8的-128到127范围,就引入两个关键参数:
- scale(缩放因子):浮点范围到整数范围的缩放比例。计算公式为
s = (r_max - r_min) / (q_max - q_min),表示浮点区间内每个整数步长代表多大的浮点值。 - zero_point(零点):浮点0值对应的整数刻度,用于保证浮点0能被精确表示。
量化过程(FP16转INT8)就是:q = round(clamp(x / s + zero_point))。反量化过程(INT8转回FP16)是:x ≈ s * (q - zero_point)。
这里有个非常重要的细节:量化不是无损操作。round操作本身会带来舍入误差,clamp操作会把超出范围的值截断,这是量化精度损失的两个主要来源。低精度(INT4/INT8)相比FP16,动态范围小、步长大,误差自然更大。理解了这张映射表,后面所有量化方案都万变不离其宗。
1.2 对称量化与非对称量化:两种映射策略
把上面的公式细化,就分出两条路线。
对称量化假设浮点数值正负对称分布,映射公式不带zero_point:q = round(clamp(x / s)),其中s = max(|x|) / q_max。优点是实现简单、推理时少算一次加减法,硬件友好;缺点是如果权重分布偏斜(比如全在0到0.5范围),有一半的整数表示范围被浪费了,精度等价于有效位减少。
非对称量化用min和max完整映射分布,带zero_point。能充分利用整数表示范围,精度通常更好;代价是推理时要多一次zero_point的加减运算,实现稍重,部分硬件的加速效果会打折扣。
实际项目里怎么选?权重和激活分布接近正态或拉普拉斯分布且正负基本对称时,优先用对称量化;分布明显偏斜时,非对称量化更稳。我实测下来,LLM的权重经过训练后多数是近似对称的钟形分布,所以主流的W8A8、W4A16方案都倾向对称量化。
1.3 量化的粒度:per-tensor、per-channel与group量化
量化粒度决定了scale和zero_point是共享还是各自独立。细粒度量化精度更高,但也意味着更多参数存储和更复杂的数据搬运。
- per-tensor:整个权重张量共用一个scale,最简单,但误差最大。因为不同通道的数值范围差异可能很大,用一个scale会严重牺牲小数值通道的精度。
- per-channel:每个输出通道单独一个scale,大幅提升精度,是LLM量化的主流配置。缺点是推理时需要更灵活的内存布局。
- per-group:把每个通道内的数据再切分成组(比如每128个元素一组),每组一个scale。这是GPTQ、AWQ等4bit量化方案的核心粒度选择,精度比per-channel更好,是当前低比特量化的标配。
粗粒度遇到一个极端大值,整个张量都会被拖累,动态范围被拉大,有效精度瞬间掉好几个bit——实际项目里宁可多存几个scale,也不要在这种地方省空间。
1.4 校准(Calibration):如何确定量化范围
选定了映射策略和粒度,还有一个核心问题:scale和zero_point怎么定?尤其是激活值的范围,需要跑一些数据来统计,这个步骤叫校准(Calibration)。
校准的核心方法是收集一组有代表性的输入样本,跑一遍FP16推理,记录每一层激活值的分布,然后基于这个分布计算量化参数。常见策略:
- MinMax:直接用观测到的最大值最小值,实现最简单,但对离群点极其敏感。
- Percentile:截取分布的某个百分位(比如99.99%),忽略极端离群值,更稳。
- MSE(均方误差):遍历所有候选截断点,选择使量化前后分布MSE最小的那个,精度最好但开销大。
- KL散度(熵校准):这是TensorRT当年提出的经典方法,衡量量化分布和原始分布的KL散度,选散度最小的范围,兼顾精度和鲁棒性。
校准集的质量直接影响量化效果。校准集必须覆盖模型真实使用场景的数据分布,数量一般128到512条足够,太多反而可能让统计过程变慢。某7B对话模型我试过用通用语料校准,上线后发现代码生成任务的输出质量明显下降——因为代码数据的数值分布和通用语料很不一样。换了一批代码相关的校准集重做,问题立刻缓解。
2. 主流低精度格式怎么选:INT8、INT4与FP8的权衡
2.1 INT8:成熟稳健的第一站
INT8量化是工程实践最成熟的方案,生态完善,推理框架支持度高,vLLM、TensorRT-LLM等主流推理引擎开箱即用。8bit整数有256个离散级别,动态范围虽然比FP16小,但通过per-channel和好的校准方法,可以把精度损失控制在很小的范围。
在LLM场景,INT8量化有两条典型路线:
- W8A8:权重和激活都是INT8,计算可以用INT8矩阵乘(如Turing架构的DP4A指令或Ampere的IMTBB指令),在支持INT8张量核心的GPU上加速效果最好。代价是需要把激活也量化,对校准要求高,分布里有明显离群值时容易掉点。
- W8A16:权重和激活都是INT8,计算可以用INT8矩阵乘(如Turing架构的DP4A指令或Ampere的IMTBB指令),在支持INT8张量核心的GPU上加速效果最好。更准确地说,论文里常见的提法是权重INT8、激活保持FP16,计算时反量化到FP16做混合精度乘法。这种方案的精度非常稳,但加速效果略逊于W8A8。
我推荐入门从W8A8开始评估,因为部署链路最顺、资料最多,精度不够再降级到混合精度方案。
2.2 INT4:极致压缩下的精度博弈
INT4量化是当前大模型推理降显存的主力方案,常见组合W4A16(权重4bit,激活16bit),精度和压缩比平衡得好。4bit权重只有16个取值,如果还用普通per-channel量化,精度会惨不忍睹,所以几乎必须依赖更精妙的算法:
- GPTQ:基于Hessian矩阵的逐层误差最小化方法,对权重做二阶近似校正,是目前4bit量化的基石算法。
- AWQ:通过统计激活值找出重要权重通道,用缩放因子保护这些通道,效果稳定且速度更快。
- QLoRA(4bit NF4):用NormalFloat4格式加上分块量化,主要用于参数高效微调场景,把量化误差压到最低。
INT4配合group size为128的per-group量化,基本能把7B模型的内存占用压到4GB出头,单卡部署不再是梦。但代价是推理时需要频繁反量化权重到FP16做计算,计算密度不如INT8,吞吐表现取决于框架的算子融合优化。
2.3 FP8:新硬件的原生选择
FP8(8位浮点)是Hopper架构和Ada Lovelace架构GPU原生支持的新格式,分两种变体:
- E4M3:4位指数、3位尾数,动态范围大,适合权重和激活的前向计算。
- E5M2:5位指数、2位尾数,动态范围更大但精度更低,适合梯度反向传播。
FP8和INT8的本质区别在于:FP8是浮点格式,同样8bit但能表达的非零数值分布更接近原始FP16分布,整体精度通常优于INT8。在支持FP8张量核心的GPU上,FP8推理吞吐比FP16快一倍。不过FP8生态还在完善中,低端GPU和CPU平台基本用不上。如果团队有H100这类卡,FP8是比INT8更值得尝试的方案,但要接受生态不成熟带来的折腾成本。
2.4 格式选型决策表
整理成表格方便对照:
| 格式 | 典型组合 | 显存节省 | 精度表现 | 硬件要求 | 生态成熟度 |
|---|---|---|---|---|---|
| INT8 | W8A8/W8A16 | 约50% | 基本无损 | 支持INT8的GPU/CPU | 非常高 |
| FP8 | W8A8-FP8 | 约50% | 优于INT8 | Hopper/Ada架构 | 中等 |
| INT4 | W4A16 | 约75% | 有可感知波动 | 通用GPU+框架优化 | 较高 |
| INT4+NF4 | QLoRA式 | 约75% | 微调场景最优 | 通用GPU | 较高 |
结合我日常项目的经验,通用对话模型用W4A16性价比最高;对精度极敏感的代码生成、数学推理、金融类数值任务,W8A8或FP8更稳妥;微调场景优先看NF4。
3. 两大路线:PTQ后训练量化与QAT量化感知训练
3.1 PTQ:拿来即用的高效路线
PTQ(Post-Training Quantization,训练后量化)直接用预训练权重做量化,不需要重新训练模型,是绝大多数LLM项目的首选。它的特点是成本低、速度快,几十分钟就能完成,但精度表现完全取决于算法选择和数据校准质量。
LLM场景的PTQ有几种做法:
- RTN(Round To Nearest):最朴素的直接舍入量化。把FP16权重除以scale后四舍五入。简单到让人怀疑,但配合per-group量化,精度其实没有想象中那么差,作为快速基线很合适。
- GPTQ(Optimal Brain Quantization家族):核心思想是:量化一个权重后,误差不直接丢弃,而是用Hessian矩阵做二阶补偿,把误差分配到同一层其他未量化的权重上。逐层迭代,从整体上最小化量化误差。这种方法让4bit量化成为可能。
- AWQ(Activation-aware Weight Quantization):核心洞察是:权重的重要性不一样,激活值幅度大的通道,对应权重更关键。保护这些重要通道,把量化误差集中在不重要的通道上。实现上不需要Hessian计算,速度比GPTQ快很多,效果还更稳。
- SmoothQuant:专门解决激活量化的难题。激活分布通常有离群值导致动态范围巨大,直接INT8量化误差大。SmoothQuant的思路是把激活的量化难度“转移”一部分到权重上,通过一个平滑因子让激活分布更规整、权重稍微难量化一点,整体误差却更均衡。
选型经验:1B到13B参数规模的模型,AWQ和GPTQ是当前最值得优先尝试的两个方案。实测相同条件下AWQ的推理速度略优于GPTQ,GPTQ在极小模型上的精度有时略好,但差距很小,更多取决于具体模型结构和数据集。
3.2 QAT:精度极致要求时的最后手段
QAT(Quantization-Aware Training,量化感知训练)在训练或微调阶段就把量化误差纳入考量,让模型自己学会“容忍”量化噪声。流程是:先给模型加伪量化节点(模拟量化的舍入误差),再继续训练或微调几步,让参数适应INT4/INT8的低精度表达。
QAT精度上限高,但成本也高——需要标注数据、训练资源和额外的时间成本。大部分LLM场景用不到,下面两种情况建议考虑:
- 模型已经部署,PTQ掉点严重且无法通过校准集调整解决。
- 做端侧/移动端部署,硬件算力有限,量化带来的加速收益必须保住精度。
实操上,QAT可以和数据集的少量指令微调结合,一边做指令微调一边模拟量化,效果往往比单独加伪量化更好。这在开源生态里叫Q-LoRA变体,比如用NF4格式做微调,本质上也带着QAT的思路。
3.3 两条路线对比与选择策略
| 维度 | PTQ | QAT |
|---|---|---|
| 耗时 | 几十秒到几十分钟 | 数小时到数天 |
| 数据需求 | 128~512条无标注数据 | 需要训练数据和损失函数 |
| 精度上限 | 中高,依赖算法 | 高,上限接近原始模型 |
| 成本 | 低 | 高 |
| 典型场景 | 快速部署、普适场景 | 精度敏感、端侧部署 |
我的建议是:能PTQ就PTQ,不要轻易上QAT。不少团队一上来就追求完美精度直接上QAT,结果训练资源花了一大堆,效果和基座模型加个AWQ差不多。先用PTQ把baseline打出来,再用校准集精细化调整,绝大多数问题在前面这一步就解决了。
4. 完整实操:从校准集到量化部署的全流程
4.1 环境准备与工具选型
开始之前先明确依赖环境:Python >= 3.8,CUDA >= 11.8,PyTorch >= 2.0。推理框架和量化工具按场景来选。
主流量化工具链有这几类:
- 轻量级封装工具:适用于Transformer类模型,支持GPTQ和AWQ算法,能导出量化权重,配合主流推理框架使用。
- 框架级工具:比如TensorRT-LLM,把量化权重优化和推理引擎打包在一起,适合生产级部署,但学习曲线陡。
- 专门针对真实推理服务的引擎:以vLLM为例,支持AWQ/GPTQ格式的模型直接加载运行,做批量推理时吞吐优化最好。
个人项目或快速验证阶段,直接走“轻量级封装工具(量化)→ vLLM(推理)”这条链路最省事;生产环境追求极致性能再用TensorRT-LLM这类重型方案。
4.2 校准集准备与预处理
校准集是整个PTQ流程中最容易忽视但影响最大的因素。要求是:从目标场景的真实数据里抽出来。
假设要部署一个用于企业内部知识库问答对话的模型:
- 从知识库文档、真实问答日志里随机抽取语料,覆盖不同业务方向。比如销售、售后、技术文档各100条。
- 清洗数据:去掉重复、过长或过短的异常样本,避免低质量文本干扰数值分布统计。
- 数量不必贪多,256条足够,关键是代表性。我见过有人拿5000条去校准,结果分布被长尾数据带偏,效果反而不如256条均衡的数据。
校准集准备好后,要与手头其他测试集严格区分开。校准集是“训练时用的”,绝对不能混进后续评估精度的测试集,否则精度数字会虚假偏高,上线就现原形。
4.3 量化执行流程
校准集准备完,量化主流程可以分为四个步骤。
第一步,加载预训练模型权重,先跑一遍FP16推理得到精度基线。这一步的主要作用是:后续量化后精度可以和这个基线对比,判断掉点是否可接受。
第二步,调用量化工具的API执行PTQ。以AWQ为例,核心操作是指定权重位宽(比如4bit)、group size(比如128)、校准集和量化算法。执行过程中工具会自动完成:校准激活分布 → 计算量化参数 → 逐层量化权重 → 生成量化模型。生成结果通常是打包好的量化权重文件。
第三步,用量化模型跑推理,对比基线的结果。对比维度通常有两个:
- 客观指标:困惑度(PPL)、BLEU分、下游任务准确率。用模型自己原始的分词器脚本去算PPL,这个方法最省事。
- 主观抽查:抽10到20条典型prompt,人工看输出质量,主要防的是指标持平但生成内容出现隐蔽退化。
第四步,把量化模型接入推理引擎,做性能和压力测试。看三件事:显存占用是否降了、吞吐是否升了、长序列下是否稳定(有无NaN、有无回答中断)。
4.4 精度评估的两种量化指标
精度评估环节有三个常用表格:
表格1:PPL对比(以某对话模型为例)
| 配置 | 校准集验证PPL | 效果 |
|---|---|---|
| FP16基线 | 8.53 | 参考基准 |
| INT8 W8A8 | 8.61 | 掉点0.1,可忽略 |
| W4A16 (AWQ) | 8.79 | 掉点0.26,可接受 |
| W4A16 (RTN) | 12.30 | 掉点严重,不可用 |
RTN在4bit下崩得厉害,这个结果一点不意外——没有二阶误差补偿的朴素舍入,在极低比特下撑不住。
表格2:下游任务准确率对比
| 配置 | 代码生成Pass@1 | 数学推理准确率 | 通用问答BLEU |
|---|---|---|---|
| FP16基线 | 0.412 | 0.318 | 0.235 |
| W8A8 | 0.408 | 0.314 | 0.234 |
| W4A16 (AWQ) | 0.371 | 0.289 | 0.225 |
可以看到,代码生成和数学推理这类任务对精度更敏感,4bit量化掉点幅度明显比通用问答大。如果产品以代码能力为卖点,量化方案要谨慎再加验证。
4.5 推理部署实测记录
一组来自某13B模型的真实数据(单张中高端GPU):
| 指标 | FP16 | W8A8 | W4A16 |
|---|---|---|---|
| 模型显存占用 | 26GB | 13GB | 7GB |
| 推理吞吐 (tokens/s) | 21 | 39 | 31 |
| 首token延迟 | 0.8s | 0.5s | 0.6s |
这里有个反直觉的点:4bit的显存节省比8bit多一倍,吞吐却不如8bit。原因在于当前推理引擎的4bit算子实现,权重反量化的开销大,带宽节省被计算瓶颈抵消了。显存瓶颈大于计算瓶颈的场景选W4A16,计算吞吐优先的场景选W8A8。
5. 常见问题与排查技巧实录
5.1 量化后精度暴跌,先查这三个环节
如果你量化后PPL涨了10以上或者输出明显胡言乱语,按顺序排查:
第一查校准集。最常见的坑。校准集和实际推理数据分布差异过大,模型在真实输入上的激活统计完全超出量化范围,精度必然崩。解决办法是重新按场景采集校准集。
第二查校准集数量。少于64条时统计不稳定,跑出来的scale方差大,换一组数据就变。建议至少128条,用256条更稳。
第三查量化参数配置。确认group size设置是否合理。group size从128降到32通常能带来可感知的精度提升,但显存占用会增加。如果你的模型对精度很敏感,试试group size=32,成本不高但见效快。
5.2 推理输出出现NaN,大概率是溢出
量化推理时输出NaN,多半是计算中途溢出了。低比特整数乘法累加时,INT8累加结果可能超过INT16乃至INT32范围。先检查推理框架的累加类型是否足够宽(INT32是底线),再确认离线转换时是否处理了极端离群值。激活值里如果有极端大数且校准用的MinMax策略,那scale会被拉得很大,量化后小数值通道全部归零,反推回来误差可能直接溢出。
解决建议:校准策略从MinMax换成Percentile 99.99或MSE;如果还有问题,给激活加SmoothQuant或改为W8A16混合精度方案。
5.3 量化后推理速度反而更慢
这个现象我遇到不止一次。速度慢的原因大概率不在量化本身,而在推理框架没有生效的核心算子里。常见原因:
- 模型的量化权重格式和推理框架期望的格式不一致,导致被迫走反量化回FP16的算子路径。
- 显存没有成为瓶颈时,模型规模小到量化算子的融合优化并不能体现优势,INT8的延迟反而可能略高于FP16。
- GPU型号太老,缺乏低精度张量核心加速。
排查方法:直接看推理日志中算子级的性能统计,如果量化算子没有生效,会在日志里看到大量反量化(DeQuantize)节点,针对性修正格式即可。
5.4 显存没降下来
显存没有下降,最可能是权重没有真正落盘为低精度。有些导出流程会把原始FP16权重也保留一份在状态字典里用来做反量化或校验,导致显存压缩了大半的预想落空。检查加载日志里的权重张量类型,或者用状态字典看一眼实际存储的dtype是不是INT4/INT8。
还有一种情况:KV Cache没有量化,随着序列变长,显存占用被KV Cache主导,权重省下来的空间被吞掉了。简单估算一下:KV Cache和权重在长上下文场景下的显存占比能达到1比1甚至更高。这时候需要上KV Cache INT8量化,能把KV部分显存砍掉一半,长上下文吞吐直接受益。
6. 量化方案扩展:KV Cache量化与未来方向
6.1 KV Cache量化:长上下文的显存救星
KV Cache是解码阶段保存历史Key和Value的缓存,随着生成长度线性增长。显存不够用的时候,KV Cache往往是第一杀手,尤其在长文档处理场景。KV Cache量化的做法是把缓存中的Key和Value从FP16压到INT8甚至INT4,计算时按需反量化。
KV Cache量化有两大收益:一是显存占用直接减半甚至75%,相同显存能支持的上下文长度大幅提升;二是减少KV Cache的显存带宽开销,长序列吞吐明显提高。代价是缓存精度降低,极长序列下早期token的Key/Value误差可能累积,导致注意力分布漂移。实际项目里,KV Cache INT8是相对安全的选择,INT4则要重点验证长文本任务的表现。
6.2 量化与微调的联动:QLoRA的思路
如果量化后的模型仍然有精度短板,一条被验证的路径是量化感知微调。原理是:对量化后的模型做参数高效微调,只更新少量适配器参数,但训练过程中保持低精度权重不变,模型学会在受限精度下尽可能保留能力。这种做法对资源要求低,在消费级显卡上微调7B模型也能跑,兼顾量化效率和任务适配。如果手头任务和基座模型原本的能力分布有明显偏移,优先考虑量化前先做少量指令微调,效果往往比量化后反复调参更直接。
6.3 未来:更细粒度的硬件协同量化
低精度量化的进化方向不只是继续压低比特数,而是与硬件特性做更细粒度的协同。不同硬件支持不同的指令和格式,scale的存放位置、算子融合策略、内存排布都会影响实际性能。离线量化工具链正在向硬件感知和自动化搜索方向演进:给定模型和硬件目标,自动选择最优位宽、粒度和算子实现组合。这种方向对工程落地意义很大,因为人工手调每种硬件组合的成本实在是太高了。
7. 量化工具链速查:环境配置与踩坑记录
7.1 当前主流量化工具对比
| 工具 | 支持算法 | 支持格式 | 推理对接 | 适合场景 |
|---|---|---|---|---|
| 轻量级封装A | GPTQ | 4bit/8bit | vLLM及衍生框架 | 快速实验、个人验证 |
| 轻量级封装B | AWQ | 4bit | vLLM及衍生框架 | 追求速度与精度平衡 |
| 重型推理框架A | GPTQ/AWQ/SmoothQuant/FP8 | 4bit/8bit/FP8 | 自包含 | 生产环境极致性能 |
| 训练框架集成 | QLoRA/QAT | 4bit NF4 | 可转推理 | 微调+量化联动 |
工具的效率差异在规模小时感受不明显,模型一旦上到几十B参数,转换速度、显存峰值、算子兼容性差距就会拉开。建议以推理框架为准来选量化工具:先用轻量级工具快速验证精度达标,再决定要不要在重型框架里重新做一遍量化。
7.2 离线量化的典型坑
离线量化时最容易踩的是数据格式兼容性的坑。同一份量化权重,在某一框架里跑得好好的,换一个推理引擎就各种报错,因为目前不存在一个真正意义上全生态通用的量化权重标准。规避办法:选定主力推理引擎后,量化流程完全跟着它推荐的链路走,别混搭。还有其他惯犯:
- group size不一致:量化时用128,推理引擎默认配置是32,加载时不匹配直接崩溃或性能退化。检查配置,显式指定。
- 符号位处理不一致:某些工具用INT4的-8到7,某些用0到15的UINT4表示,搞混模型就全乱了。
- 模型结构算子不支持:量化遇到了工具没覆盖的自定义结构,最常见的表现是某些子模块自动跳过量化,精度异常但没报错。量化后务必做一次全模型dtype检查。
7.3 从量化到上线的最低检查清单
量化权重到手后,上线前建议按这份清单过一遍:
- 确认权重加载时所有目标模块都已实际转为低精度类型(进日志看dtype)。
- 在独立测试集上跑PPL和下游任务指标,和FP16基线对比,记录掉点幅度。
- 随机抽一批真实业务prompt做人工质量检查,覆盖长文本、多轮对话、极端输入。
- 用目标硬件跑压力测试,确认长序列下无NaN、无崩溃、显存水位安全。
- 确认量化版本和FP16版本的推理框架配置一致,避免精度问题夹杂版本差异干扰排查。
这套检查做完,量化模型上线才算有基本保障。
8. 关于量化精度与性能的另一组实测经验
从几张表里挑几个容易误判的点单独拎出来说。
第一,PPL低不等于任务表现好。某个模型PPL只涨了0.2,但代码生成Pass@1掉了8个百分点。PPL衡量的是整体概率分布的拟合程度,而代码生成这类任务对关键token极其敏感,个别token概率塌了,整段代码就废了。评估量化效果务必结合任务级指标,不要只看PPL。
第二,量化后模型的上下文能力会变化。长上下文任务对量化更敏感,因为长序列中的注意力分布更分散,早期token的微小量化误差会在注意力加权中持续累积。实测某个13B模型4bit量化后,8K上下文内的摘要任务表现稳定,但16K+上下文的长文档问答,关键信息召回率掉了一截。推理框架的KV Cache量化实现水平对这种长文本场景影响极大。
第三,不同基座模型对量化的耐受度天差地别。责任不完全在算法,基座模型的训练质量和数值分布形态很关键。分布干净、离群值少、训练充分的基座模型,4bit量化后几乎无损;底层训练不充分的模型,量化后掉点非常猛。我一般先跑一版int4的快速基线,如果掉点无法接受,先怀疑基座模型本身的质量,再考虑提升量化精度。
我个人的体会是,量化应该当作一个系统性问题来看,而不是独立的压缩步骤。算法选择、校准集、推理引擎、硬件能力、任务类型,几个变量搅在一起,最后呈现出来的精度和性能是它们互相影响的结果。动手之前,先明确你的约束是什么:显存不够,还是吞吐不够,还是精度敏感场景?这个判断能帮你快速收敛到正确的量化方案,而不是在工具和参数里来回试错。
如果你现在正准备部署一个大模型,预算有限、又希望尽可能单卡运行,我给的建议是:先跑FP16基线,再上W4A16 AWQ,精度满意就收工。如果不满意,把group size调小、校准集精调一遍,还不行,升级到W8A8或者FP8,最后才考虑QAT。这套路线省时省力,踩过的坑都在前面的章节里了,照单抓药即可。