
先问你一个问题。
如果你去搬家公司打包行李,发现贵重物品(比如相机、首饰)要小心轻放,而普通衣物随便塞进箱子就行,你会怎么处理这两类东西?大概率你会用不同的方式对待它们,一个用泡沫纸层层包裹,一个直接卷巴卷巴塞进去。
但如果有人告诉你:"不管贵重还是普通,统一按同一个标准压缩打包",你是不是会觉得哪里不对劲?
这篇论文讲的,正是大模型圈子里一个被忽视了很久的"统一打包"问题。
**先搞懂什么是KV缓存**
要理解这篇论文在解决什么,得先知道大语言模型是怎么"记住"前面说过的话的。
当你问ChatGPT一个问题,它会一个字一个字往外蹦。每吐出一个新字,模型都要回头看一遍前面所有的内容,才能决定下一个字说什么。但每次都重新计算一遍前面全部内容,太浪费了。于是工程师们发明了一个办法:把前面每个词计算出来的"键"和"值"存起来,下次直接拿来用,不用重复算。
> KV缓存:大模型在生成文字时,为了避免重复计算,把之前每个词对应的"键"(Key)和"值"(Value)信息存储下来,供后续生成时直接调用的一块内存区域。
问题是,这块缓存会随着你聊天内容变长而不断膨胀。聊得越久,缓存占的显存越多,服务器能同时服务的用户就越少。这就跟你手机相册一样,照片拍得越多,占的存储空间越大,手机就越容易提示"存储空间不足"。
为了省这块内存,大家想了很多办法,其中最直接的就是"量化"。
> 量化:把原本用高精度数字(比如16位浮点数)存储的数据,压缩成用更少的位数(比如4位整数)来表示,从而大幅减少存储空间,但同时会引入一定的精度损失。
量化听起来简单,无非就是"数字记粗糙一点"。但粗糙到什么程度不会出问题,这里面的门道可大了。
**MLA架构带来的新麻烦**
这篇论文聚焦的是一种叫MLA的注意力机制。
> MLA(多头潜在注意力,Multi-Head Latent Attention):DeepSeek团队提出的一种注意力机制设计,通过把多个注意力头共享的信息压缩成一个低维的"潜在"表示来存储,大幅减小了KV缓存的体积。它被DeepSeek-V3、Kimi K3、LongCat-Flash等多个主流大模型采用。
MLA的聪明之处在于,它把缓存拆成了两条路径。一条叫"内容路径",存的是所有注意力头共享的压缩信息,这些信息后面会被用来还原出每个头各自的键和值。另一条叫"RoPE路径",专门存放和位置信息相关的键。
> RoPE(旋转位置编码,Rotary Position Embedding):一种让模型知道"这个词排在第几位"的技术,通过对向量做旋转变换来编码位置信息,是目前主流大模型的标配位置编码方案。
这两条路径看起来只是分工不同,但论文发现了一件意料之外的事:业界现有的量化方案,几乎都只压缩内容路径,把FP8(一种8位的数字格式)用在内容缓存上,RoPE路径的键缓存却原封不动地保留在高精度的BF16格式。
这就好比打包行李时,你把大件家具都做了瘦身处理,却完全没动那个塞满小饰品的首饰盒,理由可能只是"没人仔细研究过首饰盒该怎么压缩"。论文的作者们决定去研究一下这个"首饰盒"。
**同样的压缩误差,为什么伤害不一样**
研究团队做了一个很直接的实验:故意往内容缓存和RoPE缓存里分别注入同样大小的"误差",然后观察这两种误差分别会让模型最终输出结果产生多大的偏差。
这里有个专业说法要解释一下。
> NMSE(归一化均方误差):衡量两个数值序列之间差异大小的指标,数值越小代表两者越接近,常用来评估量化压缩后的数据和原始数据差了多少。
结果让人意外。研究团队测试了从160亿到1万亿参数规模的六个主流MLA模型,发现在缓存误差完全相同的情况下(都控制在1%的NMSE水平),RoPE路径造成的最终输出误差,比内容路径高出近2到7倍不等。
具体数字是这样的:在DeepSeek-V2-Lite上,RoPE路径的误差放大倍数达到6.33倍;在LongCat-Flash-Lite上更是高达6.86倍;就算是放大倍数最小的Kimi-K2-Instruct,也有1.94倍。
这意味着什么?意味着原本被大家默认"不那么重要、可以先放一放"的RoPE缓存,实际上是个脾气更暴躁的"易碎品",你稍微压缩狠一点,它反馈给你的误差放大效应比内容缓存严重得多。如果继续沿用"只压内容、放过RoPE"的老思路,相当于你小心翼翼地给普通衣物裹了三层泡沫纸,却把真正的易碎品随手扔进了箱子底部。这不是保护策略出了问题,而是压根搞反了保护的重点。
**误差到底是怎么被放大的**
搞清楚"RoPE路径误差更大"这个现象后,研究团队继续往下挖,想弄明白这背后的机制。
他们发现,这两条路径的误差传播方式根本不同。
内容缓存的误差,会同时影响两件事:一是影响"注意力匹配"过程(也就是模型判断该重点关注哪些词),二是影响"数值聚合"过程(也就是模型实际提取信息时用的那些值)。这两种影响还会相互交织,产生额外的耦合效应。
而RoPE缓存的误差只有一条路可走:它只通过位置相关的匹配分数产生影响,不会碰触到具体的数值内容。
听起来RoPE路径影响渠道更单一,误差理应更容易控制。但研究进一步揭示,这个"单一渠道"本身对误差格外敏感,用论文里的说法,叫"算子敏感度"更高。再加上量化误差在不同坐标方向上的"能量分布"方式不同,有些方向误差正好踩在模型最敏感的点上,综合下来反而放大了最终的偏差。
这就好比两条路都能从A地到B地,一条路是普通公路,路上有很多出口可以分流车流;另一条是独木桥,所有车流都得挤过同一个点。表面上独木桥的"路径"更简单,但一旦这座桥本身承重能力差,哪怕只过一辆超载的车,也可能直接压垮整条通道。RoPE路径就是那座看起来简单、实际上异常敏感的独木桥。
**量子MLA:给两条路配不同的"压缩方案"**
搞清楚问题根源后,论文提出了解决方案,叫QuantMLA。
它的核心思路是:既然两条路径的误差传播机制完全不同,那就不该用同一套压缩标准去对待它们,而要分别给它们量身定制变换方式和优化目标。
对内容路径,QuantMLA设计了一种叫"正交旋转加通道缩放"的变换空间。
> 正交旋转:一种数学变换,可以理解成把数据在高维空间里"转个角度",但转动过程中不会拉伸或压缩数据本身的长度和距离关系,因此转动前后做计算的结果完全等价。
这个变换的巧妙之处在于,它完全可以在模型部署之前就提前计算好,直接"焊死"进模型原有的参数里,不需要在实际推理时额外花时间去做这个变换。这就好比你搬家前,先把所有东西按照新家的空间布局提前规划分类打包好,搬到新家直接按标签摆放,而不是到了新家才现场一件件商量怎么摆。
针对内容路径,QuantMLA用的优化目标叫"注意力输出重建",说白了就是直接盯着模型最终产生的那个输出结果,尽量让压缩后的输出和没压缩时的输出保持一致。因为内容路径的误差会同时影响匹配和聚合两个环节,只有盯住最终输出,才能把这两种耦合在一起的影响都考虑进去。
对RoPE路径,情况更复杂一点,因为这条路上还套了一层RoPE的旋转位置编码,普通的变换没法随便乱加,得保证新加的变换和RoPE自身的旋转操作"兼容",不能互相打架。
论文给出的解法是一种"成对旋转加绑定缩放"的变换方式,专门针对RoPE两两配对的频率结构设计,保证这个变换能和RoPE的旋转操作顺利交换次序,从而同样可以提前离线融合进模型参数里,不增加推理时的额外开销。
对应的优化目标则是"位置QK重建",意思是专注于保住RoPE路径独有的那部分注意力分数(也就是和位置相关的匹配分数),而不是像内容路径那样去追最终的整体输出。论文还从数学上证明了一个结论:只要把这部分位置分数的误差控制住,最终输出的误差就有一个明确的上界,不会无限恶化。
这种"对症下药"的思路,其实就是承认了一个朴素的道理:两种性质完全不同的东西,硬用同一套标准去衡量和处理,本身就是偷懒,也注定会留下隐患。
**压缩到多狠才算够狠**
光有方法论还不够,得看实际效果能压到什么程度。
论文给出的核心成绩是,在四个不同的MLA模型家族上,QuantMLA首次实现了内容缓存和RoPE缓存同时压缩到INT4精度(也就是用4位整数表示每个数),并且精度损失控制得非常小。
> INT4:一种用4个二进制位表示一个数字的整数格式,相比常见的16位浮点数格式,存储空间直接缩小到四分之一。
具体数字很能说明问题。在DeepSeek-V2-Lite模型上,原始BF16精度下GSM8K数学题测试得分是36.92%,QuantMLA压到INT4联合精度后是35.25%,只掉了不到2个百分点。作为对比,直接用最朴素的四舍五入量化(RTN)压到同样精度,得分直接腰斩到16.98%,掉了将近20个百分点。另外两个改造过的对照方法SmoothQuant和QuaRot,表现也明显不如QuantMLA。
更狠的是,论文还尝试把内容缓存进一步压到INT2(只用2个位表示一个数),同时保留RoPE键缓存在INT4。在这种极端压缩下,LongCat-Flash-Lite模型在HumanEval代码生成任务上依然能拿到71.34%的得分,和未压缩时的73.78%相差不大。GLM-4.7-Flash在这种设置下的综合平均分是51.43%,比表现最好的同精度对照方法还要高出6.22个百分点。
长文本检索能力的测试结果也值得一提。论文用RULER基准测试了从4K到32K不同长度的上下文,QuantMLA在相对简单的检索任务上几乎和未压缩模型持平,在难度最高的S-NIAH-3任务上平均准确率达到87.20%,比表现最好的对照方法高出7.4个百分点。
**从实验室到实际部署,还差一套工程活**
方法有效只是第一步,真正要用起来,还得看能不能在实际的推理服务里跑得又快又省。
论文团队专门开发了一套原生的低精度MLA计算内核,把"解压"和"反量化"这两个步骤直接揉进了注意力计算过程本身,而不是先解压成完整精度再算,这样可以避免额外展开整个缓存带来的内存浪费。
这里有个细节设计挺有意思,论文没有把所有词全部一视同仁地压缩,而是设计了一个"保护区"机制:对话最开始的几个词(叫"sink token",锚点词)和最近的128个词,始终保留未压缩的高精度版本,其余的词才用压缩后的低精度版本。
> Sink token(锚点词):注意力机制中发现的一种现象,序列最开头的几个词往往会被模型持续高强度关注,即使这些词本身信息量不大,也起到稳定整体注意力分布的锚点作用,因此需要格外保护其精度。
这个设计背后的考量是,研究发现最开头和最近的词,对模型维持稳定表现格外关键,一旦这些词的精度被破坏,容易引发连锁的偏差放大。这就像你搬家时,大部分行李可以压缩打包,但身份证、钥匙这类随时要用、丢了麻烦的东西,你一定会单独放在最容易拿到的口袋里,不会跟其他行李混在一起压缩收纳。
这套工程设计带来的实际收益相当可观。在12.8万token的超长上下文场景下,持久化的KV缓存体积压缩到了原来的27.9%,也就是3.59倍的压缩率。
更关键的是在真实服务压力测试下的表现。论文模拟了一个高压力场景:8块GPU上同时处理5个请求,每个请求输入长度达到12.8万token,要求生成1024个token。用未压缩的BF16缓存,显存很快撑爆,系统被迫触发32次"抢占"(也就是暂停某些请求、挪出内存空间给别的请求,之后再重新计算被暂停的部分)。而用了QuantMLA压缩后的缓存,整个过程零抢占。最终反映在吞吐量上,输出速度从每秒2.61个token跃升到13.51个token,提升了5.168倍。
这个数字的含金量在于,它不是靠某个算子跑得更快换来的,论文特意说明,实际的注意力计算延迟和未压缩版本几乎没有差异,差距都在0.5%以内。真正的收益来自于缓存变小之后,系统不再需要反复暂停和重算,这是一种"少做无用功"换来的效率提升,而不是计算本身被加速了。
写在后面
读完这篇论文,我印象最深的其实不是那个5倍多的吞吐量提升数字,而是那组揭示RoPE路径误差被放大的实验数据。这种"大家默认不重要、所以没人仔细测过"的死角,往往藏着意外的发现。
整个行业在聊KV缓存压缩这件事的时候,长期默认了一个前提:RoPE相关的信息天生娇贵,碰不得,所以干脆绕开它,只压别的部分。这个默认背后与其说是经过严谨验证的结论,不如说更像是一种"没人愿意去啃硬骨头"的集体惰性。论文真正的贡献,某种程度上不是发明了多么复杂的新算法,而是有人愿意花时间去较真地测一测,这个"默认"到底站不站得住脚。
另一个让我反复想的细节是那个"保护区"设计,只保护开头几个词和最近的词,中间的内容全部压缩。这种处理方式其实暗合了人类记忆的某种规律,我们对一段对话的开场白和最近说的话印象最深,中间大段的细节反而更容易模糊处理。模型的注意力分布规律和人的记忆规律,在这个细节上出现了某种巧合的呼应,这种跨领域的呼应是不是意味着,有些优化策略的有效性,根植于信息处理本身更底层的某种共性规律?这个问题,这篇论文没有回答,但留下了一个值得继续追问的缝隙。
Q&A
Q1:QuantMLA解决了什么核心问题?
A:它发现大模型MLA架构里的RoPE位置信息缓存,在同样压缩误差下造成的输出偏差,比内容缓存高出近2到7倍,但业界此前普遍只压缩内容缓存、放过RoPE缓存,QuantMLA针对这两条路径分别设计了专属的压缩方案。
Q2:QuantMLA能把显存压缩到什么程度,精度损失大不大?
A:在四个主流MLA模型上实现了内容和RoPE缓存同时压到INT4精度,精度损失普遍控制在1到2个百分点以内,12.8万token超长上下文下缓存体积可压缩到原来的27.9%。
Q3:QuantMLA在实际部署中能带来多大的效率提升?
A:在高压力服务测试中,使用QuantMLA压缩的缓存让系统避免了反复抢占和重算,整体输出吞吐量提升了5.168倍,同时保留了对话开头和最近内容的高精度保护区。







