Appearance
模型量化
> 这是一份面向阅读与复习的结构化笔记,重点不是罗列论文细节,而是建立:概念框架 → 方法地图 → 影响判断 → 选型思路。
相关文章
- 大模型量化概述
- 量化感知训练:
- 训练后量化:
1. 量化在解决什么问题
随着 Transformer、MoE 等架构推动模型规模持续增长,部署大模型时会同时遇到:
- 显存占用高
- 内存带宽压力大
- 推理延迟和吞吐受限
- 长文本场景下
KV Cache持续膨胀
量化的核心目标是:
> 用更低比特表示模型中的数值,在尽量少损失精度的前提下,降低存储与计算成本。
常见模型压缩路线有三类:
- 模型剪枝(Pruning)
- 知识蒸馏(Knowledge Distillation)
- 模型量化
2. 基本概念
2.1 什么是量化
模型量化是把权重、激活或缓存等数值,从高精度格式(如 FP32、FP16、BF16)转换到低精度格式(如 INT8、INT4、FP8、FP4)。
收益主要有三点:
- 模型更小
- 推理内存占用更低
- 某些硬件上推理更快
代价是:
- 数值表示更粗糙
- 会引入量化误差
- 可能损失模型精度与能力
2.2 量化粒度
量化粒度描述的是:多大一块数据共享一组量化参数。
per-tensor/per-layer:整个张量共享一组缩放因子per-channel:每个通道使用不同缩放因子per-token:通常用于激活,对每个 token 对应的一行单独量化per-group/group-wise:把通道或元素分组,每组共享量化参数
直觉上:
- 粒度越粗:实现更简单、开销更低,但精度通常更差
- 粒度越细:更贴合真实分布,但实现更复杂、元数据更多、未必最硬件友好
例如:
GPTQ、AWQ常见group-wise,例如g128- 激活常见
per-token - 权重常见
per-channel或group-wise
2.3 量化对象
Weight
最常见的量化对象。
特点:
- 训练结束后固定
- 不随输入变化
- 可以离线量化
- 通常是最容易量化的一类
Activation
中间激活值通常比权重更难量化。
原因:
- 随输入变化
- 分布不稳定
- 常出现离群值(outlier)
但激活又很重要,因为:
- 它可能是推理过程中的主要内存开销之一
- 结合权重量化,才更容易真正利用低精度算子提速
KV Cache
在自回归生成中,Key / Value 缓存会随着上下文增长持续变大。
所以:
- 短文本下它可能不是第一问题
- 长文本下它往往是部署瓶颈之一
Gradient
更多出现在训练场景,主要用于减少分布式训练中的通信与反向传播开销。本文重点不在这一部分。
2.4 静态量化 vs 动态量化
这组概念回答的是:量化参数是在运行前固定,还是运行时现算。
静态量化
- 通过校准集提前估计量化参数
- 推理时直接使用固定参数
优点:
- 推理效率高
- 更容易做高效 kernel
缺点:
- 如果真实输入分布变化大,误差可能明显上升
动态量化
- 在每次前向传播时,根据当前输入动态计算量化参数
优点:
- 更贴合当前输入分布
- 精度通常更稳
缺点:
- 运行时开销更高
对于 LLM,激活分布波动通常较大,因此激活动态量化常常更有意义。
2.5 离线量化 vs 在线量化
这组概念回答的是:量化动作发生在部署前,还是运行时。
离线量化:模型上线前完成量化在线量化:模型运行时实时量化
要注意,它和静态/动态不是同一个维度:
- 静态/动态:参数怎么得到
- 离线/在线:量化何时发生
例如:
离线静态量化:部署前用校准集确定参数离线动态量化:权重预先量化,激活运行时动态量化在线动态量化:运行时实时计算量化参数并量化
2.6 线性量化 vs 非线性量化
线性量化
把浮点数按等间距刻度映射到低比特表示。
特点:
- 简单
- 工程实现成熟
- 最常见
非线性量化
根据数据分布做更灵活的映射,不一定等间距。
特点:
- 理论上更贴合分布
- 可能带来更低误差
- 但计算和实现复杂度更高
工业界大量方案仍以线性量化为主。
2.7 对称量化 vs 非对称量化
对称量化:零点为0非对称量化:零点不为0
一般来说:
- 对称量化更简单、更容易做高效推理
- 非对称量化更贴合真实分布,精度潜力更高
2.8 常见记号

量化对象记号
W:WeightA:ActivationKV:KV Cache
位宽记号
W4A16:权重 4bit,激活 16bitW8A8:权重 8bit,激活 8bitW4A8:权重 4bit,激活 8bitW4A4:权重 4bit,激活 4bitKV8/KV4/KV2:KV Cache 的位宽
直觉理解:
W4A16:更像“只压权重”W8A8:更像“权重和激活一起压”W4A4:非常激进,风险通常更高
2.9 按量化阶段分类
QAT(Quantization Aware Training)
训练时就把量化误差纳入进来,让模型提前适应低比特表示。
QAF(Quantization-Aware Fine-tuning)
在微调阶段引入量化感知。
PTQ(Post Training Quantization)
训练完成后再做量化,是最常见、最易部署的路线。
3. 方法地图
可以先不要按论文顺序记,而是按“解决什么问题”来记。
3.1 基线
RTN
3.2 激活难量化怎么办
LLM.int8()SmoothQuantZeroQuantZeroQuant-FP
3.3 仅权重量化怎么保精度
GPTQAWQSpQRFP6-LLM
3.4 训练/微调时纳入量化
LLM-QATQLoRA
3.5 KV Cache 如何量化或修补
KIVIIntactKVKVQuant
3.6 超低比特 / 组合型方案
AtomQuaRotQoQZeroQuant-V2
4. 主流方法精要
4.1 RTN
关键词:直接量化、四舍五入、基线方法
RTN(Round to Nearest)是最朴素的量化方法,直接把值映射到最近的低比特格点。
优点:
- 简单
- 快
- 实现成本低
问题:
- 不专门处理离群值
- 在 LLM 上往往精度下降明显
一句话:
> RTN 是基线方法,重要性在于“简单”,不足在于“对离群值不友好”。
4.2 LLM-QAT
关键词:训练时适应量化、保留异常值、W/A/KV 联合考虑
LLM-QAT 的核心是:
- 训练阶段就引入伪量化算子
- 让模型在训练中适应量化误差
- 而不是训练结束后再硬压缩
文章中的关键点:
- 权重和激活都存在异常值
- 不建议粗暴裁剪异常值
- 权重采用逐通道量化
- 激活与 KV 采用逐 token 量化
一句话:
> QAT 是“提前适应量化”,不是“事后修补量化”。
4.3 QLoRA
关键词:低成本微调、4bit 底座模型、LoRA、NF4、双量化
QLoRA 的重点不是推理加速,而是:
- 把底座模型压成 4bit
- 冻结底座
- 只训练少量
LoRA参数
几个关键设计:
NF4:更适合权重分布的 4bit 数据类型双量化:进一步压缩量化元数据分页优化器:缓解微调时的显存峰值问题
一句话:
> QLoRA 的本质是“量化底座 + LoRA 微调”,核心目标是降低微调成本。
4.4 LLM.int8()
关键词:W8A8、混合精度、离群值分流
LLM.int8() 不是简单地把所有东西都压成 INT8,而是:
- 大部分值走
INT8 - 少量离群维度保留
FP16 - 最后把两部分结果合并
它的意义在于明确指出:
> 激活中的离群值是量化难点,不能一刀切。
不足:
- 混合精度路径较复杂
- 不一定是最理想的高性能工程方案
4.5 GPTQ
关键词:W4A16、误差最小化、边量化边补偿
GPTQ 是最典型的 weight-only PTQ 方法之一。
核心思想:
- 量化权重时,不只看权重值本身
- 还关心量化后层输出会偏多少
- 通过调整剩余未量化参数来补偿误差
特点:
- 常见形态为
W4A16 - 需要校准数据
- 精度通常较稳
一句话:
> GPTQ 是把权重量化视为“输出误差最小化问题”。
4.6 SmoothQuant
关键词:W8A8、激活难度转移、硬件友好
SmoothQuant 关注的是:
- 权重相对容易量化
- 激活由于离群值很难量化
所以它做了一件很巧妙的事:
- 用平滑因子对激活做逐通道缩放
- 同时对权重做数学上等价的反向缩放
- 把激活的量化难度部分转移给权重
结果:
- 激活更容易量化
- 又不至于牺牲太多硬件效率
一句话:
> SmoothQuant 不是分流离群值,而是通过等价变换把激活的难题转移给权重。
4.7 AWQ
关键词:W4A16、激活感知、保护关键权重
AWQ 的起点是:
> 不是所有权重都同样重要。
它虽然做的是权重量化,但判断权重是否重要时,会利用激活分布信息。
核心做法:
- 识别对输出更关键的通道
- 通过缩放优先保护这些通道
- 在低比特下减少关键权重的相对误差
一句话:
> AWQ 是“用激活信息识别重要权重,并优先保护它们”。
4.8 SpQR
关键词:仅权重量化、隔离异常权重、双层量化
SpQR 的核心思路是:
- 把量化后误差特别大的异常权重隔离出来,保留高精度
- 其余大部分权重用极低比特存储
- 甚至继续压缩量化元数据本身
一句话:
> SpQR 是把少量高敏感异常权重稀疏保存,其余部分低比特编码。
4.9 ZeroQuant
关键词:W8A8、分组权重量化、逐 token 动态激活量化、kernel 融合
ZeroQuant 更偏工程系统路线。
特点:
- 权重做分组量化
- 激活做逐 token 动态量化
- 用 kernel 融合降低量化/反量化的数据搬运开销
一句话:
> ZeroQuant 是把 W8A8 做成更工程可落地的动态激活量化方案。
4.10 ZeroQuant-V2
关键词:低秩补偿、外挂误差修复层
ZeroQuant-V2 在 ZeroQuant 的基础上引入 LoRC:
- 用两个低秩矩阵近似量化误差
- 拿少量新增参数换更好的精度恢复
代价:
- 额外参数会拖累推理性能
一句话:
> ZeroQuant-V2 是给量化模型外挂一个轻量误差补偿模块。
4.11 ZeroQuant-FP
关键词:W4A8、FP4、FP8、面向新硬件
它的关键判断是:
- 对 LLM 而言,
FP8激活往往优于INT8 FP4权重与INT4竞争力相近- 在支持低精度浮点的新硬件上,走
FP4/FP8路线更自然
一句话:
> ZeroQuant-FP 是从 INT 路线转向 FP 路线的工程化方案。
4.12 FP6-LLM(W6A16)
关键词:W6A16、不规则位宽、系统实现
FP6-LLM 不是单纯强调“6bit 更好”,而是在解决:
FP6这类不规则位宽如何高效在 GPU 上跑起来
它的贡献主要在系统侧:
- 数据排布
- 反量化执行
- Tensor Core / SIMT 协同
- 流水线调度
一句话:
> FP6-LLM 的重点是“把 W6A16 真正做成可高效部署的系统方案”。
4.13 KIVI
关键词:KV2、K/V 分开处理、流式场景
KIVI 最重要的发现是:
Key更适合逐通道量化Value更适合逐 token 量化
它还考虑了流式生成中的实现问题:
V可以很自然地 token-by-token 追加K的逐通道量化需要跨 token 统计,因此更麻烦
所以它采用:
- 分组部分量化
- 余留部分暂时保留全精度
一句话:
> KIVI 的贡献是告诉我们:K 和 V 不该默认用同一种量化策略。
4.14 IntactKV
关键词:关键前缀 KV 无损、公共前缀复用
IntactKV 的思路不是继续压缩所有 KV,而是:
- 先用全精度模型生成公共前缀或关键词元对应的高质量 KV
- 再让量化模型直接复用这段无损缓存
这相当于:
- 保住最敏感的前缀部分
- 减少量化误差向后扩散
一句话:
> IntactKV 是“保住关键前缀 KV 不量化”,而不是继续硬压所有 KV。
4.15 KVQuant
关键词:系统化 KV 量化工程、RoPE 前量化、Attention Sink
KVQuant 可以看作比 KIVI 更系统的 KV Cache 量化路线。
它综合做了:
Key的逐通道量化RoPE前量化- 非均匀量化
- 异常值隔离
Attention Sink感知保护- 离线 / 在线缩放因子的联合设计
一句话:
> KVQuant 是把 KV Cache 量化从单点技巧推进到系统工程方案。
4.16 Atom
关键词:W4A4KV4、组合拳、异常值单独照顾
Atom 的目标非常激进:
W4A4KV4
为了保精度,它叠加了多种技巧:
- 混合精度
- 通道重排序
- 细粒度分组量化
- 动态量化
- GPTQ 风格的离线权重量化
- 对异常值使用
INT8 - KV 侧低比特量化
一句话:
> Atom 是在超低比特目标下,用多种工程手段联合兜底的方案。
4.17 QuaRot
关键词:W4A4KV4、旋转变换、重塑分布
QuaRot 的思路很有代表性:
- 与其追着异常值修补
- 不如先通过旋转变换把异常值打散
- 把表示分布重塑成更容易量化的形式
然后再结合现有权重量化 / 激活量化方案完成低比特部署。
一句话:
> QuaRot 是“先改变表示分布,再做低比特量化”。
4.18 QoQ
关键词:W4A8KV4、组合型方案、渐进量化
QoQ 的目标是:
W4A8KV4
它不是依赖单一技巧,而是组合了多种思路:
- 渐进式分组量化
SmoothAttention- 模块旋转
- 输出平滑
- 激活感知通道重排序
- 权重裁剪
一句话:
> QoQ 是在 W4A8KV4 目标下,把多种量化优化组合起来的工程化方案。
5. 关键对比
5.1 LLM.int8() vs SmoothQuant
LLM.int8():把离群值分流出来,用高精度单独处理SmoothQuant:不单独分流,而是把激活的量化难度转移给权重
5.2 GPTQ vs AWQ
GPTQ:把量化视作误差最小化问题,边量化边补偿AWQ:利用激活分布识别关键权重,并优先保护它们
5.3 QAT vs PTQ
QAT:训练时就适应量化PTQ:训练后再量化
5.4 QAT vs QLoRA
QAT:让模型整体适应低比特表示QLoRA:把底座模型量化后,只训练少量 LoRA 参数做低成本微调
5.5 KIVI vs KVQuant
KIVI:强调K/V不同粒度与流式可实现性KVQuant:更系统地处理 KV 量化中的分布、RoPE、Attention Sink 与在线/离线问题
5.6 Atom vs QuaRot
Atom:不改底层表示,靠多种技巧联合保精度QuaRot:先通过旋转变换重塑分布,再量化
6. 量化对模型的影响
6.1 对精度的影响
几个重要结论:
- 大模型对
weight-only和KV Cache量化通常更耐受 - 但大模型不一定更耐受
W + A联合量化 - 小模型更怕激进低比特,尤其是
W4 / W3 / W2 W4A8往往还能接受,W4A4风险明显更高W2、KV2通常已经属于很激进的研究区间
6.2 对不同能力的影响
基础 NLP 能力
多数普通语言任务对中等量化相对耐受:
W4W4A8KV4W8KV4
通常仍可保持不错性能。
涌现能力
量化容忍度从高到低大致是:
- 上下文学习 ≈ 指令跟随
- 多步推理 ≈ 自我校准
尤其:
- 数学推理通常比常识推理更怕量化
对话能力
过激进量化常见症状:
- 重复输出
- 无意义符号
- 随机词语
- 逻辑不连贯
长文本能力
长文本下通常更怕 KV Cache 量化过狠,因为:
- KV 占用更大
- 误差会沿上下文累积
- 注意力历史依赖更强
6.3 对推理性能的影响
Weight-only 量化
优点:
- 常能显著改善
decoding阶段延迟
局限:
prefill阶段不一定更快,甚至可能更慢- 随着 batch 增大、输入变长,其优势会下降
适用趋势
- 小 batch:
weight-only往往很有效 - 大 batch:更需要考虑
W + A联合量化与低精度 kernel - 大模型:更容易从
weight-only中受益
7. 选型思路
7.1 小 batch、低延迟场景
特点:
- 通常更受内存带宽限制
- 权重读取成本高
优先考虑:
W4A16AWQGPTQFP6-LLM
一句话:
> 小 batch 先看权重量化。
7.2 大 batch、高吞吐场景
特点:
- 不只是内存带宽,计算密度也很关键
优先考虑:
FP8W8A8SmoothQuantINT4-FP8 AWQ
一句话:
> 大 batch 更适合权重 + 激活联合量化。
7.3 长文本场景
特点:
KV Cache很可能成为主要瓶颈
优先考虑:
- 谨慎选择
KV4 / KV2 - 长文本里常需要比短文本更保守的 KV 位宽
- 可关注
KIVI、KVQuant、IntactKV
一句话:
> 长文本场景里,KV Cache 是一等公民。
7.4 强推理 / 数学 / 自校准场景
特点:
- 更依赖中间推理过程稳定性
建议:
- 避免过激进位宽
- 尤其谨慎
W4A4、W2、KV2
一句话:
> 越依赖复杂推理,越要保守量化。
8. 一页版总结
8.1 核心概念
- 量化对象:
W / A / KV - 量化粒度:
per-tensor / per-channel / per-token / group-wise - 阶段分类:
QAT / QAF / PTQ - 常见记号:
W4A16、W8A8、KV4
8.2 方法主线
RTN:直接量化基线LLM.int8():分流离群值SmoothQuant:激活难度转移到权重GPTQ:误差补偿AWQ:保护关键权重QAT:训练时适应量化QLoRA:低成本量化微调KIVI / KVQuant / IntactKV:KV Cache 量化与修补Atom / QuaRot / QoQ:更激进低比特的组合路线
8.3 选型口诀
text
小 batch 看权重,
大 batch 看 W+A,
长文本盯 KV,
强推理要保守。
评论区