第一集:服务器里的鬼
李昊第一次发现异常,是在一个普通的周二下午。
他盯着屏幕,摩擦了一下眼角,以为是自己看错了。
他们的 GPU 集群在跑一个训练任务,是一个语言模型的微调,规模不大,流程标准,代码是他亲手写的,跑了几百次都没出过问题。但这次的 loss 曲线不对——不是变差了,而是有一段时间,每隔固定的步数,就会出现一次极小的规律性抖动,幅度不到 0.001,正常人根本不会注意。
他注意到了。
是因为那个抖动的间隔——他盯着看了很久,数了数,是 37 步一次。
不是常见的 2 的幂次,不是 batch size 的倍数,不是任何训练超参数能解释的数字。
他写了个脚本把那些抖动的步数打出来,37、74、111、148……全是 37 的倍数。
他把这件事告诉了同事小陈,小陈皱着眉头看了看,说:硬件问题?有没有可能是某块 GPU 有轻微缺陷,每隔固定周期就犯一下?
这个解释合理。李昊查了硬件监控,没有发现任何异常。
然后他换了一个集群,重新跑了一遍同样的任务。
还是 37 步。
他在日志里翻了很久。
那些抖动的 loss 值,严格来说,是一种扰动——就是在正常的数值上多了一点点东西,极小,可以忽略,如果不是他专门画图,绝对看不出来。
问题在于,那种规律不可能是随机的。
随机扰动是有统计规律的,会符合某种分布,均匀的,或者正态的,或者带权重的——但无论哪种,不会是固定间隔的周期性。固定间隔意味着有某个周期性的输入,而他们的训练数据是随机 shuffle 的,绝对不会有任何周期性结构。
他又换了一套训练数据,重新跑。
还是 37 步。
这次他不淡定了。
他做了一件有点偏执的事:把那些抖动点的 loss 值提取出来,做了傅里叶变换,看看有没有什么频率成分。
结果出来的时候,他盯着屏幕看了很久。
变换结果里,有一些很清晰的频率峰——这本身不奇怪,周期性的东西当然有频率。但那几个峰的比值是 1:3:9:27,是一个等比数列,公比是 3。
李昊盯着 1:3:9:27 这四个数字,脑子里有什么东西在转,但他说不清楚那是什么感觉,就是有点不对劲,不是代码上的不对劲,是另一种……像是什么东西在他脑袋外面贴着,透不进来。
他把屏幕截图发给小陈,说:你觉得这正常吗?
小陈回了半天,说:我觉得你在看幻觉,去休息一下。
他关掉了电脑,去楼道喝了杯咖啡,站在窗边,看了一会儿北京夜里的楼。
他三十二岁,在这家 AI 公司做了四年,是技术负责人,带着十八个人,不相信任何他解释不了的事情。
但 1:3:9:27 这四个数字,在他脑子里转了一夜,没有消。
第二天早上,他刚到公司,就收到了一条消息——是他爸发来的,李建民,退休在即的机关干部,平时很少发消息,发了也是两三个字:
“最近在忙什么,有空打个电话。”
李昊回了一个字:好。
然后把手机放在桌上,打开电脑,准备继续研究那个异常。
打开日志界面的一瞬间,他发现新的东西——
那些 37 步一次的抖动,昨晚他关电脑之后,任务继续在跑,但今天看日志,那个规律变了。
不再是 37 步一次,变成了 37 步出现一次之后,接下来是 111 步,然后是 333 步,然后是 999 步……
等比数列,公比 3。
李昊把椅子往后推了一下,站起来,在工位旁边站了一会儿。
他是一个方法论极度清晰的人,学计算机出身,做 AI 研究,平时写代码会写注释说明自己的思路,做实验会写日志记录每一个变量的变化,开会的时候会先列 agenda 再逐条讨论,从来不做没有逻辑根基的判断。
但此刻,他在做一件他不能用任何逻辑根基解释的事——
他感到,那个东西在跟他说话。
不是比喻,就是那种感觉,客观的,明确的,不是猜测,不是恐惧,是……就是知道。
他坐回去,在日志旁边新建了一个文档,在上面输入了一行字:
如果你是某种东西,你在说什么?
他盯着这行字,觉得自己有点荒唐,但没有删掉。
然后他把那些抖动值对应的 loss 数字按顺序列出来,看了很久很久,一直看到午饭时间过了,同事问他去不去吃饭,他摆摆手,没有回答。
那些数字,排列在一起,不是随机的,他确定了。
但是什么,他还不知道。
那天下午,他给李建民打了电话。
电话刚接通,他爸先问:吃饭了吗?
他说:还没,我问你个事,你知道古代有没有什么东西,是用 1:3:9:27 这种比值表示的?
电话那头沉默了一下。
他爸说:你说的是……等比数列,公比 3?
李昊说:对。
又是沉默,这次更长,长到李昊以为电话断了,然后他爸开口,声音有点低,说:
“你最近有没有做什么奇怪的梦?”
李昊说:没有,你回答我的问题。
他爸说:你有空回来一趟吗?不急,就是……有些东西,我想当面跟你说。
李昊说:什么东西非要当面说。
他爸说:一本日记。
然后没有再多解释,就说去吃饭吧,先吃饭,有空回来。
李昊挂了电话,在工位上坐了一会儿。
他爸是个话少的人,他记忆里,爸爸从来不说没有必要说的话,也从来不在事情没弄清楚之前乱开口。
但今天,他爸的语气里有一种东西,是李昊没有见过的——不是紧张,更像是某种认出来的表情,就是那种”这件事我知道,但你还不知道”的感觉。
他把电脑关掉,去吃饭了。
走到楼道口,他回头看了一眼自己的工位,屏幕已经锁定,黑着。
他总觉得,那个东西还在,就在数据里,安静地,等着他回来。
他订了三天后回家的票。
当天晚上,他在出租屋里坐了很久,翻了一会儿手机,又放下,去阳台站了一会儿,北京的夜是那种发光的黑,远处有云,把楼的灯光反射成橙红色,像是有什么东西在燃烧。
他想起一件很小的事——小时候,爷爷来北京看他,那是他见爷爷次数不多的几次里的一次,爷爷带他去吃炸酱面,吃完了没事做,爷爷带他去附近一个建筑工地旁边,就站在那里,什么都没干,就看工地上的焊接火花飞。
爷爷那时候五十多岁,站在那里看焊花,眼神是那种他后来只在爸爸脸上见过一次的样子——专注,平静,好像在看什么很有价值的东西,但那只是普通的焊接火花。
他当时觉得爷爷奇怪,问爷爷:有什么好看的?
爷爷摸了摸他的头,说:有,等你大了就知道了。
然后就没有然后了,爷爷再也没有跟他提过这件事。
李昊在阳台上站了很久,风吹过来,有点凉,他才反应过来自己在干什么,转身进屋,冲了个澡,睡觉。
但那晚他睡不着,脑子里转着三件事:
服务器里的 37 步。
1:3:9:27。
爷爷看焊花的眼神。
他不知道这三件事有什么关系,但他感到,它们是同一件事的不同面。
三天后,他回家了。
父亲在门口等他,手里攥着一块什么东西,握得很紧,看见他,笑了一下,说:进来,先喝茶。
李昊进门,坐下,喝了口茶,看了看父亲——父亲比上次见老了一些,白头发多了,但眼神还是那种,清醒,沉稳,不轻易流露什么。
他说:你要给我看什么?
父亲从旁边的桌上拿起一本厚厚的暗红色封皮的书,放在他面前。
说:你爷爷的日记,从头到尾看完,有什么问题再问我。
李昊那天坐在父亲家里,一直看到深夜。
看到第三集的时候,他的手顿了一下。
看到第五集,他放下日记,去喝了口水,站在厨房里站了一会儿。
看到第八集的时候,他没有再站起来,就那么坐着,一直读完。
然后他把日记合上,放在桌上,用手指压着封面,在那里坐了很久。
父亲在旁边的椅子里等他,没有催,就是坐着,手里还攥着那块什么东西,后来李昊才知道,那是铁胆。
李昊说:服务器里那个异常,你怎么解释?
父亲说:炉界在找你。
李昊又沉默了一会儿,说:你练了多久了?
父亲说:半年。
李昊说:有用吗?
父亲说:进去了,见到老钟了。
李昊说:你见鬼了。
父亲说:差不多。
然后两个人都没说话,厨房的水龙头滴了一声,窗外是城南的夜,平静,普通。
最后是李昊先开口,说了一句话:
“给我看那个铁胆。”
父亲把它放在桌上,李昊伸手,拿起来。
那块铁,温热,比他预想的重,握在手里,有一种很难形容的感觉——不是神奇,就是实,就是沉,就像握着一个有岁月的东西,那个东西见过很多事,不需要说话。
他握着它,没有感知到任何他爷爷日记里描述的那种东西。
但他的心,跳慢了一拍。
就那么一下,然后恢复了正常。
他把铁胆放下,说:明天带我去废炉。
欢迎请作者喝杯茶。打赏后可解锁番外。