线性注意力状态量化难题:Qwen状态池70并发就超模型权重
你有没有想过,一个AI模型在聊天过程中要"记住"多少东西?传统的注意力机制有个办法,把你说过的每一句话都存起来,这个存储叫KV缓存*KV缓存:Key-Value Cache,模型为了记住之前所有token的信息而维护的一份存储,会随着对话变长而不断增大*但这个办法有个明显的毛病,聊得越久,存的东西越多,显存很快就扛不住
聊起天来,一个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位整数,同时又不让模型变笨?
直接量化为什么会翻车
结论先摆出来:把状态矩阵粗暴地量化成低精度格式,模型性能会断崖式下跌。
量化说白了就是拿低精度整数(4位、6位、8位)来装原本高精度的浮点数(比如32位),图的是省内存,代价是精度上会打点折扣。
实验数据很能说明问题:在6个短文本任务和7个长推理任务上,普通的均匀INT4量化(也就是4比特统一精度)几乎把模型打废,AIME 2026这道数学竞赛题上,Qwen的准确率从87.71%直接掉到0%。KDA模型(Kimi用的那种门控机制)也没好到哪去,INT6量化下平均准确率只有45%出头,而FP32原始精度能
病根得从线性注意力的状态更新机制里找。每走一步对话,模型都先读取上一步的状态,做一次更新,再把新状态重新量化存起来。这过程像极了传话游戏:第一个人说的话每传一轮就失真一点,轮数越多,失真积得越重。而线性注意力的解码,恰恰就是一轮接一轮地传话。
研究者没停在“量化会掉点”这种笼统说法上,他们往下挖了两层,发现误差的影响其实分时间和空间两个维度,规律还挺清楚。
时间维度:越“长寿”的记忆,错得越离谱
论文有个核心发现:记忆保留得越久的状态单元,攒下的量化误差也越大。
这个结论怎么验证的?研究者统计了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%。
换成6比特的STEPQuant,两个数字变成80.59%和61.47%。
4比特的STEPQuant则是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%。