专题深读 · 2026-10-19 · 进阶
量化与 KV 缓存:让模型轻量运行的两条路径
LLM 推理的瓶颈往往在内存而非计算,而这部分内存消耗来自两处:模型权重和 KV 缓存。量化通过降低数值精度同时缩减这两处,PagedAttention 等内存管理技术则堵住 KV 缓存中浪费的空间。
观看与收听
- 运行 LLM 时,GPU 内存分别被权重和 KV 缓存占用,因此要让模型变轻,就需要分别处理这两处。
- GPTQ 利用二阶信息弥补舍入误差,把 175B 模型压缩到 3~4 位;AWQ 则通过观察激活值来保护重要的 1% 通道。
- PagedAttention 像操作系统的分页一样按块管理 KV 缓存,几乎消除了浪费,并在相同延迟下将吞吐量提高 2~4 倍。
- 近期研究关注的不再是“压缩到几位”,而是“把既定的比特预算分配到哪里”。KV 缓存通道、层与 token、MoE 各专家之间的分配就是例子。
- 量化带来的收益会因硬件支持、校准数据和评测指标而大幅变化,因此不能把论文中的数值直接当作自己服务的性能。
为什么需要:内存比计算先耗尽
运行大语言模型(LLM)时,最先碰到的墙往往不是运算速度,而是内存。GPTQ(paper)论文指出,GPT3-175B 的参数即使只以 16 位浮点(FP16)存储,也要占用 326GB。这比最大的单张 GPU 的显存(VRAM)还大,因此即便只是推理,也需要把多张 GPU 组合起来,配置昂贵又复杂。
占用内存的不只是权重。模型逐个 token 生成文本时,为了避免重复计算,会把为之前每个 token 算好的键(Key)和值(Value)向量保存下来。这个存储区就是 KV 缓存。对话越长、同时处理的请求越多,KV 缓存也随之变大。PagedAttention(paper)论文解释说,每个请求的 KV 缓存都非常大,而且在生成过程中会时增时减,如果管理不当,碎片化(零散的空闲空间)和重复拷贝会造成大量内存浪费,能一次批量处理的请求数(批大小)也会相应减少。
因此,要让“模型变轻”,需要回答两个问题:如何把权重存得更小,以及如何把 KV 缓存存得更小且不浪费。前一个问题主要靠量化回答,后一个问题则由量化和内存管理技术共同回答。
GPU 内存用在哪里
GPU 内存(示例)
模型权重KV 缓存碎片化与重复浪费
核心思想:记得粗一点,摆得紧一点
量化(Quantization)就是减少记录数字所用的位数。原本用 16 位记录的权重改用 4 位记录,同一个模型大约只需四分之一的空间。代价是可表示数值的刻度变得稀疏,把原值移到最近的刻度时会产生误差。量化研究的大部分内容,就是如何让这种舍入误差对模型质量的伤害更小。
打个比方,这类似于缩减搬家行李。量化相当于把厚重的精装书换成口袋本,缩小书本身的体积,同时要注意几本重要的书不能字迹模糊。PagedAttention 则是把书架分成固定大小的格子,书增多时随便放进任意空格,只用目录记住位置。不必为每本书预先整块空出一大片位置,因此剩下的空闲空间更少。
这两种方法不是相互替代,而是配合使用。量化权重后把省下的内存更多地让给 KV 缓存,再对 KV 缓存本身进行量化并按块管理,就能在同一张 GPU 上支持更长的上下文和更多的并发请求。
如何运作:权重侧与 KV 缓存侧
权重量化通常在训练完成的模型上一次性施加,这称为训练后量化(PTQ,Post-Training Quantization)。GPTQ(paper)解释说,在数十亿参数规模下重新训练模型的成本太高,因此只需少量数据和几小时计算即可完成的训练后方法对超大模型特别有吸引力。流程大致如下:① 把少量校准(calibration)数据输入模型,观察各层输入的形态。② 逐层把权重映射到低位刻度上。③ 调整其余数值或改变缩放比例,使映射产生的误差在层输出中体现得更少。④ 推理时,GPU 内核读取以低位存储的权重,并将其还原(反量化)后进行计算。
KV 缓存侧则与生成过程同步运转。在首次读取提示词的预填充(prefill)阶段,会生成所有输入 token 的键和值;之后在解码阶段,每生成一个 token,就有新的键和值追加到缓存中。PagedAttention(paper)不把缓存存为连续的大块,而是切分成小块存储,并用表记录每个请求使用了哪些块。因此空闲空间几乎没有浪费,共享相同提示词的请求之间还可以共用块。在此基础上,把 KV 缓存的值本身量化到 2 位左右的研究最近十分活跃。
需要注意的是,“存得小”与“算得快”并不是一回事。GPTQ 论文在局限部分说明,其加速来自更快地从内存读取压缩后的权重,而由于主流硬件不支持 FP16×INT4 这类混合精度乘法,乘法本身并没有变快。
发展脉络:GPTQ、AWQ、PagedAttention
GPTQ(paper)利用近似二阶信息(表示误差对输出影响有多敏感的信息),在对某个权重进行舍入时,用尚未量化的其他权重来弥补所产生的误差。据论文所述,在此之前应用于 175B 规模的只有舍入到最近刻度的简单方法(RTN),它在 8 位下尚可,但再往下压缩就无法保持精度。GPTQ 用约 4 个 GPU 小时将 175B 参数模型压缩到 3~4 位,同时把精度损失控制在较小范围,并首次在单张 A100 上运行了 175B 模型。论文报告,相比 FP16,端到端速度在 A100 上提升约 3.25 倍,在 A6000 上提升约 4.5 倍。
AWQ(paper)的出发点是“并非所有权重都同等重要”这一观察。保护占总量 0.1~1% 的重要(salient)权重,就能大幅减少量化误差;其核心在于,寻找这些重要通道时应看的不是权重大小,而是激活值(流入该通道的输入信号)的分布。在把 OPT-6.7B 压缩到 3 位的实验中,仅把重要的 1% 保留为 FP16,困惑度(越低越好的语言模型指标)就从 43.2 改善到 13.0。不过混用精度在硬件上效率不高,因此 AWQ 选择了一种等价变换:预先放大(缩放)重要通道以降低相对误差。AWQ 论文指出 GPTQ 会对校准数据过拟合,在其他领域的数据上性能可能不稳定,并主张自己这种不依赖反向传播或重建的方法能更好地泛化到指令跟随模型和多模态模型。随之发布的推理框架 TinyChat 据称比 Hugging Face 的 FP16 实现快 3 倍以上。
PagedAttention(paper)针对的是同一时期的另一个瓶颈——KV 缓存。它借鉴操作系统的虚拟内存与分页,设计了一种注意力算法,并在其上构建了服务系统 vLLM。它把 KV 缓存的浪费降到接近零,并允许在请求内部和请求之间共享缓存,在相同延迟下比 FasterTransformer、Orca 等当时的系统吞吐量高 2~4 倍。序列越长、模型越大、解码方式越复杂,这一提升就越明显。
GPTQ 与 AWQ 的思路差异
GPTQ弥补误差
- 使用近似二阶信息
- 用剩余权重补偿舍入误差
- 被指出可能对校准集过拟合
AWQ保护重要之处
- 用激活值分布找出重要通道
- 放大通道以降低相对误差
- 无需反向传播或重建
공통 两者都是用少量校准数据、在训练后一次性施加的训练后量化
近期走向:有限的比特用在哪里
近期研究正在从“所有地方统一用几位”转向“在既定预算内把更多比特分给重要之处”的混合精度分配。AWQ 在权重上展示的“保护重要的一小部分”思路,正逐步扩展到 KV 缓存和 MoE(混合专家)模型。
PN-Mix(paper)的出发点是:生成长输出时,KV 缓存的内存和带宽成为严重瓶颈,而压缩到 2 位这样的低位会导致精度大幅下降。以往的混合精度键缓存方法只根据键的统计量挑选重要通道,PN-Mix 则表明,在 RoPE(旋转位置嵌入)的通道对层面,查询与键的范数(norm)乘积较大的通道对,其误差会显著扰动注意力分数。这些重要通道对只在预填充阶段挑选一次,并在整个解码过程中重复使用。论文报告,它以平均 2.26 位取得了与使用 2.32~2.39 位的已有方法相当或更好的精度,即使降到 1.5 位,性能也只是平缓下降。
MultiAlloc(paper)指出,在长上下文和复杂推理中,KV 缓存是内存的主要消耗者,并认为实际部署的难题与其说是压缩本身,不如说是如何把固定的内存预算分配给“提高各层精度”和“保留重要 token”这两种不同策略。它通过轻量的预先性能分析测量层敏感度和 token 重要性,事先确定分配策略,推理时不再另行搜索而直接套用。据称在 Mistral、Llama、DeepSeek-Qwen、QwQ 等模型上,它稳定优于相同内存预算下的已有方法。权重方面,NatScale(paper)处理的是 MoE 模型。MoE 每个 token 只使用部分专家,却必须存储所有专家的权重,因此把更多比特分给敏感专家的分配方式很重要。NatScale 认为仅凭专家排序无法确定各项误差应赋予多大权重,于是提出了校正权重的框架;在三个模型、九种设置下,它与原始模型之间的 KL 散度(输出分布差异)均低于五种分配基线。
局限与争议
第一,节省存储空间并不等于提速。正如 GPTQ(paper)所说明的,如果硬件不支持低位乘法,收益主要来自内存读取。AWQ(paper)之所以另外构建推理框架,也是因为要把理论上的内存节省转化为实测速度,还需要内核融合、权重打包等额外的工程工作。吞吐量(token/秒)和 TTFT(首个 token 耗时)需要在自己的 GPU 和推理引擎上亲自测量。
第二,校准数据与泛化的问题依然存在。AWQ 论文指出,误差补偿类方法可能对校准集过拟合。如果模型要用在公司内部文档或特定语言等与校准数据分布不同的场景,就不应只看通用基准分数来挑选量化模型,而应使用实际业务数据单独评估。
第三,衡量“什么是重要的”的标准尚未确定。PN-Mix(paper)揭示了仅凭键统计量衡量重要性的已有方法所遗漏的部分,NatScale(paper)则主张仅凭排序无法决定分配。也就是说,取什么作为重要性信号,会让相同比特预算下的结果不同。此外,不同指标可能得出不同结论。NatScale 的 KL 散度在九种设置中均为最低,但困惑度只在七种设置中最低。
第四,位数越低,风险越呈非线性增大。据 PN-Mix 论文,对比基线在 2.25 位以下性能急剧下降。位数压得越低,节省的幅度越小,质量崩溃的风险越大,因此在服务中,更稳妥的做法是先确认质量开始下滑的拐点,再留出充足余量。
延伸学习
如果是初学者,建议先读 GPTQ(paper)的引言和相关工作部分。其中清楚地梳理了为什么超大模型需要无需重新训练的训练后量化,以及 8 位与 3~4 位之间存在怎样的障碍。接着阅读 AWQ(paper)的引言和图 2,就能直观理解“用激活值找出重要的 1%”这一思路,并比较它与 GPTQ 走了哪条不同的路。
KV 缓存方面,先读 PagedAttention(paper)的摘要,以及正文中分析已有系统在哪里浪费内存的部分。理解了服务系统的吞吐量为何取决于内存管理,之后 KV 缓存量化研究为何出现也就自然清楚了。
若要跟进近期动向,可以依次阅读 PN-Mix(paper)了解 KV 缓存的通道级混合精度,MultiAlloc(paper)了解内存预算分配问题,NatScale(paper)了解 MoE 权重的比特分配。把这三篇论文放在“同一预算分配到哪里”这一个问题下阅读,各自的贡献会更加清晰。
相关术语
参考资料
奠基论文
- GPTQ: Accurate Post-Training Quantization for Generative Pre-trained Transformers (2022)
- AWQ: Activation-aware Weight Quantization for LLM Compression and Acceleration (2023)
- Efficient Memory Management for Large Language Model Serving with PagedAttention (2023)
最新研究
由 AI 根据所列参考资料撰写并经过审核。详情请查看原始资料。