线性注意力把随长度增长的 KV cache 换成了固定大小的循环状态,但"固定"只对单个请求成立:并发一上来,每个请求都要留一份状态,显存照样线性堆。更麻烦的是,把状态直接压到低比特,量化误差会被一次次状态更新持续放大——这是 Delta-rule 混合架构落地 serving 时留下的一个工程死角。浙江大学的团队在论文 arXiv 2609.38169 里提出 STEPQuant,给出了系统解法(https://arxiv.org/abs/2609.38169)。
误差分两维:活多久,影响谁
论文先回答"为什么不能均匀量化"。时间维上,长寿命记忆单元的误差会跨多个解码步存留;空间维上,不同 key 行对输出的影响差异很大,而状态幅值在行、列两个方向都剧烈波动。均匀比特分配在这两维上都押错宝:既给不重要的单元浪费精度,又让高风险单元带着误差滚雪球。
按误差花比特,按影响定 scale
STEPQuant 是一个后训练量化框架:按误差幅度与记忆寿命分配比特,少量高危单元直接保留 FP16;key 行与 value 列分别拟合 scale,优先保护对读出误差影响大的行。校准只需一次,配合 packed-state kernel 与异步写回保持推理效率。
数字:6-bit 贴平 FP32
七项长生成任务、BF16 权重加量化状态的设定下,Qwen3.8-27B 的 FP32 平均准确率 80.60%,均匀 INT8 掉到 71.86%,均匀 INT6 直接崩至 45.04%;STEPQuant@6 拿到 80.59%,STEPQuant@4 仍有 80.51%。Kimi-Linear-48B-A3B-Instruct 上结论同向:FP32 61.52%,STEPQuant@6 61.47%,STEPQuant@4 58.52%,均高于均匀 INT8 的 56.02%。工程侧,集成 SGLang(测试栈 SGLang 0.5.12 + PyTorch 2.11.0 + Triton 3.7.1,任务评测在 NVIDIA A800 上完成)后,6-bit 配置把循环状态压缩 5.03×/5.08×(Qwen/Kimi),总 serving 显存最多降 68.7%。
所以呢
九月上旬同赛道刚有工作论证了 Gated DeltaNet 全压 4-bit 可行,STEPQuant 则把"怎么压好"推进到可复现工程:代码与复现文档已开源(https://github.com/Dreamer-Toby/STEPQuant)。值得注意的是论文的诚实披露——4/6-bit 是名义预算,FP16 pivot 与 scale 本身要占额外存储;显存口径用了 W4/AWQ 权重加每请求五个前缀状态槽。对做混合架构推理优化的团队,这篇的时空双维分析框架比跑分本身更值得搬走:量化不再是对着张量一刀切,而是先问误差会活多久、会影响谁。