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

min⁡xi,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 实验要点

LLM

最终 KV 位宽

基准 / PM-KVQ

AIME-24 pass@1

LiveCodeBench pass@1

DeepSeek-8B

2-bit

KIVI

51.9

35.7

PM-KVQ

64.8

43.2

DeepSeek-32B

4-bit

KIVI

60.4

39.1

PM-KVQ

67.9

46.0

同显存下最高 +8 p.p. 提升,且解整数规划 + 位宽右移耗时<1 ms/step,对端到端延迟影响<3 % (nicsefc.ee.tsinghua.edu.cn, nicsefc.ee.tsinghua.edu.cn, nicsefc.ee.tsinghua.edu.cn)。


7 与现有方案比较

方法

时间策略

结构策略

校准策略

长-CoT 精度

KIVI

直接低位宽

首尾 FP16

2 K

MiKV

Mixed 精度按 token

通道平衡

2 K

PM-KVQ

Progressive

Block-wise MIP

短序列 + PI

最高


8 实现与落地 Tips

  1. 右移核:一句 GPU intrinsics >> + fusible scale;在 PyTorch 2.3 可用 custom_cuda_kernel 快速集成。

  2. 敏感度批次:128 条样本即可稳定排序,无需全量梯度。

  3. Solver 选择:开源 SCIP or CBC 均能 1-2 s 解 70 block×4 bit-choice MIP。

  4. 可与 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 具体流程

  1. 取 512 条 × 2 048 token 校准样本(RedPajama-ArXiv 子集)(arxiv.org);

  2. 在前向时把 RoPE 角度数组的索引乘 α,写回计算图 —— 不改模型参数、不影响梯度;

  3. 继续执行 通道重标定(QServe 风格 balancer)得到每通道的 re-parameter b₍c₎;

  4. 校准结束后撤掉 α,模型推理仍用原生 RoPE。

整套过程只比普通 2 K 标定多一次常数乘法,占用 < 1 % 显存、< 5 % 时间


3 本质为何奏效

关键维度

没有位置插值

有位置插值

作用机理

通道覆盖

只见到正弦极小截面

至少覆盖半个波峰-波谷

让 b₍c₎/s₍c₎ 估计不再偏小

离群检测

低频通道被误当“平稳”

真离群被捕获

Outlier 转移更充分

推理误差

远位置 Key 超出 dynamic range,量化失真

Key 幅度提前被吸收进 scale

减少 INT2/INT3 溢出

表面上像是简单“位置伸缩”,本质是 把 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 共用?

Position Interpolation (PI)【Chen 23】

扩窗到 32 K-128 K

✓(但训练阶段)(arxiv.org)

NTK-scaled RoPE【bloc97】

扩窗 & 减振幅

✓ (reddit.com)

YaRN【Peng 23】

继续缩放+微调

需 FT

✓ 

PM-KVQ 插值校准

只改标定

乘 α

已内置

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)。


参考关键来源

  1. PM-KVQ 论文正文(方法 §3.3)(arxiv.org)

  2. PM-KVQ 摘要与 Figure 1 说明插值流程(arxiv.org)

  3. RoPE 低频周期分析(式 11,DeepSeek-7B 54 410 token)(arxiv.org)

  4. PI 原始论文提出位置插值思想 (Chen 2023)(arxiv.org)

  5. YaRN 扩窗工作展示插值对长序列分布影响

  6. NTK-Aware Scaled RoPE 实战记录强调 scale-down idea (社区)(reddit.com)

  7. 最新 “Understanding RoPE Extensions” 对低频通道现象的系统解读(arxiv.org)

  8. 其他综述仓库列长上下文方法汇总(github.com)

  9. OpenVINO 技术更新提到 KV 缓存 4 bit 校准难点,侧证短序列问题(blog.openvino.ai)

  10. Phase-Shift RoPE 校准模块研究同类方向(aclanthology.org)