V3_C31_天花板
十二月中旬。周三下午。
许畅把一页PPT贴在了白板上。
不是投影。是打印出来的。A4纸。用透明胶带粘在白板右边。白板左边还有上周留下的数字——84.3%。红色的85。黑色的"→五月"。
他的PPT只有一页。上面画了两条线。
第一条线是当前模型的准确率上限。一条水平的虚线。标着"85%~86%"。意思是:按现在的模型架构,不管怎么调参,不管喂多少数据,天花板就在这里。85到86。到不了90。
第二条线是新模型的理论准确率。一条斜向上的实线。从86%出发。往右上角延伸。延伸到90%。延伸到95%。标着"新架构。更多参数。更多层。更多数据。"
两条线之间的差距。从86%到95%。这个差距需要什么?需要更大的模型。更多的GPU。更多的训练时间。更多的钱。
许畅站在白板旁边。手指点了一下那条虚线。
"当前模型已经接近天花板了。"他说。"工程手段——差量更新、数据增强、超参调优——能把准确率推到85%,也许86%。但到90%,必须换架构。更多参数。更大的模型。"
他停了一下。
"简单说。更多钱。"
他说"更多钱"的时候没有犹豫。他不需要犹豫。钱不是他的。他不算账。他只算准确率。准确率需要什么他就说需要什么。至于钱够不够。那是创始人的事。不是算法工程师的事。
这不是冷漠。这是分工。他的分工是技术。我的分工是活着。
全场安静了三秒。
三秒里每个人在想不同的事。许畅在等反馈。刘海洋在算工程替代方案。周小薇在心里加减。张富贵在看我的脸。林工戴着耳机没听到(也许听到了但不参与)。小陈在另一边整理客户反馈表。
张富贵看了一眼白板。看了一眼周小薇。周小薇没有表情。她在等。等数字。许畅还没说数字。
"换架构需要多少?"我问。
"加两台A100。算力成本翻一倍。月烧从现在的十二万涨到十五六万。再加上新的训练数据——大约三四十万的额外投入。"
三四十万。账上一百三十七万。减掉三四十万等于不到一百万。一百万按十五六万月烧等于六个月。到明年六月。
比现在少了五个月。
刘海洋从椅子上站起来了。
他很少站起来反驳人。上次站起来是说"三周到一个月能到85%"。那次是为了支持一件事。今天是为了反对。
"现在的模型够用了。"他说。声音平的。但平里面有硬。"先工程优化。把84.3%推到85%。靠工程手段做得到。差量更新已经在跑了。推理速度优化了百分之四十。内存降了百分之二十。这些优化留出来的算力空间可以跑更多轮训练。到85%不需要换架构。"
"85%是天花板。"许畅说。"工程优化能到85%。但之后呢?"
"之后是之后。先到85%。拿85%去签客户。签了客户有收入。有收入再考虑换架构。"
"可是到90%要多久?"
"那取决于你换不换架构。"
"我的意思是——如果不换,到不了90%。"
"那就先不到。先到85%。先签单。先活着。活着以后再想90%。"
两个人面对面。不是吵架的那种面对面。是两种思维方式正面碰撞的那种。许畅想的是终点——90%,95%,商用级的AI客服。刘海洋想的是下一步——85%,签单,活下去。
一个看远的。一个看近的。看远的人觉得看近的人短视。看近的人觉得看远的人不切实际。两种都对。两种加在一起才是完整的。但在会议室里两种加在一起就变成了对立。
许畅是研究员出身。他的本能是——做到最好。最好是90%。最好是95%。最好是行业第一。这是学术圈的训练。论文要发最好的。实验要做最好的。不是最好的不发。
刘海洋是工程师出身。他的本能是——做到能用。能用是85%。能用是客户付钱。能用是活到明天。这是创业的训练。不是最好的没关系。能用就行。先活着。活着的公司可以慢慢变好。
两种训练。两种本能。在同一间办公室里撞在了一起。
周小薇在旁边。她的笔没有动。她在等。等我做决定。她不会在技术分歧上发表意见。她只管数字。不管方向。方向是创始人的事。
张富贵也在旁边。他的笔记本翻开了一页空白的。准备记。记什么取决于我说什么。他不参与技术讨论。他只记结果。结果出来了他去执行。
"要到90%要多久?"我问许畅。
"快则三个月。慢则半年。"
"要烧多少钱?"
"加两台服务器。算力成本翻一倍。大约三四十万的额外投入。"
张富贵低头在笔记本上写了三个字。没有括号。"无底洞"。然后抬起头继续看我。
刘海洋转过来看着许畅。声音没有升高。但每个字都很清楚。
"这个钱从哪来?"
"融资来的。"
"融资的钱是用来活到下一轮的。不是全烧在模型上的。"
许畅没有立刻回答。他想了两秒。
"你以为那200万是从天上掉下来的?"
这句话出来以后全场安静了。
不是因为它凶。是因为它对。200万不是从天上掉的。是陈峰投的。陈峰投的不是AI研究经费。是一家公司的命。命是用来活的。不是用来做实验的。
两个人都看着我。
我坐在中间。
两个方案在白板上。一个省钱。85%天花板。活着。一个烧钱。理论上到90%。也许活得更好。也许烧完了。
两分钟。我想了两分钟。
两分钟在安静的办公室里非常长。长到能听见暖气管道里的水在响。咕噜一声。热胀冷缩。长到能听见远处标注间的咔嗒声从走廊传过来。
我把每一个数字过了一遍。
刘海洋方案:差量更新+工程优化。月烧约12万。到85%大约两三周。不需要额外投入。到了85%以后天花板。不能到90%。但能签单。能拿TS。
许畅方案:换模型架构。月烧涨到15-16万。额外投入30-40万。到85%大约两周。之后能冲90%。三到六个月。但钱烧得更快。到明年六月可能就没了。
选哪个?
如果Pre-A的300万在三月到。许畅方案能跑。有了300万烧得起。能到90%。90%的公司比85%的公司值钱。
如果Pre-A在三月没到。许畅方案会让公司死得更快。因为多烧了三四十万。死线从六月提前到四月。
赌Pre-A能到吗?
"先走许畅的方案。"我说。
全场看着我。
"试两周。两周后如果准确率没有突破——"
我停了一下。本来想说"切回刘海洋的方案"。但我没这么说。我说的是另一个版本。
"两周后如果准确率没有超过当前水平。切回工程优化路线。"
说完了。
刘海洋没有说话。他看了我一秒。然后站起来。转身。回到工位。坐下。打开电脑。开始敲代码。
他没有摔椅子。没有甩门。没有说"你做错了"。什么都没有。
他只是回去了。
但我知道他听到了什么。他听到的不是"先走许畅的方案"。他听到的是——又一次被绕过了。
我说的是"许畅的方案"。不是"方案B"。不是"换架构方案"。是"许畅的方案"。
选的不是方案。是人。
我把他的名字绑在了方案上。方案可以换。名字换不了。他的名字不在那句话里。
这是第三次了。
第一次。七月那次。他变成翻译官以后。我开始无意识地先看许畅等他翻译。刘海洋开会一句话没说。张富贵在楼梯间提醒我。
第二次。还是那段时间。我更多地找许畅讨论方向。找刘海洋只谈bug和架构。技术方向的话我跟许畅说。日常维护的话我跟刘海洋说。无意中把他定位成了"维护者"而不是"共建者"。
第三次。今天。我直接说了"许畅的方案"。把方案和人绑在了一起。
三次。每一次都有合理的理由。许畅的翻译能力更强。许畅的方案更前沿。许畅的思路更接近投资人想听的东西。每一次都是对的选择。
但每一次"对的选择"都在刘海洋心里留了一个印子。印子不深。但三个印子加在一起就是一条线了。一条从"被绕过"到"不被需要"到"也许该走了"的线。
这条线今天我看不见。也许明年会看见。也许后年。
也许我应该说"先试新架构路线"。不提名字。只提事情。但我没有。我下意识地说了"许畅的方案"。因为这三个月来我已经习惯了。
习惯。最无意识的东西。最伤人的东西。
散会以后。四点半。
张富贵拉着我走到了走廊。
"海洋下午状态不对。"
"我知道。"
"你是不是——"
"我知道了,富贵。"
我的语气比我想要的重了一点。重了一点。我心虚了。
张富贵闭上嘴。点了头。没再说。
他不会追着一个不想听的人说。这是他的规矩。说一次。你听了就听了。没听——他记在本子里。以后你后悔了他翻出来给你看。
他出去以后没有回自己的工位。他走到了刘海洋旁边。
拉了一把椅子。坐下。没有看刘海洋的屏幕。不问他在写什么。不问他什么感受。不说"你没事吧"。不说"老赵不是那个意思"。
他就坐在那里。坐了大概三十秒。什么都没做。刘海洋在敲代码。张富贵在旁边坐着。两个人都不看对方。但一个人坐在另一个人旁边不说话。有时候比说一千句话都有用。
三十秒以后张富贵开口了。
"今晚沙县。一起?"
"嗯。"
两个字。"今晚沙县"是邀请。"嗯"是接受。不需要更多。
张富贵不懂AI。不懂模型架构。不懂工程优化和新架构的区别。但他懂人。他知道刘海洋下午被绕过了。他知道刘海洋不会说出来。他知道刘海洋需要的不是安慰。是陪伴。
沙县是他们的语言。跟蒸饺一样。跟红牛一样。热的。实在的。不需要翻译的。
许畅能翻译。张富贵不需要翻译。他的语言本来就是人话。蒸饺是人话。沙县是人话。"一起"是人话。
他是全公司唯一一个从来不需要许畅翻译的人。因为他说的从来就不是术语。是人。
十二月的上海。窗外。
梧桐树光秃秃的。枝丫在灰白色的天空里伸展。没有叶子的枝丫在冬天很好看。因为结构暴露了。你能看清每一根枝是怎么生长的。从主干到侧枝到末梢。很清楚。
偶尔有一只鸟落上去。停了一秒。飞走了。梧桐树不留鸟。十二月的梧桐树什么都不留。
办公室的暖气开着。但不匀。靠门那边凉。靠服务器那边热。中间的温度是混合的。不冷不热。将就的温度。这间办公室从一月到十二月一直是这种将就的温度。冬天暖气不够。夏天空调不行。中间不冷不热。刚好够工作。不够舒服。
我站在窗前。手指放在窗台上。玻璃是凉的。十二月的玻璃。冰的。手指放上去三秒就冻红了。指节发白。跟口袋里攥钥匙太紧的时候一样。
窗外。梧桐树。光秃秃的。枝丫在灰白色的天空里伸展。没有叶子的树在冬天很好看。因为它诚实。有叶子的时候你看不见结构。叶子遮住了一切。落光了你才看清楚。
人也是。忙的时候你看不见裂缝。停下来了才看见。
我收回手。看了一眼刘海洋的背影。他坐在工位上。面对屏幕。白色的衬衫。微微弓着肩膀。跟第一天认识他的时候一样。七年了。从大学到创业。背影没变。脾气没变。代码还是那么写。受了委屈还是不说。不说的方式也没变。回去。坐下。敲代码。用代码说话。
七年了。他每次被绕过都是同一个反应。回去。坐下。敲。
不吵。不闹。不辞职。不消极。不发朋友圈吐槽。不跟朋友抱怨。
他把所有的情绪都变成了代码。变成了凌晨的Git提交。变成了推理速度百分之四十的提升。变成了内存占用百分之二十的降低。
情绪有多重。代码就有多好。
这是刘海洋的方式。七年没变。也许永远不变。也许有一天会变。
但不是今天。
当天晚上。十一点。
我打开Git日志。习惯性地看最近提交。
一个新的commit。时间戳:23:07。
作者:刘海洋。
refactor: 底层优化,推理速度提升40%,内存占用降低20%
他在"试许畅方案"的同时。把自己的工程优化也写了。
没有等任何人同意。没有告诉任何人。没有在群里说"我做了一个东西"。没有等我说"切回你的方案"。
他直接做了。
推理速度提升百分之四十。内存占用降低百分之二十。
我点开diff。红色和绿色交替。删了一些旧代码。加了一些新代码。修改了七个文件。新增了三个文件。总共大约两千行。
两千行。不是两万行。比六月那次的两万行少了很多。但这两千行每一行都是精确的。没有多余的。没有实验性的。是他想了一个下午以后的结果。从下午四点半被绕过以后。到晚上十一点零七分提交。六个半小时。
六个半小时里他做了什么?先去吃了沙县。跟张富贵。蒸饺加拌面。吃完了回来。大概七点多。然后坐下来。敲了四个小时。写了两千行。
这两千行做了一件事——让许畅的新架构在他的底层上跑得更快。
他没有站在许畅的对面说"你错了"。他站在了许畅的下面说"我托着你"。
他没有反对许畅的方案。他让许畅的方案更好。
这是什么?这是一种我不知道该怎么命名的东西。不是妥协。不是配合。不是原谅。
也许是骨头的自觉。骨头不抗议。骨头不离开。骨头撑住。不管上面站的是谁。
被绕过了。但他没有停止工作。他没有背叛。没有放弃。没有消极怠工。他只是在被绕过以后。回到工位。坐下。继续做他认为对的事。
我看着这个commit。看了很久。屏幕的光照在脸上。办公室暗了。只有我的屏幕还亮着。
我应该跟他说什么?应该说"谢谢"?不够。应该说"对不起下午选了许畅的方案"?太晚了。应该说"你的优化很好"?太轻了。
最后我什么都没说。关了电脑。走了。
他比我先走的。他去吃沙县了。跟张富贵。蒸饺加拌面。十二块。热的。
我回家的路上想了一件事。
如果有一天他不再回去坐下敲代码了。如果有一天他站起来走了不回来了。那一天会是什么样子?
我不知道。
但我知道那一天不是今天。今天他还在。十一点零七分。推理速度提升百分之四十。内存占用降低百分之二十。
他用代码回答了我。回答不是"你做错了"。回答是"你选了别人的方案。但我的方案也做了。你不需要选择。我替你都做了。"
这是刘海洋。他不跟你争。他跟自己争。他的对手不是许畅。是他自己。他要证明的不是许畅的方案不好。是他的方案也好。好到即使没被选中。也值得存在。
十一点零七分。安静地存在在Git日志里。没有感叹号。没有@任何人。只有一行提交信息和两万行新代码。
今天他还在。
够了。今天够了。
明天醒来。两个方案同时在跑。许畅的新架构在上面。刘海洋的优化在下面。刀在切。骨头在撑。
方教授说得对。它们不需要胶水。它们自己找到了各自的位置。
只是找到位置的过程有一点疼。对两个人都疼。对我也疼。
因为我是中间那个人。我选了一边。另一边疼了。但另一边没有走。没有走。他接受了疼。他比我想的更强。
我欠他的比我以为的更多。
这笔账没有写在周小薇的Excel里。但它在。跟蓝色笔记本一样。跟白板上的"无底洞"一样。
有些账不在纸上。在人心里。
十二月。2016年快结束了。公司还在。人还在。代码在跑。准确率在爬。钱在烧。
一切都在。
够了。