微信扫一扫,关注公众号

  • 科技行者

  • 算力行者

见证连接与计算的「力量」

首页 苹果公司研究团队发现:AI大模型的"记忆账单"贵得离谱,但其实可以大幅打折

苹果公司研究团队发现:AI大模型的"记忆账单"贵得离谱,但其实可以大幅打折

2026-05-05 14:06
分享至:
----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.-
2026-05-05 14:06 科技行者

这项由苹果公司研究团队完成的工作以预印本形式发布于2026年4月,论文编号为arXiv:2604.22782,感兴趣的读者可通过该编号查阅完整原文。

每次你用手机上的AI助手聊天、用电脑请大模型帮你写文章,背后的服务器都在做一件你完全看不见却极其耗资源的事情——把你说过的每一句话、每一个字,在模型的每一层"思考层"里都存一份"快照"。这份快照叫做KV缓存(Key-Value Cache),它是大模型能够记住上下文、生成流畅对话的关键。然而,这份快照的存储代价大得令人咋舌。

以目前广泛部署的Llama-2-7B模型为例,你输入的每一个汉字或英文词,在模型里只需要2到4个字节来存储原始信息,但它在所有层的KV缓存加起来却要占用约512KB的内存空间——这是原始信息体量的十万倍以上。苹果团队用了一个非常形象的例子:如果你把《爱丽丝梦游仙境》这本书的内容(约4万个词)输入Llama-2-7B,仅仅是存储这本书的上下文缓存,就需要大约1.4倍于整个模型参数文件的内存。换句话说,这台号称能把海量知识压缩进参数的"智能大脑",在处理一本普通小说时,居然需要比自己的"大脑重量"还多的临时记忆空间。

这就是苹果团队这项研究想要解决的核心矛盾。他们提出了一种叫做**随机跨层注意力**(R-CLA,Random Cross-Layer Attention)的训练方案,让模型在不损失太多能力的前提下,大幅减少需要存储的缓存层数,从而降低推理成本。

一、为什么AI模型的"记忆账单"这么贵

要理解这个问题,先要明白大模型是怎么"阅读"你输入的文字的。你可以把一个大型语言模型想象成一栋多层办公楼,每层楼都有一批分析师在工作。当你输入一段文字时,这段文字会从一楼开始,逐层往上传递,每一层的分析师都会对它做一番处理,提炼出自己这层的理解。

在这个过程中,每一层都需要把自己处理后的"理解结果"保存下来,以便后续生成回复时随时查阅。这些被保存的结果,就是所谓的Key(键)和Value(值),合称KV缓存。问题在于,楼层越多,存的东西就越多;你输入的文字越长,每层要存的内容就越多。当模型有32层、48层甚至更多层时,这些缓存叠加起来的总量就会变得相当可观。

在实际的服务器部署中,KV缓存会随着对话长度线性增长,同时还要乘以同时服务的用户数量(批处理大小)。这意味着,当服务器同时服务大量用户、或者用户输入非常长的文档时,KV缓存会迅速占满GPU的显存,导致服务器不得不减少同时服务的用户数量,或者限制用户能输入的最大文本长度。更麻烦的是,每生成一个新词,模型都要把所有层的KV缓存从显存里读取出来做一遍计算,这种"反复搬运大箱子"的操作会造成严重的延迟。

过去几年里,学界提出了各种减少KV缓存的方法。一类是"时间轴压缩"——在时间维度上做减法,即识别出哪些输入词不太重要,把它们对应的缓存直接删掉。但这种方法有个根本性的风险:一个词现在看起来不重要,不代表它之后也不重要。一旦删掉就无法恢复,可能导致模型回答错误甚至产生"幻觉"。另一类方法是通过改变模型架构来减少缓存,比如让多个"注意力头"共享同一份KV(分组查询注意力,GQA),或者让相邻两层共享一份KV(跨层注意力,CLA)。这些方法有效,但通常需要从头重新训练模型,成本极高。

苹果团队的切入点是另一个维度:**深度维度**。他们的核心洞察是,模型的不同层之间,其实存在大量的信息冗余。第10层存的KV和第11层存的KV,很可能高度相似,完全没必要都存。如果能让第11层直接借用第10层的KV,就可以省掉第11层的存储开销,而模型的表现未必会有明显下降。

二、旧方法为什么行不通,苹果的新方案做了什么

既然深度维度有这么大的优化空间,为什么之前的方法没有很好地解决这个问题呢?

之前的研究尝试过几种路线。有人尝试让所有层共享同一份KV缓存,但为了保证质量,需要一个独立的双向编码器来生成这份共享缓存。问题在于,每当新增一个输入词,就需要重新运行这个编码器,计算开销很大。另一种方法是让所有层都直接使用最顶层的KV,但这需要多次前向传播才能得到足够准确的顶层结果,导致处理用户输入(预填充阶段)的时间大幅增加,用户等待第一个回复词出现的时间变长。还有一种"事后诸葛亮"式的方法:模型已经训练好了,强行让相邻层共享KV,但因为模型从未见过这种操作,效果有限。

苹果团队提出的R-CLA从训练阶段就下手,思路干净利落:**在模型训练时,随机决定每一层是用自己的KV还是借用前面某一层的KV**。

具体来说,对于模型中的每一层,在每一次训练的前向传播过程中,系统都会抛一枚"硬币"。如果正面朝上(概率为p),这一层就正常运作,用自己生成的K和V来做注意力计算。如果反面朝上(概率为1-p),这一层就不用自己的KV,而是随机从它前面的某一层里借一份KV来用。

这个过程就像训练一个人在嘈杂环境下工作。如果一个分析师每次都只能看自己的原始资料,他会对自己的资料形成强烈依赖。但如果经常强迫他去查阅楼上或楼下同事的资料来完成任务,他就会慢慢学会如何从各种不同格式、不同层次的资料中提取有用信息,最终变得更加灵活。

训练完成后,部署时就可以采用一种"固定借用方案":比如只给第1、5、9、13层……存KV,其余层全部借用离自己最近的、已存储的那一层的KV。由于模型在训练时已经见过各种随机借用场景,它不会对这种固定方案感到"陌生"。最关键的是,同一个模型可以在不同硬件条件下灵活调整借用比例:内存充足时存更多层的KV,内存紧张时只存少数几层的KV,不需要为每种硬件配置单独训练一个模型。

从算法层面看,传统推理时,每经过一层都要从显存中把这一层的KV数据搬出来、计算完再搬回去,如此重复L次(L为总层数)。引入深度维度共享后,非"领导层"(不存自己KV的层)只需加载一次已有缓存,跳过自己的K、V投影计算,从而节省了大量重复的显存读写操作。

三、从训练到部署:完整的实验验证

苹果团队从两个截然不同的角度验证了R-CLA的有效性:一是从零开始的预训练实验,二是在已有大模型上做任务特化的微调实验。

**预训练实验**的目的是验证R-CLA是否会破坏模型的基础训练稳定性。毕竟,如果一种方法在训练过程中引发震荡、导致损失无法收敛,那它再好也没有实用价值。团队使用Qwen3-1.7B架构的模型,在OpenWeb语料库上从零训练,总训练量约340亿个词(这是该规模模型的计算最优训练量)。他们测试了p=0.25、0.5、0.6、0.75四种配置,也就是说最激进的情况下,75%的注意力操作都被强制借用其他层的KV。

结果令人欣慰:在p=0从标准训练到p=0.75的极端配置下,最终验证集损失仅从2.424小幅上升到2.461,增幅不到2%。训练曲线全程平稳,没有任何不稳定的迹象。这说明R-CLA完全可以作为预训练的一部分,从模型诞生之初就引入,而不会破坏训练过程。

更有趣的对比实验是:将"深层模型+KV共享"与"浅层模型+完整KV"在相同缓存内存预算下进行比较。例如,一个28层模型开启p=0.5的R-CLA(相当于只存14层的KV),与一个14层的标准模型(存14层的KV)相比,哪个更好?答案是28层的R-CLA模型在所有测试的缓存预算下都显著优于14层的浅层模型。这个结论非常重要:**深度带来的能力提升是真实的,而这种能力在KV共享的情况下依然能保留下来**。换句话说,深层模型的价值不仅在于它的KV缓存,更在于它的多层变换能力本身。

**微调实验**则更贴近实际应用场景。团队选取了问答(QA)任务作为测试场景,因为这类任务要求模型必须从输入的长文本中精准提取信息,对KV缓存的完整性要求极高——如果缓存丢失了关键信息,模型就会答错。

实验涉及三个主流模型:Qwen3-8B、Mistral-7B和Llama-3.1-8B,五个数据集:需要多跳推理的HotpotQA、考察阅读理解的SQuAD v2、信息检索类的MSMarco和TriviaQA,以及专门用虚构内容测试的RepLiQA(这个数据集的妙处在于,因为内容是虚构的,模型不可能依赖预训练中学到的知识来作弊,只能老老实实从输入文本里找答案)。

测试时设置了三种缓存保留比例:100%(所有层都存KV,正常情况)、50%(只存一半层的KV)、25%(只存四分之一层的KV)。

以Llama-3.1-8B在HotpotQA上的表现为例,标准训练的基线模型在保留50%缓存时F1分数从0.203跌至0.171,保留25%时更是惨跌至0.080;而经过R-CLA微调的模型,在保留50%时几乎维持在0.305,保留25%时也还有0.237——是基线模型的接近三倍。这种差距在Qwen3-8B上更为夸张:保留25%缓存时基线模型F1只剩0.011,而R-CLA模型达到0.098,提升了超过八倍。TriviaQA上甚至出现了更极端的情况:Qwen3-8B基线模型在25%缓存下F1只有0.005,而R-CLA模型达到0.131,提升幅度超过2000%。

不仅在缩减缓存的场景下表现更好,R-CLA在保留100%缓存(即正常使用)时,往往也不比甚至优于基线模型。以Llama-3.1-8B为例,HotpotQA满缓存下R-CLA比基线高出51%,SQuAD v2高出30%。这一现象说明R-CLA的随机训练机制带来了某种类似正则化的效果,让模型不容易过拟合到训练数据上,泛化能力更强。

四、随机性到底起了什么作用——消融实验的答案

R-CLA中有两个关键要素:一是跨层共享KV这件事本身,二是"随机"地决定借哪一层。为了搞清楚这两者各自贡献了多少,团队做了一组消融实验,对比了四种变体方案。

第一种叫CLA@2,即固定每两层共享一份KV,训练和测试都用这个固定方案。第二种叫CLA@4,即固定每四层共享一份KV。第三种叫RD-CLA@2,训练时用固定的每两层共享方案,但每次前向传播时随机决定是用共享的KV还是自己的KV。第四种就是完全随机的R-CLA,不固定共享哪层,完全随机。

结果显示出清晰的规律。在100%缓存保留(也就是测试时不做任何缓存删减)的情况下,CLA@k方案有时能略微超过R-CLA,说明在"能力提升"这一点上,KV共享本身发挥了主要作用,随机性的贡献相对有限。但当缓存被削减到50%或25%时,情况完全反转:固定方案的CLA@k急剧下滑,因为测试时的削减方案与训练时的固定方案不匹配,模型毫无准备;而R-CLA因为训练时见过各种随机借用方式,能优雅地适应各种削减比例,表现远超所有固定方案。

这说明随机性的核心价值不在于提升模型能力,而在于赋予模型**灵活性**:同一个R-CLA模型可以在不同的硬件环境下以不同的缓存削减比例部署,而CLA@k模型只能在它训练时对应的那个固定比例下表现最好。

五、实实在在的推理效率提升

研究团队还专门做了工程层面的效率测试,使用与Qwen3-8B规模匹配的架构(36层,8个KV头,bfloat16精度)在单块80GB GPU上进行了系统性基准测试。

在输入长度为8192个词、组大小g=4(即每4层共用一份KV)的配置下,KV缓存从基线的1170MB降至293MB,减少了75%。解码吞吐量从每秒34.0个词提升至41.6个词,提升约22%。时间到首词(TTFT,用户输入后等待AI开始回答的时间)基本持平,说明引入KV共享不会让用户感觉响应变慢。

在批处理规模扩展测试中,当同时服务16个用户、每人输入约8K词时,标准基线方案直接因显存不足而崩溃,而g=4的共享方案仍能正常运行,峰值显存60GB,吞吐量8.0词/秒。这意味着在同等硬件条件下,KV共享方案可以服务更多并发用户,或者支持更长的上下文长度,对实际的服务能力提升相当直接。

团队也坦承,这些测试结果还是偏保守的下限。目前的实现虽然跳过了非领导层的KV投影计算并节省了缓存分配,但注意力计算本身仍然需要从高带宽内存中读取KV数据,不管这份KV是自己的还是共享来的。如果在底层做更深入的融合优化——比如把相邻共享层的注意力计算合并成一次显存读取操作,理论上还能获得更大的效率提升。

六、这项工作的边界和未来方向

研究团队在论文中诚实地列出了这项工作的局限性。R-CLA需要进行训练或微调,不能直接应用于已有的标准模型,这对没有足够计算资源的用户来说是一个门槛。实验主要在问答任务上进行,虽然这类任务对缓存完整性要求很高,是很好的测试场景,但更广泛的任务验证会让结论更有说服力。此外,研究团队尚未在混合专家(MoE)架构上测试,也没有探索过度训练的场景。KV共享与时间维度的缓存驱逐方法或KV量化方法的组合效果也有待验证——理论上这些方法彼此正交,可以叠加使用,但需要实验确认。

说到底,这项工作的核心贡献可以用一句话概括:通过在训练时引入"强迫借用"的随机扰动,让模型学会了在记忆不完整的情况下依然正常工作,从而在部署时获得了大幅削减缓存开销的能力,而且这种能力可以灵活匹配各种不同的硬件限制。

这对普通用户意味着什么?最直接的影响是,在同等硬件条件下,未来的AI服务可以同时处理更多用户的请求,或者支持更长的对话历史,而不需要购买更多昂贵的GPU。对于需要在手机、笔记本电脑等边缘设备上本地运行AI模型的应用来说,这项技术更是打开了一扇门——通过削减75%甚至更多的KV缓存,原本只能在服务器上运行的8B参数模型,有可能真正跑在内存受限的消费级设备上,而性能损失控制在可接受范围之内。

如果你对这项技术的细节感兴趣,可以通过arXiv编号2604.22782查阅完整的原始论文,里面包含了完整的实验数据、算法伪代码和训练曲线。

---

Q&A

Q1:KV缓存是什么,为什么它会占用那么多内存?

A:KV缓存是大语言模型在处理文本时,每一层网络保存的中间计算结果(键Key和值Value)。模型在生成每个新词时都需要回顾之前所有的输入内容,KV缓存让它不必每次重新计算,但代价是每一个输入词在每一层都要存一份数据。以Llama-2-7B为例,一个词的KV缓存约512KB,比原始词本身大十万倍以上,文本越长、模型层数越多,占用的内存就越庞大。

Q2:R-CLA训练方法和普通的跨层注意力(CLA)方法有什么本质区别?

A:普通CLA在训练时固定某个层共享方案(比如每两层固定共享一份KV),模型只学会应对这一种固定配置,换一种削减比例就会性能崩溃。R-CLA在训练时完全随机决定每层借哪层的KV,让模型见过几乎所有可能的共享方式,从而训练出来的单个模型可以在部署时灵活适应任意削减比例,不需要为不同硬件单独训练不同版本。

Q3:R-CLA方法减少KV缓存后,模型回答问题的质量会下降多少?

A:在50%缓存保留率下,经过R-CLA微调的模型性能几乎与满缓存持平,有时甚至更好。在25%缓存保留率这种极端削减下,基线模型往往会出现灾难性崩溃(F1分数跌至接近零),而R-CLA模型仍能保留相当一部分能力。满缓存使用时,R-CLA模型在多数任务上还略优于基线模型,苹果团队认为这是随机训练带来的类正则化效果。

分享至
0赞

好文章,需要你的鼓励

推荐文章
----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.-