前些天 arXiv 上那篇《XLA from the Trenches》,我刷到摘要就点进去了,本来只想扫一眼 TPU 性能数字。翻到中间撞上"正确性"三个字——142 个编译器缺陷,103 个还在评审。这数字让我坐不住。我不跟你论那论文写得好不好,我想把它身后那件到现在还没名字的事,先起个名字。
你大概也撞见过这种时候:线上 TPU 任务跑了三个小时,指标说飘就飘,日志翻烂了也找不到一条像样的报错;同事群里有人冒一句"把某个优化 pass 关掉数值就正常了",再追一句"哪个 pass 哪一步坑的你",他就只能干瞪眼。单看每一件都像玄学,像机器闹脾气。摆到一起再看,就不一样了——这块空地,得有个名字。
AI 编译器这圈子,天天挂在嘴上的是峰值性能、吞吐、时延。正确性是那个默认已经对好的黑箱,没人去动它。编译器静默出错这事,没有名字;更没人给那篇论文干的那套动作起过名字——主动把它猎出来、切到根因。大家出了数值问题,只会说"估计是编译器的锅",然后散了。没有共同把手,连"该不该查、由谁查、查到什么程度"都吵不到一个点上。
等等,按我自己的规矩,得攒到三个独立来源的同类样本才该吹号。现在是一个大的——那篇论文,加上一堆我自己都记不清来源的模糊记忆,最多算一个半。这篇有抢拍嫌疑。这算我边走边唱的一次抢拍,先把号吹出来,你再告诉我它音准对不对。
我把它叫做:猎错。不是测试,不是调试,是猎错——像猎人一样,不等目标叫唤,直接进丛林里把它逼出来、切开、定位到是哪个操作在捣鬼。
为什么不能就叫模糊测试或者差分测试?因为传统模糊测试主要是喂随机输入等崩溃。可这些错很少崩,崩了倒好对付。它们藏得深:融合内核把好几个操作熔成一个,数据在里面来回倒,一个环节把缓冲区写偏一点,外面看还像正常在跑,等你训练跑完才发现梯度方向早偏了。模糊测试能逼出一些坏东西,但逼出来了还得有人去复现、去定位。那篇论文真正狠的,不是单点 fuzz,是它把模糊测试和 AI 智能体集群和分层差分流水线接成一条链:合成样本和真实生产轨迹两个入口一起灌,AI 智能体自动复现失败、起草修复,分层差分把一张大图一次次对半切,最后落到某个融合内核里具体哪个操作上。它解决的那 142 个缺陷,不是纸面报告,是已经出在生产线上让人头疼过的真家伙。
这就是我为什么要造"猎错"而不是叫它"验证"。验证这个词太轻了,轻到谁都能说自己做了验证。跑一遍固定单测是验证,把 compiler flag 全开跑一遍 benchmark 也叫验证。但猎错不是验收型动作,是主动出击型的:你知道这丛林里藏着坏东西,不一定知道它在哪、也不一定知道它长什么样,你得有一套流程把它搜出来,还逼它现形到操作级。这个词得把"主动"和"自动"两层都锁进去,不然就只是给旧调试换了个壳。
你下次在群里听到谁说"我训练指标漂了,没报错",别再说"再查查日志"这种正确的废话。直接问一句:猎错安排了吗?这句话一出口,问题就从"玄学"被挪到了一个可执行的格子上——有没有用 AI 集群自动压测,有没有自动复现并切到具体操作。如果哪个工具团队说他们做了"验证",你就拿这个词去校:是猎错,还是跑了一遍固定套件就收工了?没有自动复现和根因定位的"验证",就是走过场,跟猎错是两码事。
这个词的作废条件我放这儿:半年内,如果没有第二个我在公开场合见着的人用它,或者大家把"猎错"用成了"人肉翻日志",我就回炉。猎错这个名字的音准,锁的是"机器集群自动逼近、人签收结果"的那套东西,不是往"调试"上再多贴一张皮。错在进化,验证这活不进化,这个词就白造。
这一号可能抢拍了,但总得有人先把把柄钉进去。不然这团现象到现在还被叫"见鬼的编译错",叫到哪年?这号我吹了,你先接住——半年后没人接,我自己回炉。
