你有没有想过,一个AI模型在聊天过程中要"记住"多少东西?
传统的注意力机制有个办法,把你说过的每一句话都存起来,这个存储叫KV缓存
*KV缓存:Key-Value Cache,模型为了记住之前所有token的信息而维护的一份存储,会随着对话变长而不断增大*
但这个办法有个明显的毛病,聊得越久,存的东西越多,显存很快就扛不住了。
于是有人想出了另一条路,线性注意力。它不去存每一句话的细节,而是把所有历史信息压缩进一个固定大小的"状态矩阵"里,不管你聊了10句还是10万句,这个矩阵的大小都不变。听起来很美好对吧?Qwen3.8-27B和Kimi-Linear-48B-A3B-Instruct这些新模型都用上了这种叫"门控Delta规则"的机制。
但2026年这篇论文揭开了一个被忽略的现实:固定大小不等于内存开销可控。原因很简单,每一个正在和你对话的用户,都需要单独保留一份这样的状态矩阵。用户越多,矩阵越多,内存照样爆炸。论文里给出一个扎心的数字:在官方SGLang部署环境里,Qwen模型的FP32状态池在并发请求数达到70时,占用的内存就已经超过了模型权重本身(BF16格式)的大小。
这就是这篇论文要解决的问题:能不能把这些状态矩阵压缩到更低的精度,比如从32位浮点数压到4位或6位整数,同时不让模型变傻?
直接量化为什么会翻车
先说结论,直接粗暴地把状态矩阵量化成低精度格式,会导致模型性能断崖式下跌。
*量化:把高精度的浮点数(比如32位)转换成低精度的整数(比如4位、6位、8位)来存储,目的是省内存,但会丢失一些精度信息*
论文的实验数据很直观:在6个短文本任务和7个长推理任务上,普通的均匀INT4量化(也就是4比特统一精度)几乎让模型报废,在AIME 2026这个数学竞赛题上,Qwen的准确率直接从87.71%掉到0%。连带着,KDA模型(Kimi用的那种门控机制)也好不到哪去,INT6量化下平均准确率只有45%出头,而FP32原始精度能打到80%以上。
问题出在哪?你得理解线性注意力的状态更新机制。每一步对话,模型都会读取上一步的状态,做一次更新,然后把新状态重新量化存起来。这个过程像极了传话游戏,第一个人说的话每传一轮就失真一点,传的轮数越多,失真积累得越厉害。而线性注意力的解码过程,恰恰是一轮又一轮不停地传话。
研究者们没有满足于"量化会掉点"这种笼统结论,他们往下挖了两层,发现误差的影响其实分成时间和空间两个维度,而且规律相当清晰。
时间维度:越"长寿"的记忆,错得越离谱
论文里有个核心发现,记忆保留得越久的状态单元,积累的量化误差也越大。
这个结论是怎么验证的?研究者对Qwen模型里全部2304个循环注意力头做了统计实验,用统一的INT6量化跑在C4语料上,然后测量每个头的"门控半衰期"和累积误差的关系。
*门控半衰期:衡量一个记忆单元遗忘速度的指标,半衰期越长,说明这个记忆保留得越久,衰减得越慢*
结果显示两者的斯皮尔曼相关系数高达0.80,这是统计学意义上非常强的正相关。换句话说,记性越好的单元,量化误差积累得越狠。
这个结论乍一听有点反直觉,记性好不是应该更稳定吗?但仔细想想就明白了。误差的传播有两个渠道会被削弱,一个是门控衰减本身,衰减越快,旧误差消失得越快;另一个是Delta更新沿着当前键方向的修正,只要新来的键和误差方向对得上,误差就会被纠正掉。如果一个单元的门控衰减很慢(也就是"记性好"),那第一个渠道基本失效,误差只能靠第二个渠道慢慢磨,这个过程就会拖得很长,误差也就越滚越大。
打个比方,这就像一块反复擦写的白板和一块很少擦的黑板。白板上写错的字很快会被下一次擦写覆盖掉,就算写错了也影响不了多久。但那块几乎不擦的黑板,一旦某个角落写错了字,没人去碰它,这个错误就会一直留在那里,甚至影响到后面写在旁边的内容。如果不考虑这种"记忆寿命"的差异,用统一精度量化所有状态单元,就相当于用同样的擦写频率去对待白板和黑板,结果就是黑板上的错误永远得不到及时修正,越积越多。
基于这个发现,论文提出了生命周期感知的比特分配方法。
具体做法是,给每个状态单元估算两个量:一个是它在不同比特宽度下的重建失真,另一个是它的平均对数保留率(也就是记忆寿命的量化指标)。把这两者结合起来,算出一个"生命周期权重",记忆寿命越长的单元权重越高。然后在固定的总比特预算下,用一个优化目标去分配比特:给那些误差大、又活得久的单元分配更高的精度,其他相对"短命"的单元就可以用更低的精度凑合。
有意思的是,即便做了这种精细分配,仍然有极少数单元"顽固不化",怎么分配精度都压不住误差。论文的做法很直接,干脆把这批最高风险的单元原样保留为FP16精度,当作"稀疏枢轴"插在整个低精度状态里。在Qwen模型上,这部分枢轴只占全部状态头的1.39%,但消融实验显示,去掉它们会让4比特配置下三个任务的平均准确率下降6.7个百分点,6比特配置下AIME准确率更是暴跌14.16个百分点。
空间维度:误差发生在哪儿,比误差有多大更重要
如果说时间维度告诉我们"什么时候的误差危险",那空间维度回答的是"哪里的误差危险"。
论文发现了两个独立的空间规律。第一个规律是,状态矩阵里不同的"键行"(key row)对最终输出的影响程度完全不一样,哪怕误差的绝对大小相同。
*键行:状态矩阵是一个二维矩阵,按行索引对应不同的键(key)维度,按列索引对应不同的值(value)维度*
研究者推导了一个数学关系:输出误差可以写成每一行累积误差乘以一个权重系数的加权和,这个权重系数由当前的键、查询和门控共同决定。他们把这个权重的平方期望定义为"行影响分数"。为了验证这个分数有没有实际意义,他们做了一个很直白的实验:把每个头内的键行按影响分数分成8组,每次只量化一组到INT4,其余行保持全精度,看困惑度(perplexity,衡量语言模型预测准确性的指标,越低越好)涨了多少。结果很清楚,影响分数越高的组,量化后困惑度涨得越厉害,在Qwen和KDA两个模型上都是如此。
这就像公司里不同岗位的人出错的后果不一样。前台接待员记错了一个访客的名字,顶多尴尬一下,几乎不影响公司运转;但财务总监在合同金额上打错一个数字,可能让公司损失几百万。两个人都犯了"记错信息"这种同样性质的错误,但后果天差地别,因为他们的信息在整个决策链条里所处的位置不同,影响力完全不对等。如果公司给所有岗位都配一样等级的审核流程,那前台的审核就是浪费资源,财务总监的审核可能还不够严格。
第二个空间规律更直观:状态矩阵的数值大小,在行和列两个方向上都存在明显的离群值(outlier),而且不是单一方向占主导,而是双轴都有。
论文测量了Qwen状态矩阵的行、列最大值和中位数的比值,发现行方向的最大/中位数对比达到10.3倍,列方向更夸张,达到19.4倍,98.6%的采样状态里这个对比都超过3倍。更关键的是,这种离群值分布不是昙花一现,追踪2048个解码步骤后发现,离群的通道会持续保持突出的数值,贯穿整个解码过程。
这跟以前处理大语言模型权重和激活值时常见的"单轴离群值"情况不太一样,过去大家习惯沿着一个主导轴(比如某些固定通道)去做缩放校正,但循环状态矩阵的离群值同时横跨行和列两个方向。只按一个轴缩放,顾得了这头顾不了那头。
针对这两个发现,论文提出了键行感知的双轴拟合方法。
这个方法的核心思路是,给每一行一个独立的缩放因子,给每一列也一个独立的缩放因子,两者相乘共同决定量化的精细程度。行缩放因子不仅要反映这一行当前的数值大小,还要把"行影响分数"考虑进去,影响越大的行,量化分辨率要越精细。列缩放因子则通过一个加权最小二乘拟合得到,拟合时给高影响行的重建误差赋予更大的惩罚权重。
这套设计跟Mamba模型上的一个类似方法(论文里叫Q-Mamba的DSQ模块)做了对比,差距非常悬殊。在Qwen模型的4比特配置下,DSQ只能做到7.64%的平均准确率,而论文的空间拟合方法单独使用就能达到73.95%。这中间十倍的差距,说明单纯做双轴缩放是不够的,必须把"哪一行更重要"这个信息也编码进去。
当这两套机制,时间上的生命周期感知分配,加上空间上的键行感知双轴拟合,组合在一起时,论文把这个完整框架命名为STEPQuant(空间-时间量化,Spatial-TEmPoral Quantization)。
数据说话:6比特几乎不掉点,4比特也能打平INT8
理论说得再漂亮,终究要靠实验数据验证。
论文在Qwen3.8-27B和Kimi-Linear-48B-A3B-Instruct两个模型上,分别测试了7个长生成推理任务(包括LiveCodeBench代码生成、AIME数学竞赛、GPQA研究生水平问答等)和6个短生成理解任务(MMLU、ARC-C等常见评测集)。
长推理任务上,6比特STEPQuant在Qwen上的平均准确率是80.59%,几乎贴着FP32基线的80.60%;而统一INT6量化的平均准确率只有45.04%,差了整整35个百分点。换个角度理解这个差距:如果你让两个人分别用这两种方法做100道推理题,STEPQuant能对80题左右,而普通INT6量化只能对45题,差不多每做两道题就多错一道。
更让人意外的是4比特配置的表现。按常理4比特应该比6比特更惨,但STEPQuant@4bit在Qwen上反而拿到了80.51%的平均准确率,几乎没比6比特差多少,而且远超统一INT8(71.86%)的水平。这意味着,只要量化方案设计得当,低比特未必意味着大幅掉点,关键看你怎么分配这些比特。
短生成任务上的结果同样稳健。4比特STEPQuant相比FP32基线,Qwen上只掉了0.15个百分点,Kimi上掉了0.25个百分点,而统一INT4量化在部分任务上已经退化到接近随机猜测的水平,比如WinoGrande这个二选一任务,统一INT4在Qwen上只有46.57%的准确率,比瞎猜(50%)还低,因为模型有时候连答案格式都给不对了。
论文还测试了一个更贴近实际部署的场景:把模型权重也量化成4比特AWQ格式,再叠加STEPQuant对状态的量化。结果显示,6比特STEPQuant在这种组合场景下依然只比FP32状态基线低0.05到0.33个百分点,证明这套方法和权重量化是兼容的,不会互相拖累。
| 配置 | Qwen长推理平均准确率 | Kimi长推理平均准确率 |
|---|---|---|
| FP32(原始精度) | 80.60% | 61.52% |
| 统一INT8 | 71.86% | 56.02% |
| 统一INT6 | 45.04% | 45.70% |
| 统一INT4 | 12.73% | 21.63% |
| **STEPQuant@6bit** | **80.59%** | **61.47%** |
| STEPQuant@4bit | 80.51% | 58.52% |
这组数字背后其实还有一个值得注意的现象,过度量化不仅让模型答错题,还会让模型"话多"。论文观察到,统一INT4量化下,Kimi在AIME任务上平均生成了63.4千个token,HMMT任务上更是接近65536个token的上限,但这些"长篇大论"几乎没有换来正确答案,准确率接近0。这说明量化误差破坏的不只是最终答案,连带模型的推理过程本身都被搅乱了,它可能陷入某种重复或无效的思考循环里,却浑然不觉。相比之下,STEPQuant量化后的模型生成长度和FP32基线基本一致,这从侧面印证了它确实保住了模型的"思考质量",而不只是表面上的几个准确率数字。
工程落地:内存省了近七成,速度也提了
光有算法上的漂亮数据还不够,论文团队把STEPQuant真正集成进了SGLang这个实际的推理服务框架,还专门写了优化过的GPU内核。
在实际部署测试中,4比特AWQ权重加上6比特STEPQuant状态量化的组合,在批量大小为512时,把Qwen模型的总服务内存从419.73 GiB压缩到131.18 GiB,降幅达到68.7%。单看状态部分,内存压缩比达到5.03倍,状态更新速度提升了2.91倍。KDA模型上也有类似的收益,总内存降低53.7%,状态压缩5.08倍。
更让人意外的是,这套方案不仅没拖慢推理速度,反而在高并发场景下提升了整体解码吞吐量。批量大小512时,Qwen的吞吐量从每秒6040个token提升到7280个token,涨幅超过20%;KDA模型也有接近12%的提升。这说明量化压缩带来的内存带宽节省,足以抵消量化和反量化本身带来的计算开销,净收益是正的。
写在后面
读这篇论文时,最让我意外的不是量化方法本身的精巧,而是研究者选择问题的角度。市面上大多数量化研究盯着的是模型权重,这是个已经被研究了很多年的"显学"赛道。但循环状态这个东西,因为它的大小"看起来"是固定的,很容易被误以为内存开销也是固定的,从而被忽略。论文一开头那张图,70个并发请求时状态池内存超过模型权重,其实是在提醒我们:很多工程问题不是技术难度大,而是压根没人往那个方向看。
另一个让我反复琢磨的细节是,论文里提到记忆保留越久的单元误差反而越大,这和我们日常对"记性好坏"的直觉是拧着的。我们总觉得记得牢是好事,但在这个数学模型里,记得牢意味着一旦出错,这个错误也会被更顽固地保留下来。这其实是个挺普适的道理,不只是AI系统,任何一个靠累积状态运作的系统(哪怕是一个人的习惯、一个组织的流程)都可能面临类似的困境:越稳定的东西,一旦出了偏差,纠正的成本也越高。
论文的局限性部分也说得挺诚实,他们承认生命周期权重只是对误差持久性的一种近似,没有完全建模那个随时间变化、依赖具体键值的状态转移过程。这意味着这套方法可能还有继续打磨的空间,特别是在更极端的低比特(比如2比特、3比特)场景下,目前的近似可能就不够用了。
循环状态压缩这件事,会不会在未来几年变成和权重量化一样"标配"的技术?如果所有大模型都往线性注意力和混合架构方向走,这恐怕不是会不会的问题,而是早晚的问题。
Q&A
Q1:STEPQuant是什么?
A:STEPQuant是一种针对Delta规则循环状态的量化压缩方法,通过结合时间维度的生命周期感知比特分配和空间维度的键行感知双轴拟合,在6比特精度下几乎不损失模型准确率,同时实现超过5倍的状态内存压缩。
Q2:为什么直接对循环状态做低比特量化会导致模型性能暴跌?
A:因为循环状态在每一步解码时都会被读取、更新再重新量化,误差会像传话游戏一样层层累积。记忆保留时间越长的状态单元,误差积累得越严重,普通的统一量化方法没有考虑这种时间和空间上的差异,导致关键信息被严重破坏。
Q3:STEPQuant在实际部署中能带来多大的内存和速度收益?
A:在4比特权重量化基础上叠加6比特STEPQuant状态量化,Qwen模型的总服务内存降低68.7%,状态内存压缩5.03倍,状态更新速度提升2.91倍,同时解码吞吐量在高并发场景下还能提升超过20%。







