一年前从深圳蛇口过关穿过空无一人的走廊,坐轮渡去香港再飞纽约,想着此去经年,大概接下来五六年都要在陌生的国度再也回不去,面对着不确定的未来,心中满是焦虑与不安;一年后坐在从东海岸飞往西海岸的飞机上,虽然同样要开启截然不同的新生活,但似乎不再那么迷茫,远远总能看到指引的灯光知道如何前行。
留美的生活总是过得很快,long long journey眨眼已经度过了一年,被疫情撕裂的日常回归了正轨,充实的生活也冲淡了本科那些并不愉快的回忆,只剩一些零散杂乱的碎片。过着与国内截然不同的生活,尝试了很多以前从来没有尝试过的事情,嗅到了独立自由的味道,也朝着理想的生活更近了一步。
如果说本科没有出国是我做过最错误的决定,那选择来Cornell或许是我人生中最正确的抉择。
高中沉迷于数学,总会用“超纲”的方法捣鼓各种各样的问题。高一一次偶然的机会,我遇到一个可能现在看来并不重要的平面几何的最优化问题,但正是这样一个问题播下了小小的科研的种子。当时的我试了大量方法后发现并没办法得到解析解,用Mathematica编程也无法得到哪怕是近似的数值解。这样探索了一个多月后,Eureka moment就在一瞬间产生了——如果我可以将问题换种角度看待,把优化问题抽象成一个小球在坡上滚,滚到底了就是最优了,那这样即使不是基于几何或是代数变换我依然可以直接快速地得到解。基于这个想法,那年用C写的代码能比Mathematica更快更精确地找到结果1。高一升高二的那个暑假在去德国的飞机上跟朋友讲了这个故事,朋友说我应该去申请美国的学校,这正是他们想要看的东西。彼时的我还不知道“球往低处滚”正是gradient descent的initial idea,还没有这种远见看到中美教育的巨大差异,也没有能预料到之后这些年的世界变化,当然更多的还是循规蹈矩像大多数人一样高考升学。当年没有勇气去舍弃国内拥有的一切,也没有勇气踏上一条满是未知的路。我知道人生不该后悔没有选择另外一条路,但或许有些事情应该领悟得更早,于是走了弯路的我花了四年时间来弥补那些缺失的东西。
回想本科四年,我似乎没有从学校老师那里学到什么真正能让我记住的东西,这么多年本科每天上课都去抢占最后一排,因为知道老师只会对着几十年不变的课件讲着古早以前就人尽皆知的理论,大多数老师不会每年更新课件,更不会follow up最新的成果。在美国遇到的很多人跟我说过我是他们见过最卷的人,我不否认本科卷的事实,毕竟绝大多数内容都是自学的,哪怕是科研导师也没有给到很好的guidance。大一就被北大的学长灌输了内卷的思想,那时内卷还只是知乎小圈子的词汇,到现在内卷这词人尽皆知也不过是两三年的事情。我太清楚国内的考试和所谓的课程项目究竟想要看到什么——一遍遍的重复练习,废话连篇的实验报告,构筑了内卷的全部含义。但或许与其他做题家不同的是,我清清楚楚地意识到我在做题,做题是做题家在国内那个时间点下唯一的出路,但不是永远的出路。
每天下午迎着夕阳绕圈,想着再坚持跑多几圈就能进四大;从校园西南角的宿舍骑车骑到东北角的实验楼,在夜深人静的时候去7-11买早餐,在考试前麦当劳刷夜卷通宵;每天下课自己一个人背着人流去实验室,数着还有多少次才会从这个不断变得封闭令人失望透顶的学校离开。想起跨年的时候赶paper在大学城隔着岸远远看烟花盛开,只能看到烟花顶端但也令人感动。这些日子终究不会再有,也不会想要再经历一遍。
大三结束的那个暑假,有几个清华的老师联系到我,问我想不想去他们那读博。清华保研固然很香,但对我来说更多还是路径依赖,是飞不出牢笼的鸟,而一心想着去看看世界的鸟是不想被牢笼所禁锢的。
过往的那些经历并不闪闪发光,国内的生活让我想要尽快地逃离。但有得必有失,或许本科就出来可能就不会有那么强烈的欲望想要逃离原先的地方,大概也不会有契机dive into a problem,从而想要做真正的research了。
如果说国内带给我的是强烈的剥离感,那在Cornell的生活则让我感到I belong here。
在来美国读PhD之前没有任何交换经历,暑研也是远程做的,对美国的学校可以说是一无所知,所有的了解都是道听途说,以及在research层面上了解的哪些组很强(很能发paper)。同届申请的同学基本上有国外学习的经历,有实地考察过至少对学校有更多的认知,而大洋彼岸的生活对我来说莫过于黑盒,黑盒随机的输出可能就决定了我接下来几年的生活状态。再加上对枪支暴乱和COVID的担忧,对自己英文水平的不自信;签证只拿到一年签,疫情回国政策变本加厉,使得回国之路漫漫无期。而开学第一周的事可以让我念叨千百遍——为了赶公交在村里的山路狂奔,殊不知村里的路这么野,一摔跤直接把全身磕出血,甚至把门牙磕掉一半。送到牙医那边,牙医听闻我的经历,边给我处理断牙边跟我说Welcome to America。Yeah, this is real America. 似乎一瞬之间发现我回不去了,这大概是通往成长路上的考验,刻骨铭心得足以让我记一辈子。后来滑雪扭到手腕,来加州之前又得了新冠,如此种种都会让我质问大费周折远渡重洋真的值得吗?
但回想了很多也还是会觉得值得,那个黑盒虽然给了我一些随机的波动,但是也给了我一条更漂亮的输出曲线。PhD for me is more than research,除了对自己极限的挑战,对未知世界的探索,这边所经历的事所遇见的人都与国内太不相同。滑雪划船攀岩也许在国内大城市一年才可以体验一次,在村里每周都可以进行不同的outdoor activities;自己开车买菜做饭,锻炼了各式各样生活必备技能,也充分明白要怎么独立生存。大概是有很多非常nice的人,去哪里都备受照顾,所以有归属感。无论是舍友、同学、学长学姐、老板都非常supportive,每一天都能感受到不同的幸福与快乐。年初生日的时候说要找到属于自己的烟花,今年确乎也看到了太多太多的烟花——和朋友在演唱会、湖边、瀑布旁都看到了极为真实绚丽的烟火;而更多则是烟花般的友谊,尽管聊过几次天、打过几次牌的朋友可能一下子就各奔东西,但这些短暂的经历也弥足珍贵。这些朋友无论去到天南海北,都能约出来吃顿饭聊一聊。
现任老板的工作我本科期间就能如数家珍,当时申请的时候也是特别想来的一个组。因为我老板起家是硬件设计自动化 (Electronic Design Automation, EDA),早年组里的工作也比较底层,所以他一直在ECE department任职。但我本科是CS的,对EE的东西也无感,因此当时申请就直接跟老板说不会申请ECE program,而是硬着头皮申CS,结果还是非常幸运能够在CS department被committee捞起来,也让接下来几年生活好过一点。
Cornell CS从来就有不输四大的水准,涵盖了各个方向,系统架构更是有非常强的老师,也算是找到一个非常棒的地方做科研。我们这届只招了两个陆本学生,周围都是美本和清北交的同学,985末流学校的学生能出现在这已经算奇迹了。当了两个学期TA,满足了学院的requirement。我们没有qual,这样也算是达成了个milestone。上了两个学期的英语课终于过了oral language assessment,在PhD小课上拿到了从来不会有的A+,也是一些小的achievement。
美国校园生活最直接的体会是diversity。我可以在校园里见到世界各地的同学,对于LGBTQ+群体的认同,在男生厕所可以看见学院提供的卫生巾,上课穿着小裙子也能被老师同学equally treated,去开会可以看见专门设置的all gender toilets,我能想象这些少数群体在这边可以得到应有的尊重,这是我在国内从未体会过的。另一方面则是freedom,包括选课的自由、生活的自由。或许正如Cornell的motto所说,“any person, any study”,本科生的选课和跨专业都非常自由,PhD也可以随意选语言课、体育课、各种有意思但与PhD研究方向完全不相关的课程。Cornell更要求phd要minor一个专业,某种程度上可以防止眼界只限制在自己的小领域里,而没有看到外面更加广阔的世界。
最后还是要聊聊科研。这一年挂了4篇paper的名字,有2篇算是本科的工作,都折腾了快两年才终于发了出来。虽然我都不是主要作者,但还是能够清楚体会到搭建一个系统并把工作发出来需要多少努力。
我很幸运,遇到了非常棒的导师,很快就确定了研究方向,也有了具体的研究课题——compiler optimization。以前本科的时候被大老板喷EDA不能算作compiler,现在基于LLVM/MLIR在做整个前端到后端的编译流程,终于可以说自己是在做真正的compiler了(这两天才知道编译器原来算程序员三大浪漫之一xs2)。现在每每跟人提起我做compiler,很多人都会wow一句,这就够了:) 而喜欢compiler或者更加general systems的原因可能是我很喜欢在不同的解决方案中找到共性并将其归类,将复杂的问题decompose,不断抽丝剥茧,最终将问题解决。“Impose structure on pooly-structured things”3,that’s what our system is doing。
2016年AlphaGo的胜利,让我见证了一个新时代的开启,也让我觉得未来一定是AI的。本科课程接触了更多的系统架构,知道计算机应用只不过是冰山一角,冰山下支撑这些应用的底层架构才是繁荣的基石。而18年TVM的诞生更让我相信,这些底层架构一定会是AI时代的催化剂4,他们完整compilation stack的愿景让我兴奋不已。随着摩尔定律 (Moore’s Law)和登纳德缩放定律 (Dennard scaling)的终结,在物理学停滞发展的年代,榨干现有计算机所有的性能似乎成了一个不可或缺的选项。只有将现有的计算资源开发到极致,基础科学才能有新的突破;而基础科学发展了才能迎来下一波计算机浪潮(也许是量子计算,也许是生物计算,who knows),上层应用与底层系统相互促进形成一个良性循环,人类才有办法奔向星辰大海。
更加深层次地说,计算机发展到今天这个地步,不可避免地在一个方向上产生惯性,不断累积错误从而很难去修改。现在一个算法能不能成功,其实很多时候并不是取决于算法本身是否足够好,更多是看算法、软件栈和硬件能够完全匹配(align)上,也即所谓的hardware lottery5。反向传播和神经网络在上个世纪就已经被发明出来,但在那时没有流行,一方面是人们没有意识到CPU并不是一个合适的计算设备,另一方面也包括没有像pytorch和tensorflow一样易用的框架,所以并非这个想法不可行,而是其使用的硬件不合理。在现在这个摩尔定律终结的时代就更加如此,这种软硬件不匹配的随机性会被放大。很有可能当初人类就点偏了技能树,导致后面的科技发展都在往错误的方向发展。而解决这种随机性可以有两种路径:一是在现有硬件(CPU/GPU)下去尽可能地弥合gap,另一种是设计新的硬件使得其与算法流程完全align。前一种看上去只是在现有框架下的小修小补,并没有解决本质上的问题;而后面一种是我们现在所采取的技术路线,也是更难的一条路。如果我们可以做到大幅缩短硬件加速器的迭代时间,那也就能更快地探索一种算法是否足够有效,也就不会被困在一个局部最优解出不来,这种方式其实也就是这些年很推崇的软硬件协同 (software-hardware codesign)。
最近刚好在知乎上看到optimization is not research的论断6,事实上组合爆炸(combinational explosion)才是这个问题真正的难点。哪怕理论最优性能已经确定,中间不同的优化选择依然会产生截然不同的效果。众所周知memory是瓶颈,需要减少communication,但具体落实下来每次传输多少data,什么时候传,从哪里传,用什么方式传,做不做cache这些其实都会产生超大的决策空间。就是因为软硬件之间存在gap所以才要弥合,而这也是optimization作为research的意义所在,也是我们做compiler的最终目标。
最开始一个学期,帮学长做了几个side project,但终究不是我所喜欢的taste。12月到1月被强烈的seasonal affected disorder影响,整个人非常抑郁,在村里漫长无尽的冬季里,只有整个人沉浸在打码中才不会觉得难受。12月底开始,开始做MLIR的工作,到现在已经超过1k的commit。system是实验学科,很多时候需要get hands dirty,需要大量的engineering才有办法出现效果。经常debug de一两周没有进展,硬件的bug更加不会有现成解决方案,只能一步步看哪里出现了问题;一个巨大的网络发现结果不对,也只能一层一层layer打印出来对着数值检查。这几个side project也并非完全没用,它们告诉我很多的优化并不那么trivial,从人工到智能还有很长一段路要走。如果有一天我随便写一个程序都能通过编译器优化将硬件性能打满,那大概我的PhD也就该毕业了。
小时候很多人总有不切实际的梦想(包括我),想着长大后当科学家是件非常酷的事情,现在算是实现了一半。以前想要去硅谷,想要有一个落地窗的大房子,现在也都提前体验到了。大概也还是深受Philips Guo的Phd Grind的影响,觉得PhD一定不要放弃任何机会,庆幸当初Amazon联系我的时候没有将其当成垃圾邮件过滤掉,也没有因为怕麻烦而选择不来加州在村里remote。感谢老板让我整个学期take leave of absence出去实习,也让我有时间思考一些真正fundamental important的问题,去思考如何做出一些真正有high impact的工作。
我的博客签名一直是“永不屈服于荒诞的世界,不停止自由地追逐繁星”,我已经忘了最初是在哪里看到这句话的了,但一直以此为初心,这句话也是我最down的时候支撑着我前行的动力。世界已经非常魔幻了,希望接下来几年也能继续在混乱的世界里抵抗熵增,尝试去探索更多未知的科学边界。
这个故事讲得很简单,但现在回想起来那个问题也还是挺复杂的。这段经历的后续是我们将其推广到了高维空间,有了更加漂亮的结论,我也因此拿到了清华的自招,但也因为机缘巧合没有进到清华。 ↩
如何看待程序员的三大浪漫被认为是操作系统、编译原理和图形学? - 知乎 https://www.zhihu.com/question/27323148 ↩
https://da-data.blogspot.com/2015/03/reflecting-on-cs-graduate-admissions.html ↩
The Hardware Lottery, https://hardwarelottery.github.io/ ↩
Optimization is NOT Research - PeLi的文章 - 知乎 https://zhuanlan.zhihu.com/p/555740105 ↩