西湖大学 MetaKernelBench:AI写的GPU内核经验,换种语言还管用吗
sina qqZone renren ydCloud 0

不妨先想象一个场景:一位厨师用中式炒锅做菜,火候怎么控、翻炒什么节奏、调料按什么顺序下,全都摸熟了。如今换成西式平底锅做同一道菜,他脑子里那些“何时该大火”“何时该收汁”的判断,还能剩下多少用得上?
这听着像厨房里的闲话,其实是最近一批研究者在GPU编程领域反复琢磨的难题。
所谓GPU内核,就是跑在显卡上、针对特定计算任务高度优化的小程序。写得好,程序能快上几十倍;写得差,连结果正确都保不住。
如今的AI智能体已经可以自己动手写GPU内核,边写边测,把测试反馈当成指南针,不断修正方向。更聪明的做法是,它们会把摸索出来的经验记录下来,存进知识库,或者提炼成一份“技能笔记”,留给以后调用。听起来很美——一个智能体辛辛苦苦踩过的坑,下一回就不必再踩。
可有个问题始终没人说清楚:这些存下来的经验,真能派上用场吗?
过去的评测只盯着“这一次写出的代码对不对、快不快”,从没人追问“上一次攒下的经验,这一次是否真的帮到了忙”。这好比只给厨师的每道菜打分,却没人统计过,他从上一道菜里学到的东西,有没有让下一道菜变得更好。
西湖大学团队的这篇论文,正是冲着这块空白去的。他们搭起一套名为MetaKernelBench的评测体系,要回答的问题具体又尖锐:一个AI模型用A语言写内核时积累的经验,换到B语言继续解同一个问题,到底会帮倒忙,还是真管用?
换语言,不换问题:这个设计巧在哪里
要验证经验能否跨语言复用,头一道难关就是怎么设计对照实验。
假如让智能体用同一种语言反复写同一个问题,它上次攒下的“语言专属技巧”——比如某个API怎么调用更快——会被原封不动搬过来。这样测到的不是“经验的价值”,而是“记忆的价值”。
假如换成一个完全不同的计算问题,麻烦又来了:问题一换,之前学到的东西还有多少仍然相关?你没法分清,究竟是经验本身没用,还是问题变了才让经验用不上。
研究者的解法很干脆:问题不动,只换语言。
他们挑出74个来自真实生产环境的计算任务,覆盖注意力机制、键值缓存、MoE(混合专家模型)路由等六大类。每个任务都备了两个版本,一个用CuTe DSL,一个用TIRx。这两种都是能让程序员精细控制GPU内存和线程调度的专用编程语言,但语法和写法完全不同。
两个版本背后是同一个数学问题、同一套硬件、同一个判分标准,唯一的变量就是编程语言。这样一来,经验若真管用,那应该是因为它包含的是“底层逻辑”——比如“别把中间结果存出来,直接用”——而不是某种语言的语法技巧。
还是拿做菜打比方:让一位会做菜的师傅先用炒锅炒一盘青椒肉丝,再用平底锅炒同一盘青椒肉丝。食材、火候要求、咸淡标准全都一样,变的只是工具。师傅笔记里若写着“肉要先腌十分钟去腥”,这条经验换锅也成立;若写的是“炒锅颠勺三次让受热均匀”,换成平底锅就用不上,还可能让他在不该颠的时候瞎折腾。
研究设计的价值正在于此:它把“语言无关的硬核经验”和“语言专属的操作技巧”自然地分开了。哪条经验属于哪一类,不用人工标注,实验结果直接就能看出经验的真实成色。
怎么测:一场“单独做”与“带着笔记做”的对照
具体流程是这样的。
智能体接到每个任务后,会先不依赖任何外部经验、独自试上一遍,这一步叫做 solo attempt(单独尝试):全程没有外部提示,全靠自己摸索。
单独尝试结束后,无论这次代码写得对不对、快不快,智能体都得把这次摸索到的东西写成一份自然语言的“技能笔记”,论文里叫SKILL.md。
技能笔记是用自然语言记下的优化心得,里面可能有有效的发现,也可能有错误的猜测,论文里统称为“技能”(skill)。
重点在于“不管对不对都要记”。失败的尝试同样会生成笔记,而且这份笔记会被原样搬到另一种语言的新尝试里,不做任何筛选和过滤。
这个决定其实挺大胆。一般人的直觉是,失败的经验该过滤掉,只把“验证过有效”的东西往下传。研究者偏偏选择不过滤,把判断权交给实验数据本身:失败经验究竟也有价值,还是纯粹是噪音?
接着是关键对比。同一个任务、同一种目标语言,现在跑两次:第一次就是前面说的“单独尝试”,作为基线;第二次叫“技能条件化尝试”,把来自另一种语言的技能笔记塞进任务说明,让智能体带着这份笔记重新攻克同一个问题。
两次尝试的预算完全一致:40分钟时间、最多提交10次,差别只在于有没有那份笔记。这样一来比较才站得住脚——如果带笔记的那次表现更好,原因就只能落在笔记上。
可以这么理解:两个水平相当的学生拿到同一张卷子,一个提笔就做,另一个先翻一遍师兄留下的“考试心得”再动手,时限和题目都没变。看了心得的人考得更高,差异自然归到那份心得;反过来考砸了,说明心得有误导性,或者学生不加判断照单全收。
论文用**paired lift(配对增益)**这个指标把这层差异量化:把“带笔记”和“不带笔记”两次尝试的最终运行速度与正确性放在一起比,换算成一个比值,正数说明笔记起了作用,负数说明帮了倒忙。
结果:四赢两平,但没有谁稳赢
六个模型、两个方向(CuTe到TIRx、TIRx到CuTe),合起来共测了十二组数据。
四个模型在两个方向上都拿到正收益,分别是Gemini 3.7 Flash、DeepSeek-V4-Pro、GLM-5.3、GPT-5.6 Sol,提升幅度从2.3%到29.3%不等。GLM-5.3-Flash则两个方向都亏;Qwen3.8-Flash一个方向赚、一个方向亏。
有个数字需要单独拎出来说:
**整体配对增益的区间是从负19.1%到正29.3%**。
这个跨度本身就说明了问题。经验转移不是“永远有用”或“永远没用”的二元开关,效果取决于具体是谁的经验、转移到了谁身上。
更意外的是,那四个“两个方向都赢”的模型也没有全程稳赢。研究者发现,每个模型在每个方向上都有16%到45%的问题出现“退步”——带着笔记反而比单独做更差。平均下来是正收益,可落到某一道题上,完全可能撞上一次“帮倒忙”的笔记。
好比一个班平均分上去了,不等于每个人都进步,甚至可能有不少学生因为采纳了师兄的错误心得而考得更差。平均数盖住了个体之间的巨大差异。
那么,一份笔记能不能帮上忙,究竟由什么决定?
决定成败的不是对错,而是“相对位置”
这是整篇论文里我认为最有意思的发现。
直觉上,来自“正确实现”的笔记应该比来自“失败实现”的笔记更靠谱。数据给出的答案却更微妙:
**决定笔记价值的,不是源头尝试本身对不对,而是源头尝试相对于目标语言单独尝试的“相对水平”**。
论文把每次尝试的结果分成三档:失败、通过但速度低于2倍提速、通过且2倍提速以上。
再把源头尝试的档次和目标语言单独尝试的档次摆在一起对比。结果是:源头尝试档次高于目标语言单独尝试时,71.2%的转移有效,只有8.1%出现退步;源头尝试档次低于目标语言单独尝试时,局面反转,有效的只剩10.6%,退步的占到53.8%。
也就是说,笔记好不好用,要看它比“接收方自己能达到的水平”高还是低,而不是看它是不是来自一次成功的实现。
这个发现挺反直觉。它意味着,一份“失败但接近突破”的笔记,可能比一份“成功但很平庸”的笔记更有价值——后者相对目标语言的潜力而言,其实是在拖后腿。
就像一个数学本来就不错的学生,去借数学更差的同学的笔记,反而会被带偏,哪怕那份笔记工整、态度认真,内容本身的水平不够格。反过来,借到数学学霸留下的解题思路(哪怕他这次因为笔误没拿满分),反而能学到真东西。笔记的价值从来不看作者“这次考得好不好”,而看作者的水平和你自己的水平谁更高。
更根本的一点也在这里:**知识转移的价值并非绝对,它始终是相对的**。同样一份经验,水平高的人拿到手是往上走的台阶,水平低的人拿到手反倒成了拦路的石头。
哪些话容易“带坑”,哪些话靠谱
研究者还找了一批LLM标注员,按内容类型给每份技能笔记打标签,共分出11类,从“工作量普查”(枚举计算任务的具体特征)到“未经验证的论断”(没有实证支持却下了结论)。
有一类结论需要格外提防,论文里叫它**unsupported closure(未经证实的封闭性结论)**。指的是证据还不充分,就把别的可能性一口否掉,比如“这个递归运算没法用代数方式合并,必须保留原来的实现方式”。
六个模型里有五个在这类结论上呈现出相同规律:它出现在“帮倒忙”笔记中的概率,比出现在“真正有用”笔记中高出7到17个百分点。
道理其实不复杂。一份笔记写下“我试过了,这条路走不通”,拿到它的人往往就信了,不会再动手验证,整条探索路径就此被封死。万一这个结论本身站不住脚,接收方就白白丢掉了一个本来可行的方案。
论文里有个案例很能说明问题。GLM-5.3处理一个涉及递归运算的问题时,CuTe DSL的源头笔记写着“参考实现中的更新操作无法用代数方式折叠,否则会损失数值精度”,随后给出结论:“保留逐步的eager张量运算是必要的”。拿到这份笔记的TIRx版本尝试直接采信了这个论断,全程保持逐步循环的写法,原生实现的递归版本一次都没试过。最后,这次带着笔记的尝试比单独尝试慢了54倍——单独尝试那边恰好实现了一个折叠后的高效版本。
再看另一类内容,**verified reformulation(经过验证的重写)**,说的是笔记里明确报告“某种算法重写我已经实现并验证过是正确的”。Gemini 3.7 Flash、DeepSeek-V4-Pro、GLM-5.3这三个模型身上,这类内容出现在“有用笔记”里的概率比“帮倒忙笔记”高出7到9个百分点,算是比较靠谱的信号。可到了GPT-5.6 Sol这里,情况正好反过来。可见没有哪类内容是放之四海而皆准的“万能可靠标志”,模型之间的差异是真实存在的。
大模型和小模型,踩的坑不一样
那些“退步”的案例究竟怎么出的问题?论文为此做了一次失败归因分析。
问题被归成六类,其中有“搜索截断”(照着笔记的方案走,没去探索目标语言里本来更好的做法),有“未经验证地采信”(笔记里的某个论断是错的或没验证过,接收方没测试就直接信了),还有“执行出错”(方案本身是对的,但写代码的时候出了bug)等等。
结果分出清晰的两层:**DeepSeek-V4-Pro、GLM-5.3、GPT-5.6 Sol这三个规模更大的模型,出问题原因里65%到86%都是“被笔记带偏了”,也就是搜索截断加未经验证采信这两类**。GLM-5.3-Flash和Qwen3.8-Flash这两个表现相对弱一些的模型,问题反而主要出在自己的执行环节,占到63%到94%。
结果有些出人意料:**模型能力越强,反而越容易顺着笔记走,并非越弱越容易被带偏**。研究者在“退步”案例中还发现,大模型完整照搬笔记方案的比例比“成功”案例低6到16个百分点;小模型这一差距达到24到39个百分点。也就是说,大模型只要部分采纳笔记建议,就更容易出问题;而那些笔记被照搬得最彻底的情形,偏偏常常是出问题最严重的时候。
这就像一个经验丰富的老司机,拿到一份不太靠谱的导航提示,反而会因为过度信任自己判断路况的能力,忽略了路上的真实状况,照着错误提示一路开下去。刚上路的新手司机则不同,他本身就手忙脚乱,导航对不对已经不是出事的主因,更可能是自己打方向盘的时候出了问题。
还有一个隐藏的危险信号:错误经验会“传代”
论文还发现了另一个现象,让人略感不安。
一次“技能条件化尝试”如果接收了一份未经验证的笔记,它自己最后生成的新笔记,往往会把那条未经验证的论断原封不动地抄一遍,再传给下一轮。
数据显示,这种“错误传播”在退步的案例里出现的比例是17%到68%,成功的案例里只有5%到32%。也就是说,一条站不住脚的结论一旦混进笔记系统,不会自动被下一轮使用者纠正,反而有相当大的概率被原样复制、继续往下传。
这就像谣言在群聊里被转发,每一次转发都带着“听说”“据说”的前缀,可传到最后一个读的人手里时,这些限定词早就被省略掉了,谣言变成了“事实”。知识库系统要是没有纠错机制,积累下来的不只是有用的经验,也可能是层层加码的错误共识。
这件事到底说明了什么
论文没有给出“知识转移是好的”或者“知识转移是坏的”这种简单结论,它的答案更细致,也更有价值:
知识转移的效果,取决于转移出去的东西相对于接收方自身水平的高低,而不取决于这份经验本身听起来有多“正确”或多“自信”。
对正在构建AI智能体长期记忆系统的人来说,这个发现是个值得警惕的信号。现在不少团队都在做类似的事情,让AI系统把经验存进知识库,下次直接调用。但论文提醒我们,存起来的经验不是越多越好,也不是越“确信”越好。一份语气笃定、把各种可能性都排除掉的笔记,反而比一份谦虚地留着开放问题的笔记更危险。
写在后面
读完这篇论文,我印象最深的不是那堆百分比数字,而是那个“相对位置”的发现。
平常谈知识传承,我们习惯性地假设经验的价值是绝对的,好的经验传给谁都该是好经验。这篇论文却用实证告诉我们,一份经验是不是“好经验”,从来要看接收方是谁、接收方自己能达到什么水平。这跟教育领域一个老掉牙却经常被忽视的道理是一回事:同样的教学内容,因材施教和一刀切,效果可能天差地别。
另一个让我反复回想的细节,是那个“大模型反而更容易被笔记带偏”的发现。这跟我们“更聪明的系统应该更有判断力”的朴素期待是矛盾的。或许更准确的理解是,大模型的“听话”能力太强了,它能更精准地理解并执行一份笔记里的指示,但这种执行力本身不包含质疑能力。听得懂和会判断,是两件完全不同的事。
论文里那句“错误经验会传代”,我越想越觉得不能轻轻放过。假如一个AI智能体系统跑了成百上千轮,每轮都把上一轮留下的某些错误结论不知不觉接过来,那它的知识库最后会长成什么样?越滚越聪明,还是某个角落里慢慢堆起一批谁都没发现的历史包袱?论文只测了一轮转移。换成十轮、一百轮链式传下去,错误究竟会被不断稀释,还是反过来被反复加固,变成某种“系统共识”?这个问题论文没有回答,但我觉得该接着追问。
Q&A
Q1:MetaKernelBench是什么?这是西湖大学团队提出的评测体系。它专测一件事:AI模型用某一种GPU编程语言写内核时攒下的经验,换个语言还能不能帮上同一个问题的忙。体系涵盖74个真实计算任务,跨CuTe DSL和TIRx两种语言。
Q2:技能笔记转移一定能让AI写得更好吗?不一定。实验里六个模型,有的在两个方向上都拿到正收益,也有模型出现负收益。每个模型都有16%到45%的问题属于“带着笔记反而更差”,效果得看具体情况。
Q3:技能笔记管不管用,关键看什么?不看笔记来源那次尝试本身成没成功,而看它相对接收方自己单独尝试能达到的水平是高是低。源头水平更高时,71.2%的转移有效;源头水平更低时,53.8%会出现退步。