Kimi K3技术报告解析:选择性遗忘如何破解大模型内存墙

别信什么AI过目不忘,Kimi K3偏靠“选择性失忆”堆出2.8万亿参数,这科学吗?

大模型圈最近炸了锅,因为月之暗面搞出的Kimi K3居然有2.8万亿个参数,可它最狠的一招不是死记硬背,而是学会了像人一样“忘掉”大部分废话。这听起来就像你花大价钱雇了个超级学霸,结果他干活时全靠小抄和白板,之前的笔记说扔就扔。但人家就靠这个拿下了开源模型里的头把交椅,把什么上下文长度、推理速度的纪录全给刷新了。

今天咱们就扒开这个号称“最不讲武德”的AI,看看它是怎么通过主动遗忘来干掉内存瓶颈,顺便把每百万token的调用成本给你打到地板价的。

大模型的内存账单有多离谱

咱们先算笔账。你平时跟AI聊天,它并不是每句话都从头想一遍,而是有个类似“草稿本”的东西,工程师管这叫KV缓存。这个草稿本上记着你们聊过的每一个字,在每一层神经网络、每一个注意力头里都留了份拷贝。这么做的确省了重新计算的功夫,但问题是这草稿本越写越厚,每多一个字,它占的地儿就多一块。到了K3这个级别,你问它个复杂点的问题,光是翻这个草稿本就能把显卡内存吃干抹净,导致要么模型装不下,要么同时用的人得排队,要么回复速度慢得像老爷车。

更扎心的是,这个内存账单不是按字数简单叠加,而是在每一层、每一个头上都重复计费,直到把整个芯片的容量撑爆。这就好比你在一个巨型会议室里开会,每进来一个人,就得给他在每个角落都放一份一模一样的会议记录,最后整个屋子全堆满了纸,连站的地儿都没了。所有大模型都得面对这个坎,但对于咱们国内的团队来说,这个问题尤其要命。

为啥呢?因为漂亮国那边搞芯片封锁,咱们拿不到最先进的GPU,所以不能在硬件上简单粗暴地堆内存。这就逼着国内的研究员们必须在软件算法上做文章,把每一比特的内存都榨出油来。人家DeepSeek先想了个办法叫多头潜在注意力,简称MLA,相当于把草稿本上的每个字都写成微缩胶卷,原来记一个字的格子现在能塞进去五十七个字,内存直接砍掉百分之九十三点三,吞吐量翻了快六倍。但这招虽然让每页纸变薄了,可页码该涨还是涨,对话一长,本子还是厚得离谱。

四招帮你把内存账单打下来

为了让你看清这帮大神是怎么折腾这个内存问题的,咱们拿个最简单的小例子说事儿。假设AI一开始知道“Acme公司的计划会议定在周二,地点是4B房间,有六个人参加”,然后新来了条消息说“会议改到周四了”。模型得根据这堆信息预测出下一句话是“会议现在在周四开”。目标答案都一样,但不同的省钱套路会导致AI脑子里剩下啥玩意儿完全不一样。

归纳下来无非四种路数:共享笔记、压缩笔记、丢掉旧笔记、或者干脆换块白板。

先说共享笔记这招,行话叫分组查询注意力,现在已经是Llama、Qwen这些主流模型的标配了。你想啊,一个模型里那么多注意力头,有的盯着日期,有的盯着人名,有的盯着变化。要是每个头都自己记一份完整的笔记,那得浪费多少纸?分组查询注意力的做法是让四个头共用一份笔记,大家各问各的问题,但看的是一份材料,照样能推出“周四”这个答案。这就把重复的拷贝给去掉了,但共享归共享,历史的页码还是在疯涨。

第二招压缩笔记就是刚才提到的MLA,它不砍页码,但把每一页的内容缩成一张小卡片。原本需要三万两千八百个数字才能描述的信息,现在压缩到五百七十六个数字就能对付,重建的时候还能把关键信息还原个八九不离十。Acme公司的会议记录在它那儿就是一行一行的压缩卡,每次新来一条消息就加一张卡,卡片本身很便宜,但架不住数量一直往上窜。

第三招更狠,叫滑动窗口注意力,它直接给笔记本设了个硬性上限,比如最多只记最近四千个字,新来一条就把最旧的那条扔出去。在咱们的例子里,假设小桌板上只能放四张卡片:客户名、原定日期、地点、参会人数。当“改到周四”这条新消息进来时,最旧的“客户是Acme”这张卡片就被挤出去了,模型照样能预测出“周四”,但你要再问它客户是谁,它早就不记得了。这招被Mistral用过,Gemma也混着用,内存是不涨了,但想要精确回忆窗口之外的东西就得另想办法。

最后一招最极端,叫线性注意力,它连每页笔记都省了,每个头只维护一个固定大小的状态,好比一块小网格,读到一个新信息就直接在这个网格上原地更新。还是那个会议例子,这就变成了一块大白板,上面分几行写着客户、日期、地点和人数。当“改到周四”这条消息进来时,它直接把周二覆盖成周四,白板的大小从头到尾不变。整个模型从Mamba到DeltaNet再到Gated DeltaNet都在沿着这条路走,内存永远不涨,但在精确回忆上总是差那么点意思。

Kimi Delta Attention让固定白板也能打

共享和压缩保留的是不断增长的历史,滑动窗口和线性注意力靠牺牲点儿精确性换来内存不涨。月之暗面接下来干的事儿就是测试这种固定大小的记忆到底能不能既要便宜又要好用。他们在去年十月先放出了一个叫Kimi Linear的试验品,有四百八十亿参数,权重和代码全公开,里面的注意力机制就是Kimi Delta Attention,咱们就叫它KDA吧。

KDA说白了就是一个循环状态机,每个字跑一遍。它随身带着一块固定大小的记忆板S,每来一个新token,就用它的键和值去更新这块板,然后用查询去读这块板,更新后的板再传给下一个token。板子上的内容一直在变,但尺寸纹丝不动。这么干便宜是便宜,但有个致命伤:万一模型需要精确找回很久以前某句原话,固定白板就不太靠得住了。所以K3留了个后手,四层里面有一层留着MLA做精确回忆,另外三层用KDA做固定状态更新。

为了确认这套路到底管不管用,月之暗面做了个硬核对照实验。他们用一模一样的数据、一模一样的模型大小、一模一样的训练配方,同时训了两个四百八十亿参数的模型,唯一区别就是注意力机制不同。一个是用传统全注意力的,越记越多;另一个是KDA混合的,大部分层用固定白板,四分之一层保留压缩过的精确回忆。后来论文里说的降低七成半内存、生成速度快六倍、跑一万两千八上下文时得分还更高,全是从这场正面硬刚里得出的结论,不是纸上谈兵。

接下来KDA做了两处关键改良。第一是改更新规则,原来白板只能往上加东西,新旧信息会互相干扰。KDA引入了一个叫delta规则的算法,每来一个新token,它先让旧记忆衰减一下,然后抹掉当前键对应的旧关联,最后才写入新值。还是Acme那个例子,白板上本来有三行:客户是Acme、预算是八万刀、会议是周二。新消息说“会议改到周四”,KDA不是加第四行,而是直接找到会议那一行,把周二擦掉改成周四,白板仍然只有三行。这个操作背后有个更新公式,其中β控制当前这对键值对改得有多猛,α控制旧状态保留多少。

第二处改良更绝,他们把遗忘速度从一个粗调旋钮变成了128个精细旋钮。以前的模型一个注意力头只用一个α值,所有通道一起忘。KDA给状态里的一百二十八个通道各自配了个可学习的α值,白板大小还是一百二十八乘一百二十八,但每块区域怎么忘可以单独调节。人名和意图能留得久一点,填充词和停顿词消失得快一点。而且这个衰减模式本身就带了时间信息,一个信号衰减得越久,它的痕迹就越不同于新鲜信号,这让后面的MLA层连单独的位置编码都省了。

当然,固定记忆在精确检索远距离细节时依然不是最可靠的,所以Kimi Linear在每三个KDA层后面插一个MLA层。他们试过别的比例,结果全用MLA的表现最差。K3沿用了这个三比一的节奏,只不过把MLA升级成了带门的门控MLA,在压缩后的精确回忆路径上多了个按通道控制的输出门,能让模型决定从历史里取多少信息进入主流程。四分之三的层用固定大小的状态,四分之一保留压缩的逐字记录,这样既拿到了大部分内存节省,又不牺牲精确信息的召回路径。

换个注意力机制能省多少钱

所有这些改进在Kimi Linear那个四百八十亿的试验台上都量出了实打实的数据。跟它那个一模一样的全注意力双胞胎兄弟比,KDA混合模型做笔记的内存少了足足百分之七十五,因为四分之三的层根本不存每字记录,剩下四分之一存的还是压缩了五十七倍的小卡片。省下来的内存直接让一块芯片能同时服务好几倍的人,输出吞吐量最多翻了六倍,跑一万两千八上下文时速度快了将近四倍,在专门测长记忆的标准考试RULER上拿到了八十四点三分,比全注意力的兄弟还高。最关键的是,不管短任务长任务还是强化学习,都没测出质量上的损失。

试验台证明了这套混合方案能在不牺牲质量的前提下大幅降低内存占用,于是月之暗面放心大胆地把这个设计原样搬到了一个五十八倍大的模型上。从去年七月一万亿参数的K2,到十月四百八十亿的KDA试验台,再到今年七月两万八千亿参数的K3,这条路走得一步一个脚印。K3每个token虽然只激活一千零四十亿参数,但整个模型要撑住一百万token的上下文窗口,要是每个字都在每一层做笔记,按照开源模型现在的定价卖,早就亏到裤子都没了。

K3肚子里还藏了哪些狠活

解决了上下文内存怎么涨的问题只是第一关。K3内部还有一堆配套改造,每个都对应着规模扩大后冒出来的新瓶颈。注意力残差让信息在穿过上百层后还能被后面的层直接捞到,不至于被层层混合给搅没了。标准Transformer是一股脑把所有层都倒进一条河流里,后面想找前面某层留下的语法线索或计划意图,早就被冲得没影了。K3允许后面的层用一组可学习的权重直接回头看前面层的输出,比如权重零点六、零点一、零点三,这个分配清清楚楚。

专家系统那边,K3用了八百九十六个专家,但每个token只唤醒十六个路由专家加两个共享通才,所以两万八千亿参数里真正干活的只有一千零四十亿。但问题来了,专家一多,GPU之间传消息的开销可能把省下来的计算全给吃回去。他们搞了个叫稳定潜在MoE的东西,在发消息之前先做一道潜在投影,把要传的数据压扁了再扔出去,让通信链路不至于堵死。

路由均衡也是个头疼事,因为专家们会偷懒,大家都爱往那么两三个最顺手的专家那儿跑。传统做法是加个人工调的惩罚系数,K3换了个新思路叫分位数均衡,它给每个专家算个自己的路由分数门槛,高于这个门槛的才接活,低于的就歇着。这么一来不用额外拧旋钮,专家之间的负载就自动均匀了,原来可能四个专家干活量是四三一零,被它一掰正就成了二二二二。

优化器层面也有新花样。Muon本来是用来更新模型权重的规则,标准做法是把所有注意力头捆成一大块一起更新,结果个别信号强的头会带偏整个节奏。K3改成每个注意力头单独更新,一个头再强也管不着别人。四比特量化则解决了存储问题,大多数模型是训完了再压缩,质量总会掉一截。K3在训练的后半段就带着四比特的紧箍咒在学,早早适应了这个限制,质量损失比事后硬压要小得多。这一套组合拳下来,几乎每个部件都在干同一件事:把一个粗放的大控制拆成若干个独立调节的小控制。

这么大个玩意儿到底怎么训出来的

训练分三个阶段。

第一阶段是打地基,给K3喂海量的网页文本、代码、数学题、知识库还有视觉数据,图像视频文本全走同一个骨干网络。这个阶段它学的是通用的语言、推理、编程和看图能力,为后面当智能体打底子。第二阶段上强度,用强化学习让它干各种长活儿,写代码、当网页代理、做科研、处理专业知识,一次任务可能要跑成百上千次工具调用,模型得在循环里反复演练:行动、检查结果、调整策略。这个阶段还会训练好几个不同力度的思考模式,所以最后发布的模型既可以快速回答也能深度思考。

第三阶段是整合,把不同方向上训出来的专家策略蒸馏到一个最终模型里。写代码厉害的、当代理机灵的、做推理缜密的,各自在最强任务上做决策,然后让主模型跟着学,最后只输出一个检查点,在不同任务间切换不用换模型。配套的基础设施也全放出来了,FlashKDA是专门为KDA写的GPU内核,让内存更新在真实硬件上跑得飞快。MoonEP管着八百九十六个专家之间的通信。AgentENV是个可恢复的沙盒环境,跑一半崩了不用从头再来。

K3到底擅长干啥以及价格有多香

月之暗面给K3设计的考核全是长活儿,比如花一整天改软件工程问题、做网页浏览代理、处理专业文档、还有那种写代码看渲染结果再改的视觉编程。这些任务会反复回到同一个代码库、同一批文档、同一套工具定义上,所以上下文重用的成本比窗口长度那个数字本身更有实际意义。在他们自己公布的测试结果里,K3排在Claude Fable 5和GPT-5.6 Sol后面,但已经超过了所有开源模型。

价格优势从第二次请求才开始显现。Kimi会自动缓存重复的初始上下文,不用你额外传什么缓存ID。把系统提示词、工具定义、长文档或者代码库放在前面,保持不变,后面再追加上每次变化的具体任务。缓存没命中时每百万输入token三美元,命中了就只要三毛钱,输出部分十五美元。一个完全缓存好的百万token工作集,重复使用一次才三毛钱。这个价格不光是KDA的功劳,还靠Mooncake服务架构去找到并复用那些固定的前缀,让一个智能体反复回到同一个代码库时不用每次都从头重读。官方报告说在编程任务上缓存命中率超过百分之九十。

他们还拿K3搭了两个演示项目,一个叫minitriton的编译器,连前端语言、基准测试和文档都是它自己写的。另一个叫nano-kpu,是个推理芯片的寄存器级硬件设计。这两样东西都需要在序列里做几千次小修正,每一步都依赖前面的决定,正好撞K3枪口上。不过话又说回来,模型名字可以随便换,但内存限制这堵墙谁都绕不开。下次哪个实验室宣布一个超长上下文窗口却卖得贼便宜,你直接三连问:什么被压缩了?什么被扔掉了?五十万字以前的精确细节还找不找得到?这些取舍才是模型卡里最有用的信息,比那个上下文窗口数字实在多了。

总结一下:K3靠着选择性遗忘,在大多数层里用固定大小的记忆状态代替无限膨胀的KV缓存,只在四分之一层保留精确回忆的路径。这个设计让它用开源模型的价格干出了接近闭源顶流的活。

不过话说回来,咱们也该想想,一个靠“忘掉大部分、只记关键点”的模型,真到了需要一字不差回溯半年前某次对话细节的时候,它会不会理直气壮地给你瞎编一通呢?毕竟,它连自己忘掉了什么都不知道。