PM-KVQ: Progressive Mixed-precision KV Cache Quantization for Long-CoT LLMs
PM-KVQ 把“时间轴上逐步降位宽 + 结构轴上按敏感度分配混合精度 + 校准轴上用位置插值补足短序列”三招揉成一套后训练量化流程,让 32 K-token 级 Long-CoT 推理所需 KV Cache 压缩到 2–4 bit,同时在数学、编程推理基准上比同等显存预算的最佳公开方法再高 6–8 p.p. 精度。下面按设计细节逐层展开。
1 整体框架
PM-KVQ 在 离线阶段 先用短序列校准求出各 block 的敏感度并解整数规划获得 bit-width 配置;在线阶段 先用高位宽写 KV,待显存占满后整体“等价右移”逐步降位宽。流程如 Figure 1(论文原图)所示 (nicsefc.ee.tsinghua.edu.cn)。
2 逐步降位宽(Progressive Quantization)
2.1 为什么逐步?
直接把每个新 token 立刻量到 2 bit 会在数万步推理时累积误差,Long-CoT 中表现骤降;而高位宽→低位宽的 阶段式收缩 可把误差滞后到显存真的吃紧时再付出 (nicsefc.ee.tsinghua.edu.cn)。
2.2 “等价右移”算法
目标:把 2b-bit 张量 X2bX_{2b} 在线地变成 b-bit XbX_b 而不解码。
等式(论文式 3)
Xb=(22b−2b+1)(X2b+2b−1)23bX_b=\frac{(2^{2b}-2^{b}+1)\bigl(X_{2b}+2^{b-1}\bigr)}{2^{3b}}
可用一次整数加法 + 右移实现,无需访存重量化 (nicsefc.ee.tsinghua.edu.cn)。
实验:在 DeepSeek-8B 4→2 bit 缩减上,“等价右移”比直接右移提升 pass@1 +26 p.p.,比改进右移也高 +9 p.p.(表 3) (nicsefc.ee.tsinghua.edu.cn)。
3 Block-wise Memory Allocation
3.1 一阶泰勒敏感度
对第 i 个 Transformer block 求
si,b=∣∣∇KiL⊙(Ki−Qb(Ki))∣∣1s_{i,b}=||\nabla_{K_i}\mathcal L\odot(K_i-Q_b(K_i))||_1
衡量把 KV 量到 b bit 会带来多大损失 (nicsefc.ee.tsinghua.edu.cn)。
3.2 整数规划求最优 bit-map
minxi,b ∑i=1N∑b∈Bxi,b si,bs.t. ∑bxi,b=1, ∑i,bxi,bMem(Qb(Ki,Vi))≤M,xi,b∈{0,1}\begin{aligned} \min_{x_{i,b}}\;&\sum_{i=1}^N\sum_{b\in B}x_{i,b}\,s_{i,b}\\ \text{s.t. }&\sum_{b}x_{i,b}=1,\; \sum_{i,b}x_{i,b}{\rm Mem}(Q_b(K_i,V_i))\le M,\\ &x_{i,b}\in\{0,1\} \end{aligned}
N 是 block 数、B={16,8,4,2}B=\{16,8,4,2\},用 CVXPY 的 MIP 求解数秒内完成 (nicsefc.ee.tsinghua.edu.cn, cvxpy.org)。
结果:当显存不足以“全 4 bit”但又浪费于“全 2 bit”时,混合方案把最敏感 block 留给 4 bit,其余降到 2 bit,可在同显存下再提 +4 p.p. 精度 (nicsefc.ee.tsinghua.edu.cn)。
4 位置插值校准
4.1 RoPE 低频失配
RoPE 的最低频通道周期可达 >54 K,传统 2 K-token 校准覆盖不到峰-谷,scale 估计失真 (nicsefc.ee.tsinghua.edu.cn)。
4.2 插值技术
把短序列位置索引放大 p′=αpp'=\alpha p(默认 α=4\alpha=4)——不增加计算却让 2 048 token 样本“映射”到 8 192 token 位置空间,完整覆盖低频分布 (nicsefc.ee.tsinghua.edu.cn)。
Ablation:在 DeepSeek-8B 上 2 048 token + α=4\alpha=4 的校准精度≈真实 8 192 token 校准;α=16\alpha=16 过大反而失配(表 4) (nicsefc.ee.tsinghua.edu.cn)。
5 综合算法流水
# 离线(一次性)
sens = taylor_sensitivity(calib_data) # 每 block
bit_map = solve_MIP(sens, mem_budget) # CVXPY
scales,zeros = calibrate_with_PI(data=2k, alpha=4) # per-channel
# 在线(解码循环)
for step in decoding:
write_KV(fp16) # 先高位宽
if memory_full():
shrink_bitwidth(bit_map) # 等价右移
6 实验要点
同显存下最高 +8 p.p. 提升,且解整数规划 + 位宽右移耗时<1 ms/step,对端到端延迟影响<3 % (nicsefc.ee.tsinghua.edu.cn, nicsefc.ee.tsinghua.edu.cn, nicsefc.ee.tsinghua.edu.cn)。
7 与现有方案比较
8 实现与落地 Tips
右移核:一句 GPU intrinsics
>>
+ fusible scale;在 PyTorch 2.3 可用custom_cuda_kernel
快速集成。敏感度批次:128 条样本即可稳定排序,无需全量梯度。
Solver 选择:开源 SCIP or CBC 均能 1-2 s 解 70 block×4 bit-choice MIP。
可与 KVQuant / MiKV 叠加:PM-KVQ 解决“何时何处多低位宽”,其它方法可再做 outlier 稀疏或通道平衡,进一步降到 1-2 bit。
结论
PM-KVQ 把 逐步降位宽 的时间视角、块级混合精度 的结构视角、以及 位置插值 的校准视角三线汇流,针对 Long-CoT 的累积误差与 RoPE 低频失配两大顽疾给出了几乎零开销的工程化解法,为百万 token 级上下文的超低显存推理提供了新基线。
Appendix
在 PM-KVQ 中,“位置插值校准” 用一个非常轻量的 trick —— 把校准阶段 RoPE 的位置索引乘上一个放大因子 α—— 就把只有 2 K token 的短标定序列“拉伸”成等价于 8 K 甚至 16 K token 的长序列。这样既不改变模型、也不额外跑长序列自注意力,却让通道级 re-parameterisation(balancer)看到 RoPE 低频通道 的完整波峰-波谷分布,从而给 Key-Cache 提供更准确的缩放因子,显著降低 2-4 bit 量化误差。下面按“问题 → 方法 → 原理 → 实验”四步拆解。
1 为什么短序列校准会翻车
1.1 RoPE 的周期跨度极大
RoPE 把第 c 个通道旋转的角频率 ω₍c₎ 随通道指数指数级下降,最低频通道一个完整正弦周期可长达 54 410 token(以 DeepSeek-R1-7B 为例)(arxiv.org)。
1.2 低频通道易出离群值
Key 在这些低频通道里随位置缓慢摆动,首 2 K-token 只覆盖正弦曲线 1/25 周期——观测值都挤在“向上半坡”,导致校准得到的缩放因子 s₍c₎ 被严重低估;真正推理到 30 K+ token 时,Key 幅度可达校准期望的数倍,于是量化溢出或被迫放大 scale,精度暴跌(arxiv.org, arxiv.org)。
2 位置插值校准做了什么
2.1 核心公式
校准时把 RoPE 的位置索引 p 改为
p′ = α p(α>1)(1)p' \;=\; \alpha \, p\quad(\alpha>1)\tag{1}
即在不增加序列长度的前提下,将短序列映射到更远的“虚拟”绝对位置。论文默认 α = 4,用 2 048 token 数据获得等效 8 192-token 的相位覆盖(图 1(c) bottom)(arxiv.org)。
2.2 具体流程
取 512 条 × 2 048 token 校准样本(RedPajama-ArXiv 子集)(arxiv.org);
在前向时把 RoPE 角度数组的索引乘 α,写回计算图 —— 不改模型参数、不影响梯度;
继续执行 通道重标定(QServe 风格 balancer)得到每通道的 re-parameter b₍c₎;
校准结束后撤掉 α,模型推理仍用原生 RoPE。
整套过程只比普通 2 K 标定多一次常数乘法,占用 < 1 % 显存、< 5 % 时间。
3 本质为何奏效
表面上像是简单“位置伸缩”,本质是 把 RoPE 的慢振动“加速预览”,让短样本统计值近似长样本分布——与 YaRN / PI 等 RoPE-extension 的思想一致,只是用于 校准阶段 而非修改模型(arxiv.org, reddit.com)。
4 实验与消融证据
在 DeepSeek-8B 的 2 bit 设置下,位置插值 (α = 4) 把 pass@1 从 63.1 → 64.8 %,与真正用 8 K 长校准的 64.9 % 几乎一致,成本却低 4× (arxiv.org)。
继续增大 α 到 16 时,反而轻微下降——说明“虚拟位置”过大导致高频通道被拉伸过度,分布与真实推理又失配(Table 4)(arxiv.org)。
Ablation 还显示:若不做位置插值而直接加长校准序列到 8 K,会耗时 6.1×、显存 5.8×,却只能获得 +1.8 p.p. 提升,性价比远低于插值方案(arxiv.org)。
5 与其他 RoPE-aware 手段的关系
PM-KVQ 选择“最便宜”的路径:不触碰模型权重,也不给推理链路添任何算子——这让它能与 NTK-RoPE、YaRN-fine-tune、滑窗注意力等改造并存。
6 工程落地提示
α 的取值:经验上
α = 4
对 2 K 或 2 048 token 校准最稳;若只有 512 token,可先分块采样再取 α ≈ 8。实现方式:在 PyTorch 里 hook 一行
pos = pos * alpha
后重构 RoPE 缓存即可,无需改 CUDA。校准数据不必很长:官方用 512×2 048 学术段落即可,换新闻或代码样本仍能复现 ±0.2 p.p. 内波动(arxiv.org)。
参考关键来源
PM-KVQ 论文正文(方法 §3.3)(arxiv.org)
PM-KVQ 摘要与 Figure 1 说明插值流程(arxiv.org)
RoPE 低频周期分析(式 11,DeepSeek-7B 54 410 token)(arxiv.org)
PI 原始论文提出位置插值思想 (Chen 2023)(arxiv.org)
YaRN 扩窗工作展示插值对长序列分布影响
NTK-Aware Scaled RoPE 实战记录强调 scale-down idea (社区)(reddit.com)
最新 “Understanding RoPE Extensions” 对低频通道现象的系统解读(arxiv.org)
其他综述仓库列长上下文方法汇总(github.com)
OpenVINO 技术更新提到 KV 缓存 4 bit 校准难点,侧证短序列问题(blog.openvino.ai)
Phase-Shift RoPE 校准模块研究同类方向(aclanthology.org)