KVarN:华为用于KVCache量化的原生vLLM后端


华为开源KV Cache量化技术让大模型上下文提升5倍!

KVarN(Variance-Normalized KV-Cache Quantization)是华为计算系统实验室(HUAWEI Computing Systems Lab)刚刚开源的一套KV Cache量化方案,专门解决大模型长上下文推理时的显存瓶颈问题。它已经作为vLLM原生后端实现,可以直接用于推理部署。作者给出的核心卖点非常简单:

  • KV Cache显存压缩
  • 上下文长度提升3~5倍
  • 吞吐量超过FP16
  • 精度接近FP16
  • 无需校准(Calibration-Free)
  • vLLM一条参数即可开启
如果把大模型比作一位考试时疯狂记笔记的学生,那么KV Cache就是他的草稿纸。

那个被你忽略的显存大胃王

我们平时总说一个大模型很“胖”,意思是它占地方。比如一个70B(七百亿个参数)的模型,光把它从硬盘里读出来放到显卡上,就要占掉一百多个G的显存。

所以大家过去几年都在拼命给模型减肥。

什么GPTQ、AWQ、GGUF,这些都是给模型“抽脂”的技术。效果很明显,原本一百多G的模型,能给你压到三四十个G,普通玩家的小显卡也能跑起来了。

这听起来很完美对吧?

但问题就出在这儿。大家都盯着模型本体的体重,却忘了大模型推理的时候,还会自己造出一头“新的怪兽”。这头怪兽就叫KV Cache。

我给你打个比方。你让模型给你讲一个超长的故事,或者帮你总结一本几十万字的小说。模型不是一口气就把结果吐出来的,它是一个字一个字往外蹦的。它每蹦出一个字,都会把之前所有说过的话记在一张小纸条上。为什么?因为等会儿要接下一句话的时候,它得回头看看自己刚才说了啥,不然逻辑就断了。

这些小纸条,堆在一起,就是KV Cache。

上下文越长,故事越长,这堆纸条就越厚。

到最后,模型本身可能只占了30G显存,但这堆纸条占掉了80G。你的显卡算力还绰绰有余,结果显存先被纸条塞满了,直接报错“Out of Memory”。这就好比你家房子很大,但你堆了一屋子的草稿纸,结果你人反而没地方站了。

KVarN就是来解决这堆草稿纸的。它要在不把草稿纸上的字弄花的前提下,把草稿纸的面积压到原来的三分之一甚至五分之一。

为什么以前给草稿纸拍照的办法不灵了

你可能想,既然显存不够,那把KV Cache压缩一下不就行了?就像拍照片,高清的RAW格式太大,我转成JPG,虽然有点失真,但看着也差不多嘛。

这个想法是对的,以前也有人这么干过。

但实际操作起来,翻车了。

原因特别搞笑,也特别隐蔽。问题不出在压缩本身,而出在“误差会叠罗汉”。

假设你压缩第一步,产生了一点小误差,原本数字是1.0,你记成了0.9。
第二步,又产生一点误差,1.0记成了0.9。
如果这些误差是随机的,可能正负抵消,影响不大。

但KV Cache这玩意儿有个毛病,它是有记忆的。后面生成的内容,完全依赖前面的内容。就像玩传话游戏。第一个人说“今天晚上吃火锅”。第二个人听成了“今天晚上吃火鸡”。第三个人基于“火鸡”往下编,变成了“火鸡在过感恩节”。传到第十个人那里,可能就变成了“一只鸡在打火机上面跳舞”。

每一步的误差,不是被消除了,而是在后面的步骤里被无限放大。论文里专门提到了这个现象,尤其是在做数学题、写代码这种需要严密逻辑的推理任务里,第一步差一点点,最后答案就错的离谱。

这就导致以前那些KV Cache压缩方案,在短对话里看着挺好用,一旦你要它写一篇长篇小说或者做一套复杂数学卷子,它就直接“精神分裂”,逻辑乱成一锅粥。

KVarN的魔术:先把屋子摇一摇

KVarN的思路特别有意思。它不跟误差硬碰硬,而是先做一件事:把屋子里的家具重新摆一下。

这就要说到它的第一个绝招,叫Hadamard Rotation。名字很吓人,道理很简单。你可以想象一下,你有一堆石头,里面有几块特别巨大的“异常值”巨石,剩下的全是小石子。如果你直接拿尺子去量这堆石头,想找个平均大小来打包,那尺子肯定会被那几块巨石带偏。为了装下巨石,你只能把包装袋做得巨大无比,这样大部分空间都被浪费了。

KVarN做的第一步,就是把这一堆石头倒进一个搅拌机里,高速旋转搅拌。

轰隆隆一阵之后,你再看。原来那块巨石被打碎了,均匀地混合在了小石子中间。整个石堆变得“均匀”了。没有特别突出的老大,也没有特别不起眼的小弟。

这个过程就叫“旋转”。它把数据分布里那些极其扎眼的异常值打散,让数据变得平滑。这样一来,后面再用尺子去量,就能选出一个最合适的“标准包装袋”,既不会太大浪费空间,也不会太小装不下。论文里反复强调,这一步是后续所有操作的基础,没有这一步,后面的归一化效果会大打折扣。

再给地面铺一层水泥

打散了大石头,只是第一步。接下来是KVarN的第二个绝招,叫双轴方差归一化。这个听起来更吓人,但你可以理解成“双向修路”。

还拿刚才那堆石头举例。搅拌完之后,石头是均匀了,但它们还堆在地上,地面坑坑洼洼的。有的地方高,有的地方低。如果你直接拿尺子量地面的高度来给石头打包,还是会有误差。

KVarN的办法是,拿着水平仪,把整个地面从头到尾、从左到右,仔仔细细地铺一层水泥。

它不仅仅是修“南北走向”的路,它还修“东西走向”的路。它对KV Cache这个矩阵的“行”和“列”都进行了尺度调整。

为什么非要修两个方向?

因为数据里的波动是立体的。有时候某一行的数字整体偏大,有时候某一列的数字整体偏小。以前的技术往往只盯着一个方向(比如只归一化行),结果就是顾此失彼,这一行修平了,那一列又歪了。

KVarN相当于把整个场地变成了一个完美的、光滑的溜冰场。无论你从哪个方向看,地面都是平的。

经过“搅拌机打散巨石”和“双向铺平地面”这两步之后,KV Cache里的数据变得异常规整。这时候,再对它进行粗暴的压缩(比如只保留2-bit精度,也就是用00,01,10,11四种状态来表示原本复杂的数字),误差就非常小了。因为数据已经没有“棱角”了,怎么压都压不坏。

效果到底有多离谱

这套组合拳打下来,效果确实有点颠覆认知。

论文里用了一堆变态难的测试集来折磨它,比如MATH500(高中数学题),AIME24(美国数学邀请赛),还有HumanEval(写代码)。这些都是以前KV Cache压缩技术的“鬼门关”,因为稍微有点误差,数学题答案就错了,代码就跑不起来了。

结果KVarN在2-bit这种极限压缩下,准确率居然还能死死咬住不压缩的FP16(浮点16位精度)不放。

这意味着什么?

原本你的显存只够存10万字的对话历史,用了KVarN,你可以存30万到50万字。原本你跑一个长任务,显存占用90%,用了它,显存占用可能降到30%。而且因为显存占用少了,显卡可以把更多算力放在计算上而不是搬运数据上,所以吞吐量(每秒处理的字数)反而超过了FP16。

这就像一个快递公司。以前每辆卡车只能装100个标准箱子,现在用了KVarN这种压缩技术,同样一辆卡车能装300个压缩过的箱子,而且卸货速度还更快了。最关键的是,它不需要“校准”。

很多压缩技术需要你提前拿一堆数据给模型“热热身”,让它看看要压缩的数据长啥样。KVarN不需要,拿来就能用。对于vLLM(一个非常流行的大模型推理框架)的用户来说,开启它只需要加一行参数,跟开个开关一样简单。

跟它兄弟SINQ的关系

如果你一直关注华为计算实验室的东西,你可能听过另一个名字:SINQ。简单理一下这两个的关系。

SINQ是搞“仓库管理”的:它管的是模型本身的权重。也就是模型脑子里那些固定的知识。把SINQ用在模型上,模型占用的硬盘空间和显存会变小。
KVarN是搞“物流运输”的:它管的是模型跑起来之后动态生成的草稿纸(KV Cache)。

它们俩是黄金搭档。一个帮你把仓库里的货物压缩了,一个帮你把运输路上的货车压缩了。而且它们用的技术底子有相通之处,都擅长在极低精度下保持性能。你可以只用一个,也可以两个一起用,效果叠加,让你的小显卡也能跑得动巨大的模型和超长的上下文。

谁应该立刻去试试这个玩意儿

这东西不是给所有人准备的。如果你平时就用模型聊个天,问个天气,上下文就几百个字,那你完全感觉不到KV Cache的存在,KVarN对你来说属于“杀鸡用牛刀”。

但如果你是下面这几类人,KVarN对你来说就是救命稻草。

第一类,Agent开发者。Agent这东西就像一个强迫症患者,它做事喜欢把每一步的思考、每一个工具调用的结果、每一次搜索的记录,全都记在上下文里。一个复杂的Agent跑一个任务,上下文长度随随便便几十万甚至上百万。KVarN直接能让它的“记忆容量”翻五倍,能处理更复杂的任务流而不用担心显存爆炸。

第二类,长篇小说作者或者代码生成器。你要是让它一口气写一万字的稿子,或者生成整个项目的代码框架,上下文很快就会变成显存杀手。KVarN能让你从“写两千字就卡死”变成“写一万字还游刃有余”。

第三类,任何在本地用显卡跑大模型,并且觉得显存不够用的人。尤其是那些用着24G显存显卡(比如RTX 3090/4090)的玩家,跑个70B模型本来就很勉强,如果再开长上下文,直接就崩了。KVarN能让你在这张卡上同时拥有大模型和长上下文,体验直接起飞。

说到底这玩意儿牛在哪

最后咱们再回到最初那个比方。大模型像是一个聪明的学生,KV Cache是他的草稿纸。以前的减肥技术都在给这个学生本人节食,让他脑子变小一点。但学生自己没瘦多少,草稿纸却越用越厚,最后把桌子都堆满了。

KVarN做了一件以前很少有人做好的事:它直接去处理了草稿纸。它通过“摇一摇(Hadamard Rotation)”把草稿纸上的大块字迹打散,通过“抹一抹(Variance Normalization)”把纸面铺平。经过这两道工序,草稿纸可以被压得很扁很扁,上面的字迹依然清晰可读。

在那些最容易因为误差累积而崩盘的推理任务里,它证明了压到2-bit也能保持清醒的头脑。这不仅仅是省了点显存,这是把大模型长上下文推理的物理极限往后推了一大步。如果说SINQ代表了模型权重量化的一个里程碑,那KVarN就是KV Cache量化领域的“SINQ时刻”,甚至可能更重要,因为上下文越长,KV Cache就越胖,这个痛点只会越来越痛。

总结

KVarN是华为计算系统实验室开源的KV Cache量化框架,通过Hadamard Rotation和双轴方差归一化技术,有效抑制长链推理中的误差累积。该方案无需校准,在2-bit量化下仍保持接近FP16的精度,显存占用降低至原来的三分之一到五分之一,吞吐量超越FP16,并已原生集成至vLLM框架,一条参数即可开启。


论文地址:https://arxiv.org/abs/2606.03458
项目地址:https://github.com/huawei-csl/KVarN