陈天奇
我们刚开始做 MXNet 的时候,完全不会担心 TensorFlow 能够对我们产生什么样的竞争。你去做一件比较平庸的问题,和做一个重要的问题,花的时间几乎是一样的。时间是有限的,所以一定要做自己想要做的事情。
我觉得很多时候,你的勇气可能是过去的自己给你自己的约定。其实最后你开始 startup 之后,开始想要做的东西和你后面要做的东西肯定是不一样的。你必须要能够 reinvent yourself,还是继续抱着我们原来的技术路线,继续去优化 ResNet?这个我觉得最后我们会输得很惨。
这段经历会让我觉得我会更现实,我会知道怎么样能够通过现实的方式去更好地实现理想。我还在一直期待吗?我现在还在一直期待吗?失败也没那么可怕,然后要接受可以失败这个事实。其实我觉得现在的我最难的事情,还是要保持初心。
何泰然 Tairan He
如果你学过机器学习,那么你对以下几个名字不会陌生:XGBoost、MXNet、TVM、MLC LLM。而在这几个项目名背后,有一个共同的名字,那就是本期嘉宾陈天奇。
过去 15 年,陈天奇把让机器学习模型更轻、更快、更易部署,做成了一条清晰的技术主线。对我而言,陈天奇不仅仅是 AI 领域一个响亮的人名,他还影响了我对机器学习和科研最早的认知。
2019 年,陈天奇写下知乎文章《机器学习科研这十年》,收获了上万点赞。转眼 6 年过去了,陈天奇在机器学习这条路上已经走了快 20 年。从最早的大数据,到深度学习,再到今天的大模型,从陈天奇的视角看,这 20 年的激荡会是什么样的风景?
在这期节目,你会听到我和陈天奇把他的每一个开源项目都拆解清楚,也会走进陈天奇的个人经历:他年少时如何与计算机相遇,高二的时候如何自学写编译器,在交大 ACM 班打下系统功底,在 UW 的科研突破,到最后同时走向创业和教职两条路。
更重要的是,我们还聊到了陈天奇的底层价值观:长期主义如何落地,如何在不确定性中坚持敢于失败的勇气,以及在科研、创业、教职三条路都获得成功后,陈天奇在筹划着什么样的下一步。
这里是 One More TV Podcast,现在请和我一起进入陈天奇的世界。
在童年时期,在接触计算机和机器学习之前,那个时候的你对什么事物最感兴趣?
陈天奇
1. 自学计算机的起点
我觉得,在上大学之前,最有趣的经历还是我怎么样开始接触计算机的那段经历。我高中是在浙江省一个小县城的县中读的,而且它现在应该还是那个县最好的中学。原因是我母亲是那边的高中老师,我们当时觉得在自己的地方上学也挺好的,于是就在松阳二中读书。
其实在初中的时候,我一开始有点想要接触计算机,原因是当时觉得,有了电脑就可以上网,有很多人可以做网页,非常酷。于是我找到了当时教我们计算机的一位启蒙老师,我叫他何老师,然后我就问他:“你能不能教我学计算机?”
当时我的想法是,我可以马上学会做网页,然后做很多炫酷的东西。结果他给了我一本《C 语言编程入门》。
何泰然 Tairan He
那时候你多少岁?
陈天奇
那时候应该是刚上高中的时候,大概是 2003 年左右。我是 2006 年上的大学。
当时我就开始走学习编程这条路,但是基本上在高中生涯中都没有学会做网页和做游戏,差不多就是这样。比较幸运的是,当时信息学竞赛在网上已经有非常多的资料了,你可以找到 Online Judge。当时有一个论坛叫“大榕树”,现在已经大概不在了。
何泰然 Tairan He
大榕树。
陈天奇
对,叫“大榕树”,是做 OI 的一个论坛。因为我的启蒙老师本身不是做竞赛的,他只是教计算机,所以当时我们在一个县中,并没有任何资源可以入门这个东西。但是因为网上有 Online Judge,也有公开的资源,所以我就在那个时候开始自学编程、开始打比赛。
当时我学完之后,高二的时候去参加 NOIP 省赛。我记得比较清楚的是,初赛没有过。后来我还是去 tag along,参加了一下省赛里面的比赛,最后拿了二等奖。第二年的时候,高三拿了一等奖。
基本上这些东西全部都是自学的,所以那段经历对我后面选择计算机这条路有非常大的影响。当时我就感觉到,因为有互联网,它可以让我们比较自由地接触到这些信息,让我这样一个相当于草根出身的人,也可以慢慢进入这个领域。我觉得 that's really amazing。
另外一个比较有趣的事情是,可能因为我一开始有点初生牛犊不怕虎的感觉。高二的时候,因为自己感兴趣,我就尝试开始写编译器。当时觉得这个东西很酷,因为我们做 Online Judge 的时候,大部分主流的竞赛语言都是 Pascal,而我自己写的是 C 语言。
何泰然 Tairan He
为什么你写 C,别人写 Pascal?
陈天奇
可能纯粹是因为我入门的时候只学了 C 语言。如果我是在一个有竞赛教练培训的正常学校,估计当时大家都会学 Pascal,因为 that's standard。但是因为我是自己摸索出来的,看到的就是 C 语言。
何泰然 Tairan He
所以你学计算机竞赛是自学的?
陈天奇
基本上是自学的。
何泰然 Tairan He
那当时你是出于升学的角度考虑,为了未来打算,还是纯粹因为兴趣?
陈天奇
一开始纯粹是兴趣。当然,后来有人建议说:“你为什么不去打比赛试试看?”我觉得 that's very rewarding。一个小孩子刚开始做这个东西的时候,发现通过 Online Judge 可以得到非常直接的反馈,所以就开始 getting into it。而且当时做 OI 还是有一些 online community 的,大家在论坛上交流,我觉得这个会非常好。
另外,当时我就开始自己学写编译器。因为主要的竞赛语言是 Pascal,而我自己写 C,所以当时有一个想法:是不是可以写一个编译器,或者说 transpiler,把 Pascal transpile 成 C?
于是我自己吭哧吭哧地搞了一个暑假,最后搞出了一个能用的版本。这可能是一个契机,让我开始对更深入地做计算机产生了兴趣。
何泰然 Tairan He
所以你对计算机的兴趣,在这之前有什么影响吗?很多人都喜欢计算机,但最后都去打游戏、玩电子游戏了。你为什么会开始自学编程?
陈天奇
我其实也喜欢玩电子游戏,一直都打游戏。学计算机的一个 motivation,就是能够自己创造游戏。当然,这个 motivation 一直没有实现,但是这是一个契机:我希望能够自己创造游戏。
一开始是这个原因,学进去之后又发现,这里面有很多有趣的东西,于是就开始沿着这条道路前进了。
何泰然 Tairan He
很有意思。我们上一期记得嘉宾胡彦明,也是小学的时候就开始做电子游戏了。
所以在 18 岁之前的这段经历里,你现在想起来,有没有什么故事或者经历,让你觉得时至今日看来,对你产生了比较深远的影响?
陈天奇
我觉得是我在高中从零开始搭编译器的那段经历。严格来说,那也不算编译器,只是一个 mini transpiler,但是因为我当时的环境是一个小地方,所以一开始没有见识到很多来自各个地方的高手。
但是因为有互联网,我能够看到这个世界上有很多厉害的人。反过来说,当时总有一种感觉:我自己也可以尝试。即使失败了,也没有什么关系。
比如自己尝试做编译器,当时花了一个暑假,从架构到具体要写什么,几乎都没有现成的教程。那个时候应该还没有 GitHub,你也搜不到什么资料。我一开始是在 Windows 上,后来用了 Linux,自己管理这个项目,在小本本上记着:这里要有这个模块,那里要有那个模块,它们应该怎么交互。
就这样纯粹把一个东西搞起来之后,我觉得它对我后面做事情的影响很大:我不怕做事情。
何泰然 Tairan He
其实我和包括你的学生、以及一些认识你的人交流时,他们一直跟我说,你给人一种很温和的印象。你觉得这种性格是你童年时期与生俱来的,还是后来的经历慢慢把你塑造成这样的?
陈天奇
It's funny that people call me that way。我觉得这个很难说。至少有一点,在大学阶段,特别是 ACM 班的那段经历,于勇老师特别强调,跟我们说:“你需要低调做人,高调做事。”
我觉得这一点对我们的影响很大。而且在整个职业生涯中接触到各种各样的人,我发现,首先,做事需要有锐气。你在完成一件事情的时候,you have to be ambitious。
但是 in the meantime,很多时候你之所以能够成就一件事情,因素几乎不全部来自于你自己。我接触过很多人,the lesson I learn from them is that they are humble,他们都非常谦虚,也知道很多时候你需要和周围的人合作完成一件事情。
基于这样的假设,我觉得和人交流时需要有一定程度的尊重,能够 let's collaborate together。但与此同时,这并不代表我们不要 be very ambitious,也不代表我们不需要去 challenge the status quo。
何泰然 Tairan He
正好聊到 ACM 班。你是 2006 年加入交大、在那里读本科的,对不对?当时的 ACM 班是什么样的体验?
陈天奇
2. ACM 班的系统训练
我觉得自己还是非常幸运的。因为我是高考生,当时高三才拿了省一,根本就没有参加过 NOI,属于没有参加过省选,只是在省赛这个级别拿过奖。
ACM 班有竞赛生和高考生。我是通过高考考到了交大电院。高考填志愿的时候,我好像在新闻上看到了交大 ACM 班,后来又自己查了资料,发现这是一个我想去的地方。
我还记得非常清楚,当时去交大听于勇老师的宣讲会。我比较仔细地准备了材料交给他,后来于老师也跟我说,他印象中对我比较深刻,是因为在其他学生中,我是准备材料最仔细的一个。于是我就得到了这个机会。
何泰然 Tairan He
你的材料里写的是你写 compiler 的经历吗?
陈天奇
并没有,主要是简历。当然,我在简历里面提到了自己的经历。为什么我比较认真地准备这份材料,现在回过头来看,其实很像你为 PhD application 准备 personal statement,但是当时并没有意识到这一点。
当时我只是觉得,我本身是一个高考生,又来自一个名不见经传的地方,我希望能够 be prepared to get the opportunity。
何泰然 Tairan He
这很有意思。你高中花了那么多时间自学编程、打 OI、写 compiler,一个暑假,但高考完全没有落下,还是正常高考考进了上海交大。
你当时在你们那个县城,是不是一直都是全年级第一,像神一样?
陈天奇
差不多算是吧。
何泰然 Tairan He
所以你是开窍很早,基本上从小一路上来,成绩都是最好的那一拨?
陈天奇
应该算是这样。
何泰然 Tairan He
刚刚你提到,于勇老师在 ACM 班的时候一直跟你们强调低调做人、高调做事。你觉得本科在 ACM 班的经历,对你后来的学术训练也好、人生经历也好,产生了什么样的影响?
陈天奇
我对 ACM 班的第一个印象,是当时叫“学子讲坛”。ACM 班每年、每个学期都会让每个学生上去讲一个自己选择的 topic,可以讲任何东西。这是一个给大家表达自己的机会。
后来我去读博士的时候,也 volunteer 第一个讲主会报告。那时我就发现,交大 ACM 班的那段历练,可以让人有信心直接出来表达自己。我觉得这一点是在整个培养中 non-technical 的部分,反倒是最重要的一部分。
当然,ACM 班有非常强的 technical 训练。特别是它一直传承到现在的一点,我觉得非常好,就是它的课程设计和大作业。我们当时有一个叫“编译原理大作业”的课程,现在也一直在上,基本上是从零开始让大家搭一个编译器,from scratch。
应该是我们的第一届学长,他们自己借鉴了当时北美高校先进的经验,设计了这个课程设计,并不是老师主导设计的。经过几代学生的迭代,每一代都是由上一届学长来当助教,实际上就是 instructor。他们会不断迭代编译课程作业,再传承给下一代。
那个训练我觉得非常棒。甚至放到现在北美高校的标准来看,我觉得都是一流的训练。
何泰然 Tairan He
这很有意思。所以你觉得这样的氛围是怎么形成的?可能就是学生自发地去找北美的课程,然后一代一代传下去?
陈天奇
我觉得很大程度上是受于老师的影响。他不一定会告诉我们技术上具体要做什么,但是他会鼓励学生相互帮助、相互传承。
这也和他说的“高调做事”有关:我们希望把事情做到一流。我觉得这一点非常难能可贵。
何泰然 Tairan He
所以当时对很多 ACM 班同学来说,可能是第一次写编译器,但对你来说应该已经是第二次了?
陈天奇
算是。但是我觉得它的难度完全不在一个数量级上。和一个简单的 transpiler 比起来,当然不太一样。高中时候的经历更像是乱拳打这个东西,最后 somehow 能够 figure out 一些东西。
到了真正开始写大作业的时候,我已经有了一定程度的训练,所以相对来说,当然还是很多时候靠自己 figure out,因为我们当时唯一的资料,就是前面学长留下来的东西。
何泰然 Tairan He
我看到你说,本科期间你就加入了交大的 APEX 实验室,当时开始接触机器学习。在最早的时候,你在文章里写到,那时你对“科研是什么”这个问题感到非常困惑。能不能跟我们分享一下,当时的心态是什么?第一次接触科研时,最大的挑战是什么?
陈天奇
3. 科研在失败中成形
进入 APEX 的时候,选择机器学习的动机其实非常简单。当时觉得,机器可以学习,听起来很酷,那我要不要试试看?我们当时在看 Tom Mitchell 的《Machine Learning》这本书。Tom Mitchell 是我们现在机器学习系的第一任系主任,他现在还在 CMU。后来我去 CMU 的时候,也会跟他说,很多机器学习的教授都是看着那本书长大的。
当时对科研是什么感到困惑,其实我觉得大家进入科研都会有这样的困惑。从现在来看,我觉得那个困惑是非常正常的。甚至对于一个方向做了很久之后,你还是会有这样的困惑。
特别是因为科研面对的是未知。科研的目标就是要去未知的、uncharted territory 里尝试一些东西,那么必然会有不知道的东西。如果一个东西看上去非常清楚,可能是因为你做了一段时间,对这个领域相对轻车熟路了,但它的不确定性还是始终存在。
所以当时我不知道的,一是我可以做什么、我要做什么,二是后来发现,怎么样做其实也不是很清楚。
何泰然 Tairan He
你在文章里面提到了一个很有意思的经历。我不知道那是不是你的第一段科研:当时你在用 restricted Boltzmann machine 做 ImageNet 的 classification。手搓 CUDA 的经历,能不能跟我们分享一下?
陈天奇
我进入 APEX 的时候,一开始是跟着戴文渊学长。他现在在第四范式,发展得也非常好。我跟他做了差不多一个暑假,当时还在入门,看 Tom Mitchell 的书,学习写一些东西。基本上暑假之后,他就直接去了百度。
当时我们实验室处在一个学生比老师多很多的状态,所以我也不知道大家要做什么。后来我记得自己去了微软亚洲研究院,学习做一些和 advertising 相关的东西。
何泰然 Tairan He
那是你大三的时候?
陈天奇
对,大三的时候。后来回来的时候,我们实验室的薛老师跟我们说:“最近有一个叫深度学习的东西挺有趣,你们可以看一看。”
当时我们就直接去看了 ICML 和 NIPS 的论文。他们有一个方法叫受限玻尔兹曼机,应该是 Andrew Ng 他们组做的,说可以用受限玻尔兹曼机去学习人脸和其他 pattern。我觉得的确挺有趣,就想:“我们要不要来做做看?”
我和当时实验室的一个学长林源说,我们毕业设计就做这个吧,于是我就开始做这个东西。因为当时如果直接做卷积网络,我们都用 MATLAB,直接做卷积网络其实非常慢,哪怕用了 FFT 的优化,还是非常慢。
当时就觉得,似乎有一个叫 CUDA 的东西,那我们先来写写看,学习一下怎么加速。
何泰然 Tairan He
当时是几几年?CUDA 的版本号是多少?
陈天奇
差不多是 2.0,或者类似的版本。我们当时买的是 GTX 390 还是 380 的 GPU,具体我已经记不清了。实验室大部分服务器都是 CPU,当时根本没有 GPU 这个考虑,所以我们买了显卡之后,发现它塞不进去。
何泰然 Tairan He
是机箱太小吗?
陈天奇
好像不是机箱太小。显卡可以塞进去,但是电源不够,PSU 的瓦数不够。最后的解决方法是,我们又买了一个电源,把它放到机箱外面,再把主板接到机箱外面的电源,然后接回显卡。就这样搭了实验室里的第一台 GPU 服务器。
何泰然 Tairan He
但当时应该是 2009 年、2010 年左右,对吧?用 GPU 做深度学习,当时已经成为共识了吗?因为好像距离 AlexNet 还有两年。
陈天奇
当时其实已经有一些前期工作了。你会发现,ICML 上以及 Andrew Ng 他们组,其实已经有论文在写怎么样用 GPU 加速深度学习,所以应该是大家已经意识到的事情。
而且我当时在开发自己的深度学习网络,也在找相关的工作。当时已经可以看到 GPU 的 cuda-convnet,就是 Alex Krizhevsky 他们的工具,网上其实已经可以找到了。只不过距离他们一鸣惊人,还有两年。
另外一个很重要的事件,就是李飞飞老师他们发布了 ImageNet。我们一开始做深度学习时,想的是能不能做 pedestrian detection,也就是行人识别。后来发现李飞飞老师发布了 ImageNet,就觉得这个问题很好,要不要来试试看?
现在回想起来,还是因为当时没有人带,初生牛犊不怕虎。我们觉得这个任务很有趣,而且似乎很难,那就来挑战一下。当时没有很仔细地考虑里面的 complexity 是什么。
所以初生牛犊不怕虎 turns out to be good,也 turns out to be bad。首先,它是一段在科研上不算成功的经历。
从本科毕业设计开始做这个东西,本科毕设相对来说还好,不需要达到论文发表的程度。我们当时做出来的结果是,能够加速卷积的受限玻尔兹曼机,并且可以看到一些 pattern,比如 digits 里面的 pattern。
但是我们始终不能 beat the baseline。Baseline 是 SVM classification。我们当时也不知道是做错了,还是怎么样。后来我觉得,可能是那条路径本身就不太对。虽然深度学习是正确的方向,但最后真正 work 的是 supervised learning,而受限玻尔兹曼机这条路径,到现在来看并不是那么正确。
其实在研究生阶段,我还是一直有这个 passion。我在交大 APEX 读研究生,从研一一直做到研二,差不多到研究生快毕业的时候。加上本科,几乎有两年的时间,我一直在做 deep learning on ImageNet 这么一个课题。
这包括 CUDA 代码的优化。那个时候,为了搭一个模型,你几乎要花 6 个月的时间,在 C++ 和 CUDA C 里面把东西都写出来,然后再去跑。
何泰然 Tairan He
那个时候应该还没有深度学习框架吧?
陈天奇
当时 cuda-convnet 本身也已经有了。但是我的想法是,很多东西 build from scratch,还是可以更好地知道和控制你的模型是怎么样的。
何泰然 Tairan He
所以像 gradient、backpropagation 都是你自己写的?
陈天奇
对,基本上都是自己写的。当时实验室里还有其他同学一起尝试这个方向,但最后两年的时间,我们什么论文都没有。基本上就是在那里做,有一股劲,在图书馆里面调、看,但是结果始终不是一个成功的经历。
后来差不多在我研究生最后一年的时候,有了 KDD Cup。他们举办了那个比赛,我们觉得这个比赛或许可以参加一下。
当时有一篇论文叫《Reshaping Boltzmann Machine for Collaborative Filtering》,是用受限玻尔兹曼机做推荐系统的,作者也是我们 CMU 的 Ruslan 老师。我们当时正在做受限玻尔兹曼机,觉得它似乎可以用在推荐系统这个方向上,于是就尝试参加了第一届 KDD Cup。
这是我们第一次在实验室组团参加比赛。后来科研相对来说出现了一些转机,KDD Cup 那段经历也是我有机会来到北美的原因之一。
其实回过头来看,做第一段科研时,完全没有人告诉我:第一,你要怎么做;第二,你可能会碰到什么问题。
现在看来,一个很明显的错误是,当时我们觉得 ImageNet 这个问题刚出来,非常好、非常重要。这个判断是对的,因为做好科研必须去挑重要的问题。并且我们觉得深度学习很重要,深度学习里似乎比较靠谱的一个方法是受限玻尔兹曼机。
所以我们就说,OK,那一起试试看,一定要把这两个东西搞 work,用这个方法解决 ImageNet 这个问题。但是后来发现,当你做科研的时候,很难说你的眼光能够那么准:既挑了正确的问题,又第一把就挑了正确的方法。
我们基本上就是在正确的问题和错误的方法上坚持了两年,差不多是这样的。最后的结果就是,结果并不好。
后来我们做 KDD 的时候,吸取了这方面的经验。我们从受限玻尔兹曼机开始,但后来研究这个问题时发现,做矩阵分解可能会更好,于是就开始做矩阵分解相关的方法。
所以 in the end,正是因为这段经历,我们 KDD 才能够拿到好的结果。如果只是用一个方法,我觉得基本上并不能拿到这样的结果。
何泰然 Tairan He
所以从那两年有点失败的经历里,你总结出的一个以后要避免的失败 pattern,就是不能同时锁死要解决的问题和你想用的方法。
陈天奇
对。
何泰然 Tairan He
这样的错误,你在未来的经历里面再也没有犯过了吗?
陈天奇
基本上没有了。但是回过头来看,我觉得那一段经历非常宝贵。
首先,你去做科研,很多时候要做很难的问题,我觉得这样才有意思。很难的问题必然意味着不确定性和失败。接下来的问题就是,你怎么样去接受失败,或者说怎么样去接受 being willing to take the risk,愿意冒险去做一件事情。
我一开始都是初生牛犊不怕虎,自己去试。试了之后,也有很多失败的经历。比如第一年自己参加高中比赛时,我当时信心满满。我是自己学习的,Online Judge 也打过了,于是高二时就觉得自己一定可以拿到好的名次。
但是结果只拿了二等奖。我记得当时看到结果时还蛮伤心的。
在大学的时候,其实很多时候也是这样。因为去尝试挑战,比如我们做编译器时做课程设计,我们还做 CPU。当时我就想,是不是可以挑战一下,让我们自己做的编译器跑在自己写的 CPU 上面?
一开始碰到了不少问题,但是尝试去做之后,发现还是可以完成这件事情。科研一开始失败的经历,让我后来觉得,我做了两年一件事情,非常 dedicated 地做一件事情,最后 turns out 不那么成功,甚至就是失败的经历。
但是 we are fine,我还是活得好好的,也没什么大不了的。这让我后面更敢放手去做事情,因为我觉得自己可以接受失败。我觉得这一点还蛮重要的。
何泰然 Tairan He
我听起来觉得,如果你当时做得特别成功,反而有可能会形成某种路径依赖。
我看到你说,在 KDD 之后、去 UW 读博之前,你去香港待了一段时间。你在文章里面说,去了香港之后,你开始明白之前失败的原因是研究视野。能不能跟我们讲讲香港发生了什么?为什么你突然到了香港,就意识到了这一点?
陈天奇
我感觉一开始自学时,很容易获得的训练是怎么样去解决一个问题。比如做课程设计时,问题很简单:你要做大作业,把目标明确下来,然后解决它。
但是科研还有一个很重要的阶段,就是你怎么样去挑一个问题,要做什么问题,以及解决问题的方法是什么。
现在看来,我们当时挑的问题还不赖,解决 ImageNet 也是一个不赖的问题。但是在我一开始的科研生涯中,我很少知道还有哪些问题是我可以解决的。
我记得一个契机是李航老师来 APEX 做报告。在那之前,我们基本上处于没有人带的状态,都是我自己在摸索。李航老师来了之后,讲了信息检索里面的一个又一个问题,以及他们是怎么解决的。
然后我就发现,好像这些问题我都能解决,而且我还可以想出一些其他的方法。原来世界上还有这些问题,除了我一直在看的那个问题之外。
于是当时我就很兴奋,也很幸运能够得到李航老师和杨强老师的支持,去香港实习了一段时间。那时我开始知道,我们可以去看哪些问题、可以去解决哪些问题。我觉得这是一个非常大的转变。
何泰然 Tairan He
所以以前那两年你就一直盯着 ImageNet、盯着 classification,然后突然意识到外面还有很广阔的天地。
但是你当时能够意识到:“原来他们的很多问题,我脑子里都有方法,还有其他的方法。”这可能还是因为你那两年有很多内功的修炼。
陈天奇
我觉得我的路径可能会不太一样。现在看很多同学,大家可能是先知道有很多问题,然后再开始学习方法、打磨基础。
反倒是我觉得,自己得益于原来的训练。因为有方法和基础的打磨,所以有问题来了之后,我们可以上手。
何泰然 Tairan He
现在 10 多年过去了,你对研究事业有没有什么新的感悟?
陈天奇
刚开始科研时,目的还是蛮单纯的,先发一篇论文。到后来,我觉得自己更多形成的是想要做什么样的研究。
世界上有很多东西可以选择,你可以选择做这个问题,也可以选择做那个问题。几年之后,每个人都会有自己的 research taste,也就是想要做什么样的研究。这是我觉得和原来相比稍微有点不一样的地方。
何泰然 Tairan He
你现在慢慢形成的 research taste 是什么?
陈天奇
我首先意识到,世界上有不同的 research style。有一种研究方式是从方法出发,我成为一个方向的泰斗,然后把我的方法用在各种各样的地方。
另外一种方法是,我对某一类问题感兴趣,可以尝试用不同的方法去解决它。至少从我这几年的经历来看,我意识到自己属于后者。
我对实际上能够创造东西比较感兴趣。就好像我一开始希望能够自己做游戏,希望能够创造一些东西。做机器学习也是这样:创造智能、创造东西,是一个原始的 motivation。
基于这一点,我意识到我们可能不太能够一直挑选要做什么方法。开始做机器学习之后,我发现很多时候我的瓶颈来自于能不能把东西 scale up,也就是跑得大、跑得快。
我记得非常清楚,ImageNet 刚刚 break through 的时候,我和我的导师以及大家都会觉得,它到底是为什么?是因为神经网络吗?当时我们觉得,可能不一定是因为神经网络,也可能是因为有一个比较大的 hypothesis space,以及有大量数据可以 scale up。
Thus we are partly right,maybe 神经网络还是很重要,因为它有很大的参数空间。但是当时我们就想,能不能 challenge 一下这个 hypothesis?如果可以把大量数据用到其他模型类型里面呢?
当时我的偏好是,因为之前做过 KDD,我觉得树模型很强,我们能不能做树模型?我的导师则觉得,能不能做 kernel method?最后我还是觉得树模型比较好,就选择了树模型这条路。
4. XGBoost 解决系统瓶颈
当时发现很大的瓶颈在系统上。我们在做树模型时,想要做的模型,现有的东西都算得不够快。意识到这一点之后,其实现在这已经不是一个很 controversial 的观点了。大家都知道,人工智能依赖于数据、算力和算法。
比如在我们刚开始做机器学习的时候,大部分关注点都在算法上。所以从问题出发,我就觉得系统是一个瓶颈。我又不喜欢一个问题被一个瓶颈直接卡住,不能继续做下面的事情了。
所以我就想,OK,我们要不要来解决它?就这样逐渐开始做机器学习系统。这应该就是 XGBoost 最开始诞生背后的故事。
何泰然 Tairan He
所以在香港实习之后,你就来到了 UW 读 PhD。当时你应该同时也拿到了 CMU 的 PhD offer,对吗?
陈天奇
是的。
何泰然 Tairan He
怎么去了 UW?
陈天奇
原因很简单,就是因为我想跟 Carlos 做导师。当时我同时申请了很多学校,申请得比较 broadly。之所以能够申请到 CMU,也是因为 Carlos 当时有一个 postdoc 叫 Danny,他现在还在以色列做 startup。
我当时做了一个推荐系统项目,叫 SVDFeature。Danny 找到我说:“你这个东西挺有趣的。”当时我们还在他的博客上做了一个简单的访谈,聊这个项目。后来他就把我推荐给了 Carlos 和 Alex。那时 Smola 也刚到 CMU。
所以后来我选择了去 UW,是因为我想跟 Carlos。
何泰然 Tairan He
现在回看本科或者硕士阶段,你会希望给当时的自己什么建议?有没有哪些信息,是希望当时就知道的?
陈天奇
我觉得很重要的一点,是科研视野,以及你要很明白,不能同时锁定问题和方法。这是我觉得 I wish I knew earlier 的事情。
但是反过来说,以现在的我来看,I wish I didn't know them。因为我觉得人生总是要经历一些磨练,只有经历了这些磨练,才可能有契机,让你未来更大胆地去做一些事情。
我觉得只是或早或晚的问题,可能就是这样。所以这叫吃亏要趁早,maybe。
何泰然 Tairan He
好,那我们就聊你的博士期间。博士期间我觉得有 4 个项目。第一个是 XGBoost。刚刚你其实已经引入了为什么当时要做 XGBoost,是因为你和导师想要 challenge 一个假说:为什么 deep learning work。
XGBoost 可以说是从一个挑战假说的系统,成长为现在非常受欢迎的开源项目。直到昨天晚上,我看到它的引用数量已经接近 7 万了。你觉得 XGBoost 成功的关键原因是什么?为什么会这么受欢迎?
陈天奇
现在看来,我觉得很重要的一点是,我当时想把一件事情做到极致。我觉得这一点也是 ACM 班的经历教会我们的:做一件事情要做到极致,这非常重要。
当时有了这个契机之后,我就想各种各样的方法,看能不能让它尽量快一点、再快一点。所以其实当我们发布的时候,它是世界上最快的 Gradient Boosting 方法。
另外,因为我自己是做算法研究的,所以 XGBoost 里面也有一些很细节的算法,但是它可以让这个方法对于很多问题 work out of the box。
比如它有一个非常重要的特性:在很多机器学习问题里,经常会有 missing value。比如我依赖一个人的数据,但他可能不会告诉你年龄、性别或者其他信息。
在传统的机器学习方法里面,大家会先做数据清理,把 missing value 用 median,也就是中值,或者其他东西代替。但是我当时觉得,完全可以让模型自己去猜应该怎么样解决 missing value。
所以在 XGBoost 里面,它是 built in 的。如果一个 value 是 missing,它会根据历史上 missing value 的 pattern,自己决定到底要怎么样去 categorize 这个东西。这个特性实际上非常受欢迎,因为大家不想自己去解决 missing value。
我觉得这也让我第一次意识到,你需要有能力去看一个垂直的问题。如果要做一个机器学习系统,只做算法或者只做系统,都不能完全获得成功。一定要知道算法本身可以怎么样往前进,系统又可以怎么样往前进。
第二个原因,我觉得很大程度来自社区的力量。XGBoost 到后面,包括现在,主要的维护已经不是我了,还有其他人,特别是当时我的一个学弟,一直在维护相关的项目。
社区的力量非常重要,因为它可以让项目持续成长。比如我记得很清楚,R 里面有一个包,可以做可视化,展示你学习的树到底是什么样的。它是一个来自法国的律师贡献的,叫 Michael。
他想用这个东西来做 tax fraud detection,也就是检测你在交税时有没有 cheating 的情况。后来他已经转向数据、深度学习和法律相关的工作了。他应该还是在做法务和机器学习相关的事情。
所以很多时候,都是因为社区的贡献,项目才能成长起来。
第三个原因,我觉得是我们非常专注。我们第一个项目是 SVDFeature,现在已经没有人知道了。那是我们在交大做的一个项目,实验室把它当作祖传代码,用了好几代,我们做矩阵分解和推荐系统时都用它。
当时这个项目是一个非常大而全的工具,有一个 config file,里面大概有 20 到 30 个 configuration,可以写很多东西。当时同期其实也有一个现在很 popular 叫 circular 的包,它也是非常全的一个项目。但是后来我发现,对于一个小团队甚至个人来说,可能需要非常专注地把一件事情做好。
XGBoost 就是我们做了一个算法,然后把这一个算法做好、做到极致。这样的话,我觉得它相对来说比较容易获得成功。
何泰然 Tairan He
一是机制,二是社区,三是专注。
我还有一个点,你好像没有在任何地方讲过:当时你的导师想让你试 kernel methods,而你想试 tree-based methods。所以你是有自己的坚持的,当时他也没法说服你,反正你就自己去试了,对吧?这是你一直的 style?
陈天奇
对。我非常感谢我的导师,他给了我非常大的自由度。
当然这也是有原因的。我们做 KDD Cup 的第二年,winning method 是一个矩阵分解和 tree-based method 的混合模型。当时我就意识到,tree-based method 有非常强大的特性,所以后来一直对它比较感兴趣。
何泰然 Tairan He
但是 XGBoost 的论文是第三年才开始写的?
陈天奇
是的。
何泰然 Tairan He
你提到 Carlos 当时说,我们要写一篇让读者可以学到东西的文章。我觉得这很有意思,因为大部分论文的写法,是优化自己的中稿率。当时你已经觉得,应该 focus on more important things,是有这样的感觉吗?
陈天奇
Carlos 对我们的要求非常高。我记得第一次见面的时候,他就说:“You should write the best paper。”基本上就是这样的要求。
相对来说,这可能得益于他的 style。还有一点,是我们刚进实验室时得到的一个很明确的 feedback,也包括实验室其他学长的要求:我们实验室有 “no Beamer, only PowerPoint” policy。
因为我原来可以用 LaTeX Beamer 做 slide,但他们要求你做 presentation 的时候,要能够用 visual、用图示,让大家很快学会你做的东西。这一点我觉得对我们非常受益匪浅。
而且你会发现,Carlos 的研究 style 是很容易做出很多不同方向的工作。比如和 XGBoost 同期、同一年还有另一篇论文叫 LIME,是 explainable machine learning,开创了可解释机器学习这个领域。那篇论文的引用率也非常高,是我们实验室里 Marco 做的。
你会发现,他特别喜欢尝试做一些能够开创领域的工作。很多时候,你需要让更多人能够学习到你的思想。In some sense, you want to write a paper you are proud of.
何泰然 Tairan He
所以,当时做 XGBoost 的时候,有预料到它未来会这么成功、这么受欢迎吗?
陈天奇
并没有。当时就觉得,OK,之前做过,可能和之前的 project 差不多,没想到会这样引起轰动,而且这么长的时间大家还这么欢迎。
当时纯粹是:第一,我们觉得做得还行;第二,我觉得当时已经有 GitHub 了,我们尝试开源。我觉得这个挺好玩的,所以才开始尝试做这件事情。
何泰然 Tairan He
XGBoost,最后想问你一个问题。你刚刚说,你们当时的判断 partly right,其实也 in some sense partly wrong。因为时至今日,neural network 已经 dominate 了。我相信在一些 tabular data 上,还是有其他方法发挥作用,但是大部分场景还是 neural network。
我比较好奇,十多年后再反思,in some sense,你和你的导师当时都错了。你觉得当时的认知存在哪些局限性?当时的判断哪些部分正确,哪些部分错误?又有哪些部分,时至今日甚至仍然是正确的?
陈天奇
首先,我觉得当时有一个判断是正确的:模型的 capacity 不应该受限制。
我们之所以选择树模型,原因很简单,因为树模型可以 arbitrary grow。一般的模型会限定参数个数,比如一个 linear regression 有 100 个参数,它就是 100 个参数,不能 arbitrary grow。树模型有一个很强的特性,就是随着数据量增加,它可以 arbitrary grow depth。这个特性非常强。
当时我们并没有觉得神经网络不能做到这一点,因为神经网络是 tensor-based 的。但是让我一开始、最后有点 surprise 的一点是,神经网络本身是通过一种另外的、更暴力的方法来实现这个东西:我不尝试去 grow 我的 parameter space,而是直接把 parameter space 一开始就设得非常大。这是一个有一点 surprise 的地方。
当时我们之所以选择树模型,也是因为它有这个特性。这也是为什么没有选择 kernel method,因为 kernel method 并不完全具备这个特性。虽然 non-parametric model 的确也可以随着数据量增长,但它没有树模型在那个地方的特性。
而且,我觉得当时我们对树模型有一个判断是正确的:它在 tabular data 上还是非常强悍的。至少现在,在 tabular 和 time series 上,out of the box 的模型里,树模型基本上几乎还是大家的 go-to tools。原因也是因为它可以通过切割和组合,做到一般模型、包括神经网络比较难直接做到的事情。这一点我觉得是 something that I think we kind of did right。
相对来说没有意料到的一点是,后来也变得 obvious 了:神经网络另外一个非常强的特性,是它的可组合性。你可以有不同的模块,像 transformer block、linear block,它们之间可以相互组合,使得它的表达能力可以通过组合,以更 compact 的方式表示一些东西。
其实我们当时也知道这一点。比如我们知道卷积网络的确有这个能力,因为我之前做过深度学习,知道它的确可以做到。但是我们当时只是提出了一个 hypothesis:到底是模型的表示比较重要,还是数据量比较重要?我们想尝试验证一下这个 hypothesis。所以这就是当时 XGBoost 那个项目的 motivation。
何泰然 Tairan He
这是 XGBoost 的第二个项目。我想聊的是 MXNet。能不能简单跟我们讲讲,什么是 MXNet?当时做 MXNet 的背景和动机是什么?
陈天奇
5. MXNet 的框架实验
其实 MXNet 之前还有一个前身,叫 CXXNet。因为我进入 UW 之后的第二年,AlexNet 已经出来了,我们就开始觉得,深度学习是不是还可以再尝试一下。
我们同组还有一位现在大家都比较知道的人,YOLO 的 Joe Redmon,他也是我们的 lab mate,在那段研究生、博士期间做了 YOLO 这个 framework。因为我原来有过一段不那么成功的深度学习经历,但是心里一直对深度学习有很强的 passion。AlexNet 成功之后,我发现,深度学习似乎还真是比较正确的东西,我们是不是还可以尝试一下?
所以,当时就通过研究生那段时间不那么成功的经验,重新开始做这样一套深度学习框架,叫 CXXNet。当时是和许斌一起做的第一个版本。其实我们开始做的时候,贾扬清已经把 Caffe release 出来了。
我们做 CXXNet 的时候,使用了一个叫 expression template 的技术。通过模板编程,可以把 update rule,比如乘法和减法这些操作,都压缩到一个模板里面,然后生成一个内联的 GPU kernel。我们当时觉得,这个东西可以更简单地做深度学习框架,于是就做了这样一个东西。
我们当时还拿 CXXNet 参加了 Kaggle。Kaggle 一开始出来的时候,有一些和深度学习相关的项目。
后来我们做完 CXXNet,同一年,张真老师当时在 MSI,和敏杰他们做了一个项目,叫 Minerva。那时候其实是百花齐放,大家都在尝试怎么做深度学习框架。
还有林敏,他现在应该在新加坡。他之前做过一个框架,叫 Purine。木哥他们原来做的是 Parameter Server,也就是参数服务器,后来也开始尝试做深度学习。
还有池宇、张驰远,他当时在 MIT,用 Julia 写了一个框架,叫 Mocha,也是 Julia 下面的一个深度学习框架。
后来我们可能通过各种各样的契机聚到了一起。当时觉得,要不要一起来做一个项目,吸收 Minerva 的 lessons?Minerva 有一些我觉得现在看来还蛮先进的设计,比如类似于 Python-first 的方式来做。因为在 Caffe 那个年代,大家还是 C++ 核心代码、Python-first 实现。
我们当时想一起做这个东西。第一,我们要用 Python-first,在 Python 里面编写深度学习框架。第二,我们要自动调度:你可以直接在 Python 里面写 forward 和 backward 函数,但系统可以根据计算依赖,自动安排多卡并行。比如做 all-reduce 的时候,通信可以和计算一起进行。
第三,就是自动求导。深度学习第一代框架 Caffe 使用的是 backpropagation,到了第二代,则是通过计算图做自动求导。这件事对系统优化有非常大的改善。
因为木哥一直在做 Parameter Server,所以我们也希望分布式计算能够成为一个 first-class citizen。于是我们就决定一起来做这个东西。
MXNet 这个名字应该是来自 Minerva 和 CXXNet,意思是把大家混合在一起,也包括 mix programming style。很明确的一点是,它同时支持两种编程模式:现在看来,一个叫 declarative,也就是声明一个计算图;另一个叫 imperative,直接写了之后就直接计算。MXNet 当时走的是混合路线,静态计算图和动态计算都支持。
后来在 UW,我们也找到了谢俊元。他当时也在做一些相关的东西,于是大家一起合力做这样一个 MXNet 框架。
何泰然 Tairan He
这个过程也比较有意思。因为那个时候你们刚刚在努力往前推进,而你暑假又在 Google Brain 实习。你刚才说,你当时已经知道 TensorFlow 要出来了。
陈天奇
对。当时我在 Google Brain 实习,所以知道 TensorFlow 要出来了。我当时在 dogfooding TensorFlow,也就是内部试用 TensorFlow。
但是当时小伙伴们都挺 passionate 的,大家没有觉得这是一件坏事。虽然我们知道 TensorFlow 要出来了,还是觉得,我们这个初生牛犊也可以 copy 一下,对吧?所以当时甚至是很有热情地继续推动这件事情。
何泰然 Tairan He
我刚想问,你们当时是明知有 TensorFlow,还要向这个方向努力吗?
陈天奇
MXNet 开始立项的时候,我们不知道有 TensorFlow。说实话,当时的 timeline 大概是,我们在前一年的 NeurIPS 上聚了一次,决定要往前做这样一件事情。然后第二年夏天我去了 Google Brain 实习,到 Brain 之后才知道 TensorFlow is coming,也知道了当时内部 dogfooding 的事情。
我也给 Brain 介绍过一些 MXNet 的经验,但是当时觉得两者还是不一样,可以试试看。所以我和小伙伴们还是继续往前推。最后好像是 TensorFlow 先 release 了,然后 MXNet 大概在第二年的 NeurIPS 左右 official release。
何泰然 Tairan He
大概是哪几年?
陈天奇
我忘记具体是哪一年了,应该差不多是 2015、2016 年左右。
何泰然 Tairan He
当时有 Torch 吗?
陈天奇
Torch 已经有了,但是还没有 PyTorch。
何泰然 Tairan He
所以当时你们决定做 Python-first,应该还是比较独有的一个 feature,因为大部分框架还是 C、C++。
陈天奇
TensorFlow 其实也开始尝试走 Python。我觉得大家开始意识到要走 Python 这条路线,但是当时的确还没有共识。那时候的主流框架是 Caffe,而 Caffe 是 C++ 的。
何泰然 Tairan He
所以 MXNet 团队里那么多人,大部分应该是在读 PhD,对吧?
陈天奇
对,大部分是 PhD。当时木哥在 CMU,我在 UW,后来谢俊元也是 UW,张驰远在 MIT,林敏在 NUS,都是 PhD student,敏杰在 NYU。
何泰然 Tairan He
这么多 PhD student 聚在一起,会不会有那种想自己发一作的想法和压力?这种合作怎么能够 work out to be great?
陈天奇
我感觉好像根本没有人说这个事情。大家纯粹是想一起做项目。MXNet 最后我们就投了一篇 workshop paper,最后还是 arXiv 的版本。
当时就觉得,一起做一个项目往前走挺好的。完全就是觉得这个事情有价值,我也感兴趣,然后一群志同道合的人一起做。
当然,it turns out,我觉得最后木哥在这里面推动得最大,而且他做了非常大的努力和牺牲。为了让 MXNet 成功,他们当时决定,他毕业之后就去了 Amazon。后来在很长一段时间里,Amazon 一直在帮忙推动 MXNet 的 adoption 和 development。
所以木哥做了非常非常大的贡献。他是中流砥柱,能够把大家团结在一起。
何泰然 Tairan He
我知道 MXNet 后来被 Amazon 选成了官方框架。是因为 Amazon 选了 MXNet,所以李牧去了 Amazon,还是因为李牧去了 Amazon,Amazon 才选了 MXNet?
陈天奇
我觉得可能都有。而且其实不太为人知的一点是,NVIDIA 在非常长的一段时间里也一直在 contribute to MXNet。
原因是,在所有开源框架里面,MXNet 一直以来在多卡并行上都是最优秀的一款,至少在很长的一段时间里,包括 PyTorch 出来之后的一段时间。
NVIDIA 做 MLPerf submission、需要拿到最好的分数跑分的时候,一直在用 MXNet,直到 ResNet no longer became relevant 之后,后来这件事相对来说就没有那么重要了。
你觉得当时合作的团队经历中,有没有什么有趣的故事,是现在还挺值得回忆和分享的?
陈天奇
我觉得,首先大家都会相互尊重,而且纯粹就是技术上的合作。作为 PhD 同学,大家合作的时候,很多时候技术讲技术其实很简单。我们直接讨论,觉得应该怎么样往前进;应该选这个方案,就选这个方案;应该选那个方案,就选那个方案,然后继续往前走。
在技术上面,大家有非常开放的心态,可以一起来合作,我觉得这是非常好的。
何泰然 Tairan He
你觉得 MXNet 最巅峰的几年应该是哪个时间段?
陈天奇
社区最巅峰的时候,差不多应该是牧哥去了 Amazon 之后。因为 MXNet 的多卡性能一直非常好,后来像 TuSimple 的王乃岩和侯晓迪,也有很长一段时间一直在帮忙贡献和支持 MXNet。
何泰然 Tairan He
现在还在继续吗?还在维护吗?
陈天奇
现在已经不维护了。现在基本上我觉得,它已经可以退出历史潮流了。因为 in the end,我觉得还是 PyTorch is getting in the right direction。
何泰然 Tairan He
你觉得从当时那么巅峰,到现在慢慢淡出历史舞台,这个过程中你学到了什么比较宝贵的经验?
陈天奇
一个我觉得是,一定要把用户体验做到极致。这一点非常非常重要。
另外一个瓶颈是工程开发。哪怕有这么多人在堆栈里面,为了支持每一代 GPU 的性能和迭代,人手还是非常不够。这也是为什么我后来开始做深度学习编译的原因。
当然还有一些其他的经验。每一代的基础架构、基础设施,包括怎么样设计 GPU 的数据结构、怎么样设计神经网络,我觉得这些经验都被延续到了现在。包括 MXNet 本身很多设计理念,特别是在分布式调度上面,现在看来都还是非常优秀的。
何泰然 Tairan He
所以 MXNet 的用户体验没有 Torch 好,对?
我大一刚学机器学习的时候,TensorFlow 和 Torch 还是一半一半。TensorFlow 1.0 当时写静态图、debug,我那时候刚开始学编程,弄得特别难受,但是用 Torch 的体验就非常非常好。后来我就只用 Torch 了。
所以,MXNet 没有办法继续,不是因为没有大公司做支撑。Facebook 支撑 Torch,Google 支撑 TensorFlow,当时 Amazon 也有 MXNet。更多的还是用户体验,以及当时各种 road map 不够清晰,以至于没有占据更大的份额,是吗?
陈天奇
对,的确没有 Torch 好。因为当时在选择用户体验和性能上面,我们觉得一开始两者都要。但是,的确其实应该先选择用户体验。
其实后来 MXNet 本身也在尝试做转变。比如 2.0 之后,几乎全面使用了 Gluon,也尝试和 Torch 做兼容。
但是我觉得,社区方面,Torch 的社区毕竟已经比较壮大了。包括牧哥很长一段时间做的 GluonCV 和 GluonNLP,也都是非常早期、非常好用的项目。你会发现 GluonNLP in some sense 有点像 Hugging Face,会有各种各样的因素在这里。技术是其中一方面。
何泰然 Tairan He
我觉得这段经历可能也给你埋下了一个种子,可能 TVM 的种子在当时就已经埋下了,是吗?
陈天奇
是这样的。其实 MXNet 后来,牧哥他们推动了非常久。我们做完 MXNet 之后,我第一次参加 GTC,在那里讲了一下 MXNet。回过头来看,我当时就觉得,还是要花这么多 engineering effort 去支撑这个东西,怎么样能够让它变得更简单一点?
怎么样能够让更少的人做更多的事情?这件事开始让我走进机器学习编译这个方向,我觉得很有意思。
何泰然 Tairan He
我们马上会重点聊 TVM。但在 TVM 之前,你刚刚提到,曾经在 Google Brain 度过了一个暑假的实习。当时 Ian 把你拉到一个 meeting room 里面,给你画了一个坐标系。能讲讲那个故事吗?
陈天奇
当时我非常幸运,因为 Ian 刚到 Google Brain。他当时的 GAN 应该还没有发布,或者可能已经发布了,但还没有火到那个程度。所以我比较幸运地成为了他的第一个 intern。
他也非常 open-minded。我当时问他:“你要做什么?”他说:“我可以给你列一些项目。”我就跟他说,我比较有兴趣的是 life-long learning。
因为我们当时一直有一个 vision:你需要让智能越来越强大,它需要能够演化,模型的 capacity 需要变大。一个神经网络如果一开始很小,发展到一定程度肯定会不行。如果从 life-long 的角度来看,怎么样解决这个问题?
当时我就开始问这样一个问题。现在你会发现,很多时候这个问题还是同样存在。大家开始通过小模型进行 scaling up,就是因为类似的问题。
当时我们做了 Net2Net 这个项目。研究问题是:你已经有一个训练好的小模型,怎么样让它快速 bootstrap 一个大模型,使得它的容量可以变大?
何泰然 Tairan He
所以他当时给你画的那个图,一个坐标是 risk,另外一个坐标是 impact,你选了 risk 最大、impact 也最大的那个 topic。
你会建议年轻的 researcher 在科研中偶尔选择这样高风险、高收益的课题,还是应该尽可能多地选择这样的课题?
陈天奇
我觉得不同的人可能会不一样,而且每一种选择都有它的道理。至少在我现在看来,可能因为我已经经历过很多失败了,所以让我觉得再失败一次也没有那么差。
并且我始终觉得,时间是有限的,所以一定要做自己想做的事情。它不一定是有 impact 的事情,但是一定要是自己想做的事情。
所以我觉得,almost always,我们最后都会 end up 选择一个比较高风险、高回报的方向。
何泰然 Tairan He
所以你在结束 Google Brain 的实习之后,就开启了你在 UW 的第三年。你在《机器学习十年》那篇文章里提到,当时你想到了一个可以用低于线性复杂度训练更深模型的方法,结果你的导师说,OK,这可能发一个 NeurIPS poster,但你现在不应该做这种 level 的 research,应该做 best paper level 的。
你现在对这个问题有什么思考?你觉得当时 Carlos 对你的影响,包括当时你已经进入博士的中后程了,现在回看有什么感想?
陈天奇
当时他的意思是,这个方向是 promising 的,但是如果要做,就要做得更好一点。你不能光用这样一个算法,而是需要设计一个更好的方法,更自动地解决怎么样去选择 recomputation。
但是因为当时精力有限,我没有做这个东西。后来也有 follow-up work,做了相关的工作。
基本上他的意思是,你需要挑自己要做的东西;如果你觉得一定要做,就需要把它做深。我觉得这一点是非常正确的。
何泰然 Tairan He
在这里之后,你就挑了 TVM。给我们介绍一下,当时是什么样的背景,为什么在那个时刻会觉得 TVM 呼之欲出,想要去做它?
陈天奇
6. TVM 自动生成系统
其实还是从问题出发。我始终有一个愿望:机器学习系统不应该那么复杂,可以让更少的团队通过正确的技术,很快地搭建一个机器学习系统。
我们做了不少尝试,从 CXXNet 到 MXNet,发现瓶颈还在。那我们就问,能不能解决这个瓶颈?当时就觉得,是不是可以用机器学习编译这条技术来解决它?
何泰然 Tairan He
机器学习编译是你提出来的吗?之前有这个概念吗?
陈天奇
当时有一些其他领域通过编译技术解决类似问题的工作。其中比较著名的一个叫 Halide,它是在图像处理方向上,通过编译技术来解决图像处理工具开发的问题。
所以,TVM 一开始也是 inspired by Halide。我们一开始其实复用了一些 Halide 的设计。
何泰然 Tairan He
当时深度学习框架已经有了。做 TVM 的时候,Torch、TensorFlow 都已经在那里了。
陈天奇
是的。
何泰然 Tairan He
那 TVM 当时在解决什么样的重要问题?
陈天奇
我们当时解决的问题是,你本来要做一个矩阵乘,或者做一些其他的操作,这些 kernel 都是要手写的。
而且 kernel 本身对于不同的数据 layout 也有很多变种。比如在卷积网络里面,可能有 N、H、W、C,你到底是 channel first 还是 channel last,会有非常多的变种。后面还需要做算子融合,也就是把不同的算子融合在一起。
这些问题本身其实占据了非常大的空间,都是要靠手写的,根本忙不过来。所以我们真正想解决的问题就是:能不能自动生成这些东西?
哪怕只是矩阵乘,也有太多变种了。根据不同的输入尺寸和硬件形态,最优的实现都不太一样。
何泰然 Tairan He
所以 TVM 当时,我记得你有个形容,是在荒岛里面要建城堡。为什么会这么有挑战?当时的 landscape 是什么样的?
陈天奇
因为当时还没有深度学习编译这个方向。我们相当于是觉得,这个方向可能可行,要不要试试看。
而且当时还有一个 research 层面的考虑。我有一个体系结构方面的合作伙伴 Thierry,他在做深度学习加速器。我们当时用 FPGA 做深度学习加速器,做 NPU。
我们就想,要不要直接把编译器和 NPU 合在一起试试看?当时我也不知道 NPU 到底应该是什么样子,就是摸着石头过河,觉得这个东西应该这样设计。
最后,我们真的给这个 NPU 设计了一套指令集,然后开始为它写编译器。这非常像 ACM 班大作业里,从头搭一个 CPU,再为它写编译器的那段经历。
何泰然 Tairan He
那段经历也是你从头搭一个 CPU 和编译器。
陈天奇
我觉得正是因为有了原来那段经历,让我做这件事情的时候不是很慌。但是其实也做了很久。
我们从开始准备做这件事情,差不多是在我从 GTC 回来,也就是 4 月份的时候,开始往这个方向做。到第一个能跑起来的东西,应该是第二年的 3 月份,差不多 11 个月。
基本上这段时间都在写代码。
何泰然 Tairan He
所以当时你有没有担心或者怀疑过,自己在体系结构和编译器这个领域的经验或能力不足,做 TVM 的风险过高?
陈天奇
其实当时没有想风险这个问题。当时只是觉得,这个东西我想做,而且似乎是我们要解决机器学习系统问题的瓶颈,所以就去试试看。
我感觉自己做事情很少考虑风险,可能不是一件好事情。但是只要我觉得它有挑战,而且我比较清楚技术路线,就会去做。当时我在飞机上想过,大概的基本技术路线是什么样子。
而且前面每一段经历其实都是一种磨练,从 XGBoost 到 MXNet,包括之前的经历。我觉得这种架构能力是可以磨练出来的,你大概已经知道应该怎么做。
所以在这件事情上,反倒是因为前面的经验,我会更有信心。虽然它可能会花时间,但应该是可以做出来的。
何泰然 Tairan He
我注意到一个细节:你的《机器学习十年》那篇文章是 2019 年发布的。2024 年,李牧留了一个评论。他说,当时你 PhD 第三、第四年,跟他说要做 TVM,他觉得你 PhD 快结束了,做这样一个新的大坑,会不会风险太高。
然后你说,不管未来是工作、创业,还是找教职,最重要的还是做当时自己觉得最重要的事情。李牧说:“现在看起来,这是唯一正确的做事方式。所以你当时完全没有考虑,自己 PhD 做的东西已经够毕业了,也没有考虑下一个阶段的人生安排是什么。你就觉得这件事重要,那我就做了。”
陈天奇
而且其实我的导师本身也比较鼓励你去做一些自己觉得重要的事情。一般大家都会说,do impactful things,但是 impact 很难 measure,也很难 predict。很多时候 you will miss the goal,但是我觉得做自己想做的事情很重要。
何泰然 Tairan He
TVM 项目开发过程中,你刚刚说第一年的 4 月到第二年的 3 月,这个项目才一开始跑起来。11 个月的时间,其实在 podcast 里一句话就概述了,但是其中有没有什么经历可以分享给我们?有没有什么现在还记忆犹新的、不断写代码的过程?
陈天奇
我觉得是一个不断迭代的过程。比较有趣的是,again,因为我当时不怕。我们虽然不懂,但也不怕。
比如我们当时做 NPU,一开始可能想得更 wild:我能不能直接通过神经网络,把它 bake 到 FPGA 的 wire 里面去?
何泰然 Tairan He
对,这个方向有人做,后来就叫 HLS,也就是 High-Level Synthesis。
陈天奇
后来我们的结论是,OK,我们先做一个 NPU。因为 TPU 的 paper 刚出来,但没有人知道 TPU 到底是怎么回事,所以我们就想先自己设计一个 NPU。
在设计 NPU 的时候,你会很直接地看到问题。比如我们发现很明显的一点:内存读写和计算这两个操作必须同时进行。
我们一开始就想,怎么解决这个问题?一般来说,设计一条指令,读内存是一条指令,计算是另一条指令。那怎么样才能在硬件级别,让计算指令和读内存指令通过流水线或者其他方式错开来?
后来我们发现,当时设计 NPU 的想法其实非常有趣。大部分 NPU 在一开始的时候是 completely hard-wired 的。也就是说,它完全不可编程,NPU 不存在指令,直接就是一个功能,比如卷积,进去、出来。
但我们当时设计的 NPU 叫 VTA,也就是 Versatile Tensor Accelerator,它是有指令集的。因为我们是从编译的角度出发,所以可以把矩阵或者其他操作分解成更小的步骤、更小的矩阵和内存读写,用同一套指令集编程,从而实现更多的算子。
为了让一套可编程的微指令实现 overlap,我们就从 first principles 出发,思考怎么样做这件事情。我们当时设计了一套机制,用 hardware queue 和 signal 来做判断。
后来我们发现,有一些 NPU 的确也使用了类似的东西。我们当时还用了一个叫 hyper-threading,也就是超线程的概念来尝试解决这个问题。
意思是,虽然物理上 NPU 一般只有一个线程,但是逻辑上可以把它变成两个线程:一个线程做内存操作的时候,另外一个线程做计算操作。为了防止它们访问相同的硬件资源,就需要利用硬件 signal 的特性,让它们可以互相告诉对方:“我这个东西做完了,你可以继续做下一件事情。”
从这一点来看,我觉得这个 NPU 设计放到今天都还是挺有趣的。比如在 NVIDIA 最近的异步编程里面,也可以看到类似的影子。
何泰然 Tairan He
能不能给我们介绍一下,GPU、TPU、NPU 从 high level 来说有什么区别?
陈天奇
其实现在它们越来越模糊了。GPU 原来源自图形编程,但是 CUDA 再往后发展,和图形编程基本上已经没有关系了。它是一个纯粹的 SIMT,也就是 single instruction, multiple threads,可以用很多线程来编程。
一般来说,TPU、NPU 基本上可以看成一类东西。它们会有一些比较复杂的指令集,使得一条指令可以同时读一块内存,或者一条指令可以做一个比较大的矩阵。
一般来说,NPU 里面不一定会有线程的概念,因为有些指令本身就非常大。但是现在 GPU 和 NPU 也都在相互走向对方。比如 NVIDIA 会引入 tensor core,这原来是 NPU 里面才会有的东西。
很多 NPU 也可能会引入线程的概念,为了更接近 CUDA 的生态。所以我觉得现在这个界限相对来说越来越模糊了。
何泰然 Tairan He
你刚才也提到,当时做 TVM 的时候是初生牛犊不怕虎。我发现你一直都是这样:高中的时候做竞赛也是初生牛犊不怕虎,到了 ACM 班写 compiler,后面做机器学习,包括一开始做 XGBoost,一直都是这样。
所以你觉得,从这样的性格以及做事风格上来说,这会不会是你很大的一个优势?你一直保持着那种初生牛犊不怕虎的状态:OK,I’m new to this field,那我就从 first principles 出发,把它做好,做到极致。最后回头一看,自己已经成为这个领域的专家了。
陈天奇
我觉得,首先挑问题以及怎么做,都挺重要的。
我记得原来在交大的时候,敖平老师也是从北美回来的。他跟我们说,挑问题的时候,做一件比较平庸的问题和做一件重要的问题,花的时间几乎是一样的。这是真的。
陈天奇
因为你在做一个相对来说哪怕比较平庸的问题时,也有更多的细节需要去做,所以你一定要挑正确的问题。并且基于这一点,我觉得很多时候,为了去做有趣的事情,肯定是 uncomfortable 的。
我刚开始进入实验室的时候,一直在想,会不会未来有这样一个时间,我突然之间就成为了这个领域的专家?在那之后,我就不会 nervous 了,所有东西都会信手拈来,都可以 go through。Turns out, it's not the case。
现在,哪怕是现在,我觉得挑战同样存在,而且困难可能会更大,对吧?一旦你去尝试做一些不那么 comfortable 的事情,或者尝试新的东西,总会有挑战,肯定是不 comfortable 的。
反倒是随着时间增长,经验在积累,对吧?
何泰然 Tairan He
That's true.
陈天奇
但是很多时候,你做事情的勇气,我觉得还是来自最初的你自己,勇气没有变过。应该反过来说,随着时间的增长,有的时候如果你不主动去尝试,去提醒自己需要保持初心的话,反而会更容易畏手畏脚。
我觉得这个其实是,你的勇气可能是过去的自己给你自己的一个约定。你要达成过去的自己对自己的那个约定,才会继续坚持做这种 style 的工作。
何泰然 Tairan He
能感受到。TVM 第一次 release 是哪一年?
陈天奇
应该差不多是 2018、2019 年左右。应该更早,2018、2017 年左右。
何泰然 Tairan He
TVM 在社区最黄金的年代是几年?你觉得?
陈天奇
差不多也就是我们在 OctoML 那一段时间,2019、2020 年。
何泰然 Tairan He
你觉得现在 TVM 在 machine learning compilation 的生态位,比起 2019 年,现在是进步了还是退步了?包括现在可能 TVM 是 machine learning compiler 的先行者,但是现在 Torch 也在向下做 Torch.compile,TPU 上有 XLA,现在也有 Triton。你会如何定位下一阶段的 TVM?以及你怎么看 TVM 在这个生态位中的变化?
陈天奇
首先我觉得,在做 TVM 这个项目时,我带了一个不同的心态来做,因为我希望它是可以演化的。你去看现在的 TVM 和它刚开始时的形态,我们几乎已经经过了几个版本的迭代,使得我们可以更好地去适应我们看到的最新的东西。
但是在我看来,这个问题本身还是存在的。现在我们还是有一个非常大的问题,就是仍然需要非常大的工程力量,去把一个机器学习模型,特别是现在的大模型,部署到各个设备上面去。
这个问题反倒变得更复杂了。一方面,模型变得更同质化了;但反过来,模型也没有那么同质化,而且硬件本身的形态更复杂了。每一代 GPU 的编程模式都不一样,所以在我看来,这个问题本身远远没有被解决。
而且大家现在开始形成一个共识,就是编译技术是其中需要解决的一环,对吧?所以对于 TVM 本身而言,我们现在希望做到的事情是,怎么样能够继续简化这个过程。甚至不是提供一个解决方案本身,而是怎么样能够快速地针对一个垂直领域,构建出这样一个编译器。
比如说,前几年我们用 TVM 去构建了 WebML 和 MLC LLM,就是可以直接把深度学习模型、大语言模型编译到互联网网页,以及像车载设备这样的终端上面。我觉得这些东西是未来我们努力的发展方向。也就是说,我们在 keep reinventing 这个技术本身。
当然,这里面是存在未知数的,因为很多时候,很难看到一个项目可以 reinventing,并且能够自己做革新,继续往前走,对吧?所以这里肯定是存在未知数的。
但是我觉得它本身还是一个比较有趣的问题,特别是在现在,它变成了一个更有趣的问题。原因是包括 AI agent 和各种各样的 DSL 出现之后,我们也在继续做这方面的努力。
还有一个需要注意的地方是,我们需要更好地和整个生态做整合。比如说,我们最近在尝试把一些共同的部分,像它们的基本函数调用规范,单独抽象出来,使得我们可以更容易地在 PyTorch、JAX 和其他框架之间进行相互调用。
我觉得,能够继续和整个生态做更多的整合,并且在一些垂直领域做出突破,是我希望可以看到的。但最终的目标,我希望即使做深度学习编译,它仍然不是一件很简单的事情——不像写一个神经网络,你在 Python 里面写几行就可以做到。
所以我始终还是希望能够看到,能不能像写神经网络一样,让机器学习工程开发也可以变得非常简单。
何泰然 Tairan He
7. 机器学习系统走向前台
刚刚聊到 TVM,其实现在我想花一段时间,一个 chapter,聊一下 machine learning system 这个东西。因为之前的几个 project,其实或多或少全都在 cover 这个 idea。
大家对于机器学习的历史,特别是最开始接触机器学习的 general audience 以及学生来说,大多数对于历史的认知,都是一个个算法里程碑,比如 AlexNet、ResNet、AlphaGo、BERT、Transformer。
但是我们对于背后的机器学习系统的演化历程不太清晰。你能不能给我们简单讲一下机器学习系统的历史?它是怎么和算法互相交织的?过去 15 年是怎么演化的?
陈天奇
其实这些系统一直都在整个 AI 和机器学习的突破中扮演了非常、非常大的作用。回顾过去大概 20 年,你会发现机器学习本身经历了几大突破。
在我看来,第一大突破可以认为是大数据时代的来临。那个时候,机器学习基本上还是在教科书上,后来走到了我们的推荐系统。一个非常有标志性的事件就是 Netflix Challenge,也就是推荐系统比赛。
后来像字节,也就是今日头条,那个时候其实一开始就是靠推荐系统起家。这个阶段的一大突破,得益于数据量的增长:从原来几百个数据点,到了上亿级别的数据。这标志着大数据的产生。
那个时候你会发现,原来的一些非开源系统,包括牧哥、文渊他们在百度一开始做的凤巢大规模线性回归,到开源的系统,包括 Apache Spark 和 XGBoost,都属于大数据时代。
因为大数据时代有了这些工具,大家才可以把这些数据用起来,才产生了整个技术和应用上的突破。
然后到深度学习的 breakthrough,这可以认为是深度学习在 pattern recognition 上的突破。它一开始之所以能够有这个 breakthrough,很大的原因是 Alex Krizhevsky 是一个非常强的 hacker。
他们做 CUDA-ConvNet 的时候,一开始用了应该是 2 块 GPU,训练了 1 个星期的时间,在当时是不可想象的。因为我们当时做机器学习实验,时间基本上都是几分钟这个级别。你愿意花 1 个星期的时间去做这个事情,并且做了多卡优化和并行,这在当时是非常重要的。
到后来的 Caffe,其实非常大程度地推动了 computer vision 领域 adoption 深度学习。贾扬清他们的工作做了非常、非常大的贡献。
再到后面的 MXNet、PyTorch、TensorFlow,我可以做一个很明显的对比。刚开始做深度学习项目的时候,我们做一个模型一定要花 6 个月的时间,写可能 2 万行代码,才可以做出一个模型。
到了深度学习框架出现之后,你几乎可以在几分钟之内,写几行 Python,就完成同样的事情。这是非常大的技术革新。也正是因为有了这个技术革新,才导致我们有更多算法探索可以基于这些框架继续进行。
再到最近大模型的爆发,其实 machine learning system 反倒走到台前了。大家都知道,设计模型本身需要考虑模型能不能在 GPU 上跑得快;第二,一定需要有系统来支撑 scale up 和 deploy。
所以在今天,模型和系统的设计、优化以及协同设计,已经成为大家开始形成共识、认为需要做的事情。
何泰然 Tairan He
你应该是 MLSys 这个 conference 这几年的推动者。你觉得未来几年,整个 MLSys 领域会有哪些重要的方向或者挑战值得关注?有没有什么你个人特别期待去攻克的问题?
陈天奇
MLSys 本身就像数据库系统一样,是一个问题驱动的方向。所以它的 topic 肯定会来自现在机器学习领域的主要问题是什么。
你会发现,一个很大的课题肯定是怎么样能够做更好的大模型优化。并且其实还是会有一些 fundamental 的问题。比如为什么我们现在还在继续做机器学习编译?原因是硬件适配和软件 bring-up 本身,还是一个非常大的瓶颈。
还有很明显可以看到,agent system 本身也是一个非常重要的话题。怎么样能够把 AI 本身用来优化我们的 machine learning system engineering,我觉得也是一个很有趣的问题。
何泰然 Tairan He
接下来我想聊聊最近应该是在 Octo 也好、在实验室也好,你一直在做的 MLC LLM 这个项目。能给我们简单介绍一下这个项目在做什么吗?
陈天奇
MLC LLM 本身是 TVM 的一个延伸,因为我们意识到,为了做一个深度学习编译器,我们必须很清楚地知道问题在哪里。
所谓问题在哪里,就是如果现在大家都在做大语言模型,我们必须知道,实际上做大语言模型本身的优化应该怎么做。这促成了我们推动 MLC LLM 这样一个项目。
它是一个相对来说可以跨云平台和端侧的统一编译、统一推理引擎。并且它用了机器学习编译的技术,因为我们很明确地知道,我们没有足够多的能力去手工铺开、实现各个平台的支持。
所以我们希望通过这个东西,在一个垂直领域推动相关方向的开发。
何泰然 Tairan He
其实 MLC 现在我看到的 demo,已经可以跑在 iPhone 上,安卓手机可能也在做,AMD 的显卡、MacBook 都可以 deploy。比如 Llama 2,之前你们做的那些模型。
我比较好奇的是,对于 ChatGPT 时代之后,未来 inference 的格局会是什么样的?我们会有多少需求发生在端侧,多少需求在 cloud?
陈天奇
这是个很有趣的问题。你看到现在的情况,大部分都在 cloud,everything is mostly on cloud;端侧现在还是一个问号。
但是我们同时又发现,比如说 pre-training kind of stalled a bit,对吧?一旦 pre-training 开始放缓,并且模型能力开始增长,大家就会开始关注 cost。我觉得这个形态肯定会变化,取决于模型本身往前发展的速度。
因为在这之前,大家关注的是怎么样去 get to the next level of intelligence。但我觉得大家会开始关注 get to the application,然后开始关注 cost,除了 cost 之外,也会开始关注其他东西,比如 privacy,比如可能需要 specialization。
所以这个格局可能就会开始有所改变。
何泰然 Tairan He
其实我最开始看到 MLC LLM 这个项目之后,当时脑子里想到有两个要部署在端侧的需求。一个是 privacy,但我觉得我现在已经不太 care 了。我相信现在如果登录我的 ChatGPT,问它我的所有 social security number、身份证号,我估计它全都知道。
第二个需求我觉得可能是实时性。因为我们做机器人,我觉得比较有意思的一点是,如果机器人要走路、要抓一个杯子,没有时间在那里 reason 10 秒。
所以我觉得 robotics 的实时性会是端侧部署很重要的一个场景。NVIDIA 最近也在做 Thor 这样的芯片,能够部署到机器人上。你觉得 privacy 和实时性除了这两个之外,还有没有其他端侧的需求?哪怕对于这两个需求,你觉得未来会越来越扩大,还是 cloud 会有更好的 solution?
陈天奇
对于 privacy 和实时性,这取决于模型的能力。我觉得大家现在之所以使用 cloud-based model,原因还是 cloud-based model 的能力更强,这是一个事实。
这就好像一开始大家使用电脑的时候,大家都是使用 mainframe。大家觉得所有东西都可以 centralize on mainframe,然后有 personal computer,everybody has their own personal computer。
因为今天大家还是习惯使用自己 computer 上面的 software。虽然像 Chromebook 这样的 version 也还不错,但大家更多的还是会有 personal computer。
所以这完全取决于 local AI model 本身的能力到底能够有多强。它肯定不会在通用领域上完全匹配现在最大的模型,但是在一些专用领域,如果它能够达到够用的地步之后,I think the picture can change。
因为它会有 cost 和其他的需求。但是你说的 privacy 和实时性,的确是两个非常大的需求。
就我而言,如果有一个 AI 可以直接 local 使用,并且它的能力几乎和现在的 GPT 相似,我会有兴趣去 try that way。至少这是一个可能性。
何泰然 Tairan He
其实在我们今天这个 podcast 之前,我对 MLC 整个领域的理解,会觉得这是一个为了模型结构和 deployment 百花齐放而催生出来的新兴学科。
因为不同公司、不同场景、不同 modality,包括你刚刚说的不同 input 维度、不同 tensor、不同 task,都有很多优化空间。但是现在看起来,AI 的模型,特别是大语言模型,其实是越来越趋同。
我不知道具体的数据,但我猜 GPT-5 可能占了所有 inference 的一大半,剩下的可能是 Gemini,剩下的可能是 DeepSeek,可能 top 5 就占了 99% 以上。
你觉得这种趋同的趋势会让 MLSys 这个 community 衰败吗?因为大家针对这 5 种模型做这 5 种 deployment 的优化就好了。那好像就是做专有的模型优化、专有的芯片优化就好了。
陈天奇
你不能完全否认这个可能性,这个我觉得是有可能的。
On the other hand,现在比较有趣的是,一方面硬件本身 have to be specialized,因为我们已经不太能够通过通用性来解决问题了。每一代芯片往前进的方式非常不同。并且你会发现,每一代芯片的软件,哪怕是同一个 vendor 的软件,几乎都需要重新适配一些新的特性。
这意味着它的复杂度来自两方面:一方面来自硬件本身支持的复杂度,另外一方面来自模型本身迭代的复杂度。
现在特别需要专用化,导致这两个复杂度在不断往前移。你刚才说的复杂度是模型逐渐收敛,因为它们逐渐往硬件友好的方向收敛。但是为了让硬件和模型这两个东西更好地配合,它们相互之间的缠绕会越来越明显。
可是你又没有很简单的方法,可以用同一个 recipe 去 get 2x。所以大家都需要 be creative in some sense。
这就会带来一个问题:下一代硬件的解决方案和这一代硬件的解决方案会不一样,并且最适合匹配下一代硬件的模型,和这一代硬件的模型本身也可能不一样。
所以我们可以看到,像 DeepSeek 针对自己的应用场景和硬件环境做设计,才可以达到最优的效率。我觉得从这点看来,这是非常有趣的。ML system 这样一个比较体系化地看待这个问题的方向,往前走会更重要。
何泰然 Tairan He
对,哪怕模型在收敛,其实也还是有很多可以做的空间。还有一个问题就是,模型虽然看上去已经收敛了,但是为了对不同的新模型变种做 bring-up,它还是要花一些精力。
最后一个话题,我们又回到一个叫 hardware lottery 的 topic。实际上,硬件本身限制了模型可发展的可能性,导致模型本身也收敛了,但是它可能不一定是最优的形态,对不对?
陈天奇
所以从整个领域来说,它需要百花齐放。深度学习之所以能够繁荣、能够突破到今天,很大程度的原因就是它在百花齐放地往前走。
所以我觉得,就领域而言,还是有必要 enable 其他模型,让模型的百花齐放继续往前走。
何泰然 Tairan He
第二个我想问你关于 LLM 时代的 ML system 的问题。在这个时代,是不是在学术界做 MLSys,接触到的 data scale、compute scale、model scale,和 frontier AI lab,比如 Anthropic、OpenAI,会差很多个数量级?
这会不会导致学校里面的 MLSys 只能去做 scale down 的事情,没法去做 scale up 的事情了?
陈天奇
这个是不可避免的,对吧?In some sense,在学校里面你肯定不可能再做 pre-training 这样数量级的东西。
但反过来说,我觉得 lack of resource,也就是 resource constraint,也是一个 opportunity to make people more creative。比如说,为什么我们现在还比较坚持做深度学习编译这个方向?原因是因为在学校里面,我不可能用 100 个人去解决我的问题。对于大公司来说,用 100 个人去解决这个方向是非常正常的。
所以我觉得 we need to be creative。但是反过来说,学校可以给你空间,让你去比较沉淀地做一些事情,我觉得这里面还是有很多机会的。
第二个就是开源社区的合作。学校不可能是一个个体,我们一定要能够做出一些工作,让开源社区一起来共建。
像现在比较优秀的 vLLM、SGLang,它们在开源社区里面的推动也是如此。它们也是来自高校,但你会发现,成功的项目很多时候都会有高校的影子在这里。
最后,很多时候在整个生态中,还是会有一些机会。Again,就像 XGBoost 的 lesson 一样,我们会发现,你不需要做所有东西,但是可以做一些你觉得关键的东西,并且把它做到最好。
我觉得,整个 LLM inference ecosystem 里面有非常多的模块。比如你要做最强的 kernel optimization,并不需要那么大的 scale,只要能够 get access to a latest NVIDIA GPU。
像 CMU,我们最近也和 Flame Center 合作,基本上可以达到差不多 100 卡级别的 cluster。有了这样的 resource,再去和工业界比起来,你会发现,很多时候工业界也没有那么富,特别是如果你不是真正在 R&D 这个方向上,它并没有想象中那么富裕。
所以我觉得 there are still opportunities。
何泰然 Tairan He
CMU 这个 100 卡的集群听起来好像已经很好,但现在 frontier lab 都是万卡、10 万卡级别的,还是差 2、3 个数量级。
对于今天的 MLSys 研究人员,特别是对于 PhD 学生来说,你觉得如今什么样的 ML system research 最具杠杆效应,投入产出比最高?
陈天奇
很多时候,对于 ML system,在我看来,我在做一件事情的时候,不会特别考虑投入产出比。反倒我会问,至少我自己会问,这个领域的瓶颈在什么地方?是不是可以去解决它的瓶颈?
当然,我们在这个过程中可以 identify 一些问题。特别是我觉得现在 ML system 还是有很多垂直领域。
比如我们之前做 agent,就会发现,在 agent 里面做结构化数据生成,为了让 agent 本身输出的东西能够吐出 JSON,满足一个格式,这件事情非常重要。但是实际上现在的解决方案都做得不好。
所以我们去年做了一个 XGrammar 的项目。它作为一个模块,已经成为现在开源社区做结构化生成的事实标准之一,至少是之一。
所以其实有很多问题在于,可能可以 identify 出整个问题中的一些瓶颈。这是一方面。
第二个我觉得还是要看自己对什么问题感兴趣。不同的人选择的问题还是会不一样,我们选择自己有 passion、自己可以解决的问题就可以了。
何泰然 Tairan He
那如果你今天是一个三年级 PhD 学生,只能选择修复或者改变一件事情,你会做什么?
陈天奇
我应该会选择做我现在在做的事情。说实话,就是继续去解决这个问题:让更少的人用更少的 engineering resource,就可以解决机器学习系统在最新硬件上的 bring-up 问题。
何泰然 Tairan He
刚刚我们从 XGBoost 聊到 MXNet、TVM、MLC。其实你的主要成果都是开源项目,甚至从最开始那段 C++ 的矩阵分解代码开始。我看到你也说自己是 open source 和 open science 的 believer。
你能不能跟我们讲讲,首先为什么你对开源有这么大的兴趣?第二,你觉得一个成功的开源项目需要有哪些关键的过程?
陈天奇
8. 开源社区的力量
首先我觉得开源是很好的一件事情,因为大家可以在社区里面相互交流、相互分享。有时候有人可以给你的代码点赞,也可以认识不同的人。所以就社区而言,开源是一个很好的 activity。
另外一方面,我觉得对于高校而言,开源非常重要。纯高校本身其实不太容易直接让你的东西落地,你必须有能力把你的东西分享给大家,并且让大家一起来共建。
对于学生而言,我觉得开源也是一个很好的机会。一般来说,你进入公司之后,大部分情况是从做一个大项目的小部件开始,很少有人可以给你机会,直接去做一个东西的架构才能开始。
这样的机会,if I jump in, maybe you will be able to get the opportunity。但是如果不做开源项目,在博士期间其实很少能够接触到架构大系统的机会。
并且高校本身是有做开源的土壤的。第一,它相对来说比较中立;第二,很多时候开源还是需要一些社区奉献精神。所以我觉得就这一点而言,开源有它的好处。
但是它会带来 overhead,它不是一个 free 的东西。这意味着你需要花很多时间去看用户反馈、修 bug,和社区互动。很多这些东西,在传统意义上和科研、写论文并没有直接关系。
所以并不是所有的组,应该说很少有组会采取这种路线。但是的确,这是一种方式。
何泰然 Tairan He
在你的开源项目里,所有 issue 你都会一个一个去看、一个一个去 solve 吗?
陈天奇
我会经常去看,有几个原因。一个是这些反馈非常宝贵。很多时候,一个项目不可能由软件某一个时刻的代码形态来决定它的成功。
开源之所以好,是因为一个软件需要被不断维护。所以这个时候,issue 和反馈其实是非常宝贵的。
何泰然 Tairan He
你说过,开源社区里代码不是最关键的,最关键的是怎么构建一个有很多优秀 talent,并且大家都很活跃的开源社区。
陈天奇
首先我觉得技术本身还是重要的,因为你需要做正确的技术,让大家去 believe in it。
第二,社区本身需要有 passion 去推动它,因为这其实会决定别人未来有多相信你做的事情。比如说,如果我们做了一个东西出来之后,突然之间不维护了,那么大家在发布下一个项目时,自然会问,这个项目到底是不是值得相信?
所以我觉得,它需要一个 build trust 的过程,就是你和整个社区一起建立信任。
何泰然 Tairan He
下一个 chapter,我想和你聊 OctoML。OctoML 是一个基于 TVM 这样一个开源项目的 startup。当时是怎么决定要创业的?背后的故事是什么?
陈天奇
9. OctoML 的创业转型
这个还是比较自然的。因为我们毕业之后,当时做 TVM 项目有几个同学,还有几个老师,大家觉得这边似乎有一些机会,于是很自然地就说,OK,要不要去做一个 startup,就开始了。
何泰然 Tairan He
因为我的 involvement,主要是在第一年 full time,后来基本上是 part time。所以我非常幸运,有 co-founder 可以做 day-to-day 的 operation。
OctoML 一开始就是基于一个开源项目的 startup。
陈天奇
That's true。
何泰然 Tairan He
那和 Databricks 是不是有点像,也是先有一个好的开源项目?
陈天奇
是的。你会发现,现在基于开源做商业模式,并不罕见。而且对于高校来说,我觉得这是一个蛮不错的方式。
我和其他做 startup 的同事聊过,他就觉得,一开始有开源其实非常好,因为你可以先迭代项目,找到 fit。
但说实话,最后你开始做 startup 之后,想做的东西和后面真正做的东西肯定是不一样的,这是必然的。
但是至少你有这样一个机会,可以通过开源的方式让一开始的项目先产生影响力。我觉得这是一个高校产品转化不错的路径。
何泰然 Tairan He
所以我特别想和你聊聊开源,以及基于开源做商业公司这件事。其实我觉得这个关系很微妙,因为如果你开源做得太好,而你的公司又是基于这个开源项目的,那没有人会买你的 product。
我和基于 Ray 做的 Anyscale 公司的工程师聊过。他说 Anyscale 的 revenue 没有办法上一个数量级,很重要的原因就是开源的 Ray 太好用了。
你觉得 OctoML 有这样的问题吗?会不会一个东西一旦开源,大家 access 很简单,你怎么 convince 他们花钱呢?
陈天奇
其实在我看来还是反过来的。我加入 OctoML 的原因,是希望开源社区能够成功。这个 motivation 可能不太正确,但我们做这个 company 的原因,就是希望开源社区能够更加成功。
当然,公司开始运转之后,肯定需要为了公司利益往前走。我的一个 observation 是,几乎所有 startup 开始想做的东西,和最后做的东西一定是不一样的。
这在我们之前也有类似的例子。我导师他们创办的 Dato,或者说 Turi,公司改过好几个名字。我从他们之前的经历中几乎可以看到,包括 Databricks,它从一开始以 Spark 作为核心项目,到最后它的 business 发展到现在,Spark 几乎已经不是它最主要的部分。
所以我觉得,这很 naturally。它是你的起点,但几乎一定不一定是你的终点。
但反过来说,从正面的角度来看,既然选择了开源项目,你必然也选择了它的好处和不好的地方。好的地方是,它可以有 buy-in,可以拿到社区反馈,你可以有比较强的 flavor 去做一件事情。
不好的地方,或者说扩展不好的地方,必然是你需要考虑怎么样让你的商业模式和开源社区一起运作。
这里面有一些案例,比如 Red Hat,相对来说还算成功;或者 Databricks,也是比较成功的案例。
所以我觉得要看每个 case。基于开源社区做 startup,我觉得不会有天生的劣势,它只是不同的路径。不同路径必然会有它的优劣,只是不同人的选择问题。
何泰然 Tairan He
这个很有意思。你说你刚刚是为了开源社区能够繁荣,所以才包了这顿饺子、做了这个 startup,而不是反过来。因为很多人是为了做 startup,先做开源。
陈天奇
至少我当时加入 Octo 的 motivation 是这样。
何泰然 Tairan He
很有意思。因为上一期和胡彦明聊的时候,他的 startup 也是基于他的开源项目。他在 PhD 期间做了太极,做了 2 年之后发现商业化很困难,很多人都说太极很好,但我不愿意花钱。
OctoML 没有遇到这样的问题吗?或者我应该先问一个前置的问题:OctoML 的产品和生意到底是什么?这个商业模式是赚谁的钱?
陈天奇
OctoML 的商业模式有所转变。一开始我们刚出来的时候,大模型还没有那么火。当时我们觉得,可以通过机器学习编译,让大家把机器学习模型的优化和加速部署到更多硬件上,更快地部署到更多硬件上。
所以一开始,潜在客户主要包括硬件厂商,以及部署机器学习模型的客户。
到了大概 2 年之前,我们有了一个很明确的转变,就是开始做机器学习部署服务,有点像现在的 Fireworks AI、Together AI,以及整个 API 服务商在做的事情。
这个时候,机器学习编译只是背后的支撑技术,是一个让我们更好、更快地做这件事情的技术。所以它的商业模式,在整个公司发展的过程中肯定会转变。
何泰然 Tairan He
所以之前 OctoML 主要的生意已经是帮别人部署模型。比如有一个客户想要大规模使用 Llama,有一个 cloud,然后你们帮他高效地部署上去?
陈天奇
到最后其实是 endpoint business,也就是说我们直接提供 Llama 或者其他模型的 endpoint,然后他 call API。
何泰然 Tairan He
那这个市场竞争很激烈啊。
陈天奇
是的。大家都在比谁的 Llama inference cost 低,API 更便宜。
当然,在产品形态上还是可以做一些事情,比如加入 multi-LoRA inference。我觉得产品上还是有可以做的形态,但至少我们发现这是一个很重要的 business。
何泰然 Tairan He
所以一开始做 Octo、你加入 Octo 的时候,以为会做的事情,和最后 Octo 真正赚钱的生意,这个转型是很大的。
陈天奇
其实我一开始就知道这件事情。因为在加入之前,我已经看过另外一个 startup,就是我导师他们的 Turi。
他们一开始做的是 GraphLab。CMU 当时做的是大规模图处理软件,后来到他们差不多被收购的时候,已经几乎完全转型成了 Data Science 平台。
所以在开始做这件事情时,我就有这个心理准备,知道其实一开始做的事情,和 what you end up doing 一定会是不一样的。
但反过来说,我觉得这也没有关系。只要在这个过程中可以 somehow 找到 synergy point,做好技术,并且有机会继续推动开源社区的技术发展,我觉得就是一件好事情。
何泰然 Tairan He
那这个是 expected,有没有什么是 unexpected?从最开始做 Octo 到最后,你对商业和技术有没有什么没有意料到、后来学到的新的教训?
陈天奇
做 startup,我觉得最大的 lesson 是,很多时候它不光有技术因素,human factor is very important。怎么样跟人交流,怎么样在大的团队中扮演一个 leadership 的 role,我觉得这一点非常重要。
还有就是,怎么样能够快速做技术转型。因为所有东西都必须能够 reinvent yourself,顺应新的时代发展,敢于去做突破。这一点非常重要。
何泰然 Tairan He
刚刚我应该问,做 Octo、你们决定做 Octo 的时候,有想过要当 CEO 吗?还是你当时就是想做一个技术角色?
陈天奇
我很明确,我不要当 CEO。因为当 CEO 很难、很难、很难。基本上你要 full time,很多时候要放弃技术。
当时我很明确,我的 passion 在于把技术做好,所以我很明确,我不会要当 CEO。
何泰然 Tairan He
所以在 OctoML,你负责的部分是什么?
陈天奇
主要是技术方向。一开始我会负责基本技术的构建。第一年我是 full time,后来基本上就是大的技术方向,以及下一代技术的研究。
何泰然 Tairan He
在这个过程中,有没有什么你力排众议、一定要坚持的东西?有没有什么最开始你比较确信的方向,后来又自己把它推翻了?
陈天奇
的确,在这个过程中是需要 push back 的。比如你看到了未来技术的发展方向,我觉得我可以扮演的角色,就是看到未来技术的发展方向,并且保证我们可以快速地 future-proof 我们的技术。
在这个过程中,包括对于 TVM 编译技术,我们其实做了几轮迭代。比如对于 large language model 的支持,几乎是重构了,推翻了我们一开始图编译的部分,重新做了一个叫 Relax 的技术。
这件事情在开源社区和 CMU 这边,也有同学参与做相关的工作。但它不会被所有人认可,原因是毕竟已经有一套现成的技术,短期内可以解决现在的问题,并且它还会有坑。
你到底是花时间去 reinvent yourself——which will take time——还是直接去 patch 现在的东西?这始终是所有人都会面临的问题。
何泰然 Tairan He
所以你的决定是 reinvent yourself。
陈天奇
至少在我看来,会比较愿意 reinvent myself。因为 if you don't do that, there will be a time when you bite the technical debt。
何泰然 Tairan He
从 2019 年 OctoML 创立,到 2024 年底宣布被 NVIDIA 收购,整个过程 5 年多的时间。你觉得被 NVIDIA 收购,对你来说是一个符合预期的退出方式吗?
陈天奇
其实我完全没有想过这个问题。在做的时候,当时就觉得,能够把一件事情做好,看看就好。
我觉得现在回过头来看,在 NVIDIA 工作是一个不错的机会。基本上我们现在整个 organization 都在负责 NVIDIA 的机器学习编译,这边有很多很重要的问题。
而且 NVIDIA 当时收购 OctoML,一个很大的原因也是希望能够 grow AI compiler 这个方向。
何泰然 Tairan He
你在 NVIDIA 还会有做 universal deployment 的自由度吗?
陈天奇
我觉得 NVIDIA 本身比较有趣,它自己有非常不同的产品线,包括 data center GPU,像 Blackwell,到 Thor 这样的 edge 产品。
其实 cloud and edge 这个 portable deployment 的问题,在 NVIDIA 同样存在。再考虑到不同 generation 本身,我觉得这个问题仍然很重要。
然后就开源社区而言,我觉得开源社区还是可以继续推动 portable deployment 这件事情。
何泰然 Tairan He
你现在回看,如果重做一次 Octo,你会做出什么不一样的选择吗?
陈天奇
I think this is very hard to see,it's very hard to see。很多时候,你做的每一个选择和 commitment,就好像有的时候我会问自己,如果重新回到一开始做深度学习的时候,我会不会做一些其他选择。
但我觉得 in the end, all these lessons 可能会有 positive side,也可能会有 very negative side,它们都是 a part of journey。
何泰然 Tairan He
整个做 startup 的过程中,strategy 非常重要,visionary strategy 也非常重要。你在这方面学到了什么?
你之前做 XGBoost、MXNet、TVM,学到的是做开源社区、做 tech project 的 strategy。在 Octo,你学到了什么 strategy?
陈天奇
一个是还是需要思考 product-market fit 在什么地方。第二个我觉得还是很重要,就是 in the end,做优秀的技术始终没有错。
这个观点可能不会被所有人认同,但在我看来,很多时候做优秀的技术始终是没有错的。因为 in the end, you have to have something to differentiate yourself。
比如说,如果我们在 2 年之前还继续抱着原来的技术路线,继续去优化 ResNet,我觉得最后我们会输得很惨。
技术本身就是需要往前突破和革新的。可能这是因为我比较擅长、也想做这件事情,所以我会更 prefer 去思考怎么样在技术上做到 excellence。
但反过来说,startup 这段经历也让我意识到,为了让技术做到 excellence,还需要其他因素。比如和大家做比较好的 coordination,需要站在产品的角度去说服你的 partners,还需要思考为了 product-market fit,后面要怎么往前走。
这些东西都是一个过程。不同的人可能有不同的 style,我在这上面有一点点理想主义。但反过来说,这段经历让我更现实,我会知道怎么样通过现实的方式,更好地实现理想。
何泰然 Tairan He
你的另外一个身份是 CMU 的教授。你是多久决定自己想要申请教职的?
陈天奇
10. 教授仍在一线写代码
基本上快要毕业的时候,就已经决定了。我觉得第一,我喜欢做科研,可以喜欢不确定的东西;第二,跟同学们一起去解决新的东西非常有趣;第三,我觉得教大家做一些东西也是非常好的。
所以这就是我为什么选择做教职。
何泰然 Tairan He
所以过去 5 年,你可能 80% 的时间是教授,20% 是一个创业公司的 co-founder。这两个身份,多少都是教大家或者 management 偏多,定方向。
你会怀念另外一个平行宇宙里的陈天奇吗?那个陈天奇是在做很硬核的工作,每天 12 个小时做 individual contributor。
陈天奇
我还在一直写代码,我现在还在一直写代码。
何泰然 Tairan He
你一天能花多少时间写代码现在?
陈天奇
我只能说,我可以尝试抽出时间来写代码。首先,我觉得我们要先 support the team member,这是最高优先级,需要能够让同学们选择,对吧?
然后第二个,我自己还是比较喜欢,if necessary, I want to be able to be on the ground。
陈天奇
而且现在其实,在 AI 的帮助下也没有那么糟。然后可能还需要有一些耐心,所以我至少可以把它当作一个兴趣爱好来做。
何泰然 Tairan He
所以你现在一周大约还能写多少小时的代码,能分配多少时间?
陈天奇
不太能够算时间,但是基本上还是会抽出时间来写。
何泰然 Tairan He
所以你的 Git commit 还是绿色的,你的那个方块可能没有那么频繁,但是基本上还是会有。
陈天奇
其实我们最近一年一直在对 TVM 做重构,几乎是从 ground up 重新写它最核心的部分。这导致你不可能一个 commit 进来,它就完全能够让所有的 test 都是 green 的,所以差不多半年左右的时间,基本上都是在 local。
何泰然 Tairan He
这个 refactoring 是你在一线做,还是你指挥学生做?
陈天奇
基本上 foundation 的部分是我在做。但其实很多教授从当教授的第一天入职开始,之后的人生就再也没有写过代码了,可能大部分教授都会这样。
何泰然 Tairan He
你为什么选择还在一线?
陈天奇
我觉得比较好玩。第二个是,我觉得很多时候,我们的生产形态也会随着 AI tools 和其他东西发生更大的变化。
反倒是现在,如果你想要在一线,比如说没有 AI-based tools,我觉得我做这个重构会困难很多很多。但 with the help of tools, it's possible,对吧?
何泰然 Tairan He
你用的是 Cursor 还是 Claude?
陈天奇
我现在用 Cursor。我觉得 it's become possible。
然后第二个是,我觉得很多时候你需要在一线,才能 get a good sense of what's going on。但可能这只是我自己的方式,that's what I'm passionate about。
何泰然 Tairan He
所以可能正是因为你还在一线做 Git commit,你才能发现真正的问题。
陈天奇
我觉得这个肯定都是因人而异的。不同的人会有不同的,每个人都有自己的 superpower,对吧?
你可以发现,有的人 they are very CEO style,你可以很明显地感觉到,他能够带领大家往前走。有一些人可能就是 they like to be on the ground。我觉得这一类人,不同的人都会有不同的成功方式。
比如说,像 driving,他的成功方式很多时候就是因为他有 first-hand experience,可以 drive forward,对吧?而且你会发现,现在很多突破都是由有很多 on-the-ground experience 的人推动的。但是很多时候,你也会需要一个 leader-style person to lead a lot of people and move the entire ship forward。
所以我只是觉得,不同的人选择他们自己的合适方式而已。我也只是选择了我觉得让我比较幸福的方式。
何泰然 Tairan He
所以其实你写代码,你是觉得幸福的。
陈天奇
对,我觉得更像是有一个玩笑:maybe in the future, AI agents will always replace all the needs, so it becomes recreational。就是这是一个 recreational 的事情。
何泰然 Tairan He
所以你过去几年既是教授,又是 co-founder,还在写代码,做各种 system design,还要 advise 学生。你是怎么管理你的时间和精力的?你有没有面对压力,或者什么时候会 overwork、burnout?你是怎么平衡这种高效产出的?
陈天奇
首先,我并不觉得我的产出一定非常高效。比如说,如果你 count number of publications,我们 deliberately 希望能够少做一些东西,然后集中做我们觉得可以深挖的项目。
第二个,很明显,有一些东西肯定是次要的。比如说在我开始 CMU 的工作之后,我对于 OctoML 的 involvement 基本上都是 high-level technical。我非常幸运,有 co-founder 可以做 day-to-day operation,所以相对来说,我的 involvement 可以让我有时间做相关的事情。
当然,这还得益于我们有非常 independent 的 students,他们可以帮忙 drive things forward。这样我就可以在可能的时候 act as a support role。
总的来说,我觉得还是需要有所选择,能够有所 focus,知道自己最想要的是什么,然后去做。
何泰然 Tairan He
回到你 CMU 教职的部分,我注意到你 PhD 的 project 都是以年为单位的,经常一年、一年半、两年做一个 project。AI research 一直都很快,可能三四个月就是下一个 conference。我相信现在 ML systems 的节奏应该也在加快。
你是不是觉得,你之前那种一两年、以年为单位的 style,在今天还可以做得通?毕竟每一年 NVIDIA 都换下一代 GPU 了。你觉得新时代的节奏需要加快,还是你觉得仍然应该慢下来?
陈天奇
我是这么看的。很多时候,对于一个领域而言,我觉得还是需要有一定程度的沉淀。这就意味着,我们需要能够针对一个方向做比较久,去深挖,对吧?
这就好像我经常会跟我的学生打一个比喻:你去做一件事情就像捕鱼。你可以拿一个叉子,看着鱼在什么地方游过去,然后去叉它。但这个时候,很多时候你会插不准,对吧?
另外一种方式是,你先慢慢地去织一张网,在你的领域里面。这个时候,可能鱼来的时候,你失败了几次之后,或许就可以抓到那条鱼。
所以在我看来,优秀的工作本身都需要积淀。但是反过来说,很多时候,当机会来临的时候,我们或许有机会突然之间很快地推出一些东西。它的原因也不一定是因为我们很快地做了这件事情,而是因为前面的积淀使得我们有能力去做这样一件事情。
在我看来,只要能够把研究做好,哪一种 style 没有什么关系。现在的问题是不是依然重要,然后去解决它就好了。
何泰然 Tairan He
你会觉得,2025 年对比你自己的学生时代,如今的学生在做 AI research、machine learning systems research 时,有什么新的挑战?你觉得怎么帮助他们最好?
陈天奇
其实我们通过几十年的演化,已经有很多现成的经验,使得我们有能力 from the ground up build 一个东西,并没有那么难。从 first principles 去 build 这个东西,当然现在这个时代面临的挑战,确实是我们需要找到算力资源。
但我觉得 in general,从 first principles 去做,始终是没有问题的。每个时代都有每个时代的挑战。
就好像我刚开始做机器学习的时候,我们当时在听一个报告。戴文渊坐在我旁边,然后他跟旁边的同学感叹说:“我们在听一个报告,他们在讲某一种优化方式去优化 support vector machine。”
他说,当时觉得如果自己早两年入行就好了,因为好像这些东西 very elegant,自己也能做,但是 somehow 现在的问题好像已经被做光了。
那是在二十年之前。It turns out there's always new problems,对吧?所以每一个时代都会有它新的问题,也都会有可以解决的挑战。
何泰然 Tairan He
之前我们聊了很多你 PhD 期间 Carlos 对你的帮助。你现在也是教授了,你的 advising style 是什么样的?和他一样吗?
陈天奇
相似的地方有几个。第一,我们希望能够做深,做有影响力的工作,这一点我觉得还是非常重要的。
第二,比如说我们怎么样做 presentation,特别是在写论文的时候,怎么样能够让我们的论文变得 accessible,让大家都能够读懂,我觉得这里面也会有一些相关的影子。
另外,我也会尝试在整个机器学习系统这个方向上推动团队合作,把项目从 research 阶段推动到真正能够达到 adoption 的阶段。这个时候需要让整个团队一起合作、动起来。
这其实也得益于我们原来做 MXNet 那段时间的经历,我觉得那段经历非常 positive。所以,怎么样鼓励大家继续有机会去做这样的事情,或者给大家创造环境,让大家有机会做这样的事情,这就是我想要做的东西。
何泰然 Tairan He
MLCS 这个领域很杰出的 PhD students、PhD 申请者,我相信百分之百也是业界非常青睐的人选。你会如何说服这样的人跟你去读博,而不是去 xAI、OpenAI 搞 infra?你吸引这样最优秀的人才跟你读博的主张是什么?
陈天奇
我只会说,博士和其他事情不一样的地方是,it's like a longer investment。你会有足够多的时间和足够多的自由度去做一些事情。
当然,你在其他地方也未必没有自由度和时间做相关的事情。但总的来说,去对比工业界和学术界,你始终会发现,学术界的 open science alignment,相对来说在做事情的自由度,以及对于犯错的 tolerance 和时间尺度上,始终是更大的。
我也相信,还是会有有想法的同学愿意选择这条路。
何泰然 Tairan He
最后一个 chapter,我想跟你聊聊你几个人生智慧。
我觉得第一个关键词是长期主义。你刚刚也提到了,有两种 research 的方式:第一种是我用什么方法,比如 reinforcement learning,我就做好 reinforcement learning,寻找不同的 application。你觉得你是第二种,第二种是我要 solve 一个问题,什么方法 work 就怎么来。
你举过一个例子,说曾经有人问过你,如果明天某个化学反应可以解决机器学习系统的问题,你会做什么?你说你就会去学习 chemistry。
你会如何评价这样的研究风格?那段文字是你 2019 年写下的,现在距离 2019 年又 6 年了,有什么反思吗?你还是坚持这样的风格吗?
陈天奇
11. 长期主义与初心
首先,我觉得每一种风格都有它成功的可能性,they are all successful examples。没有必要说哪一种风格一定是好或坏的。
只是对我而言,我觉得想要解决实际的问题,肯定是从实事求是出发最好,对吧?所以我比较喜欢这样,还是会坚持这样的风格。
何泰然 Tairan He
第二个,我刚刚也提到了李沐在你文章下面时隔 5 年后的那个评论。然后我想念一段你在《十年总结》上面写的原文,你说:“很多困难和无助只是随机涨落的一部分,只要付出足够多的时间和耐心,随机过程总会收敛到和付出相称的稳态。”
我觉得这段话很打动我。你能不能进一步帮助我们更好地理解这背后的理念?在一个充满不确定性的科研和创业过程中,你是怎么践行长期主义的?当短期看不到成果,甚至很挫败的时候,你怎么支撑自己熬过去?
陈天奇
首先,其实那段关于随机过程的话,它就是一个定理。因为在随机过程中,它就是随机的,但是长期做 time average 之后,它就会是稳态,对吧?
但其实这对每个人来说都很难。虽然你可以说要坚持长期主义,但在每一个时间段始终都会有挫折,而且挫折甚至是大部分时间都会存在。一旦你想要突破自己的 comfort zone,获得挫折的概率可能会越来越大。
但我觉得这就是每个人的选择。我自己可能是得益于,一开始的时候我觉得失败也没那么可怕,然后接受可以失败这个事实。我觉得这样就还好了。每个人都需要在往前走的时候给自己鼓励。
而且很多时候,这种鼓励都来自最初的那个选择,来自初心本身。我觉得初心还是很重要的。你在不断往前走的时候,可能会想,在某个时间点肯定会有挫败,但是反过来说,that's also part of the journey,对吧?
何泰然 Tairan He
那你的初心是什么?
陈天奇
这个可能还有点模糊。但总的来说,至少一开始的时候,我们希望能够解决的问题,就是让人工智能可以被更多人使用,让每个人都可以创造他们自己想要的人工智能系统。
这是我们一开始就想要做的事情。然后我觉得现在至少还有有趣的问题存在,所以可以继续去解决它。
何泰然 Tairan He
第二个我想和你聊的智慧关键词是选择。刚刚一路聊下来给我的感受是,这其实是一个相当 deterministic 的过程:你做完 XGBoost,很自然而然地做了 MXNet;做完 MXNet,又很自然而然地做了 TVM。
但我其实相信,你有很多很多的选择。做完 XGBoost,你肯定除了 MXNet 还有其他选择;MXNet 除了 TVM,也有其他选择。但你最后走了这条路。
你回看这一个个选择的分岔路口,觉得自己做选择时最看重的是什么?你的底层逻辑是什么?
陈天奇
可能你要去问,如果选了这条路之后并且失败了,你会不会后悔?我基本上会问这个问题。
因为这样的话,很多时候你选的是自己最想要的。这是一个有点理想主义、也有点不那么理性的决定。但很多时候,你的选择都是这样,对吧?
其实反过来就是问,如果你不那么选,你会不会后悔?很多时候,你后悔的理由不一定是有没有获得成功,而是你是不是觉得,这个东西是不是你理想中想要走的那条路。
然后,再通过一个比较现实主义的方式,选择一条你觉得合适的路径。至少这是我比较常用的方法。
何泰然 Tairan He
很有意思,我觉得这一点上我很有共鸣。
我本科也做了很多科研,但现在想起来,本科最不后悔的一件事,是当时做了一个叫“无可奉告”的匿名论坛。那段时间科研上什么产出都没有,课也上不好,GPA 也不好,但我就是开心做那件事。
我现在觉得,当时如果不做这个,我会后悔。做了之后很快,不到半年时间也被关停了,但现在回忆起来,我觉得那是我最值得回味的一段经历。
陈天奇
很多时候,你必然会在这个过程中,从实用主义的角度来说,碰到挫折和各种各样不可预料的东西,对吧?
然后你会发现,最后最重要的还是你是不是可以享受这个过程。
何泰然 Tairan He
在 2025 年,我们今天录制的日期是 2025 年 9 月 5 日。因为去年年底 OctoML 刚被收购,我觉得你已经经历了科研上作为一线科研人员十年磨一剑的过程,创业从 0 到 1 你也做过了,也 exit 了。教职我相信你也快 tenure 了。
展望未来 5 到 10 年,陈天奇还想干什么?
陈天奇
其实我觉得,现在的我最难的事情还是要保持初心。
首先,肯定还是会碰到困难。我们做的事情是困难的,而且这个领域变化得非常快。从大语言模型刚出来的一段时间开始,相信大家都会经历一段时间的迷茫:我们何去何从,接下来要做什么?这个问题每个人都会问。
但我觉得最难的是保持初心和 passion。这个东西随着年龄的增长,可能会递减。所以只要保持这样的东西,认准想要做的问题,不要害怕失败就好了。
而且很多时候,我觉得做事情的勇气可能会来自过去的自己。在你做的过程中不断鼓励自己,再把这份勇气交给未来的自己。
何泰然 Tairan He
所以你会觉得现在的自己选择更多,for sure,能够调动的资源也更多。你肯定比 10 年前的陈天奇能够调动更多资源,不是一个数量级的。
但反而你觉得现在保持初心这件事更难。为什么?是因为有其他诱惑吗,还是选择太多了,不知道该走哪条路?
陈天奇
一方面,很多时候当你看到的东西多了之后,你会开始担心。刚开始做 MXNet 的时候,我们完全不会担心 TensorFlow 会对我们产生什么样的竞争。我们就是初生牛犊,干就是了,对吧?
当然,现在有的时候你会回过头来,发现自己正在做一个项目。可能有时候你会反复问自己,它到底能不能成功。
何泰然 Tairan He
你现在会问这样的问题了?
陈天奇
有,有时候不可避免地会问,对吧?但反过来说,怎么样能够保持那个初生牛犊的心态,还是想着我们就做吧,不要害怕失败。
不可避免地,我觉得的确会有各种各样的因素让你去想这个问题。包括你在公司或者其他地方尝试拿到资源的同时,必然也代表着责任。你必须保证你的团队可以成功,也必须保证一旦拿到资源,就能够产出一些相应的 impact,来 justify 你可以继续做相关的事情。这样就会产生一定的重量。
但反过来说,如果你直接被这样的东西裹挟而走,我觉得也不是一个很好的状态。相比当年做 MXNet,你会更难去做更 risky 的事情,对吗?
我觉得现在来说我还是幸运的,因为我有 CMU 的团队,我们可以继续做 risky 的事情。这完全取决于个人的决定,对吧?你愿意放弃,愿意接受失败,这个心态其实是一样的。
就这个而言,我们能做的事情的确比原来更多了。因为我们有更大的团队,可以做更多的事情,只是心态上的转变,可能有时候会让你忘记原来的自己。
何泰然 Tairan He
你在 AI 这个领域 20 年了吧,将近。从最开始的大数据,到深度学习的热潮,再到今天的 foundation model。很多人说我们现在已经实现 AGI 了,很多人说我们还没有到 AGI。
你对 AGI 的定义是什么?以及要实现你定义的那种 AGI,我们需要什么样的 ML system?
陈天奇
其实我对 AGI 本身怎么定义,并不是特别感兴趣。我觉得只要它能够 pragmatically 有用,比如说能够提高我们现在的生产效率,我们现在的确可能比之前无比接近那个目标。
比如说,我们之前一直想,能不能甚至由一个人的团队,撬动起现在 100 个人团队才能做的事情。现在的技术可能的确能够让我们更快地向那个目标前进,对吧?
我觉得只要能够往那个目标前进,就是一件好事情。
基于这一点,可能会有不同的 ML system styles。我觉得我们始终坚持的路线,是能够让我们用更少的资源、更自动地做更多的事情。这一点始终是一个很有趣的问题。
或许它在几年之内会被解决,或许它可能不一定会被解决,但是我觉得至少它是一个值得为之努力的方向。
何泰然 Tairan He
最后我想让你展望一下未来的 AI 世界,另外也给今天的年轻人一些建议。
你觉得未来的 AI 世界还是会像今天这样由巨头主导,几家公司出几个 model,还是你会看到开源和多元的 individual、个体会有越来越多的话语权?
陈天奇
就我个人而言,我肯定希望是一个百花齐放的世界,能够让开源和每个个体都可以创新。
何泰然 Tairan He
你觉得那样的世界出现的概率是在增加还是减少?
陈天奇
我只能说,它需要每一个人的努力。肯定会有不同的人有不同的信念。
何泰然 Tairan He
如果让你给 20 年前的陈天奇、10 年前的陈天奇,给那个时候刚刚开始这段旅程的自己说几句话,你会说什么?
陈天奇
可能要反过来。我希望现在的我对未来的我说:记住自己对自己的承诺,然后坚持自己的理想往下走。
何泰然 Tairan He
所以反而不是你希望回到过去改变些什么、告诉自己些什么,而是需要过去的自己来提醒现在的自己,提醒未来的自己。
陈天奇
对。
何泰然 Tairan He
在你现在这个人生节点上,你对“成功”这两个字有了什么新的理解吗?
陈天奇
比起年轻的时候,我觉得每个人都会对自己想要的东西做一个排序,对吧?
在我看来,最重要的东西还是做问心无愧的事情。
何泰然 Tairan He
什么样的事情是问心无愧的?什么样的事情是问心有愧的?
陈天奇
可能也不是有愧或者无愧。其实你追求成功,它有非常多的定义,对吧?
比如说,影响力是一方面,财富或许是另外一方面。其他的,比如技术上的突破,你能够从不同的方面去 impact the world。
不同的人可能会选择不同的方式。在我看来,能够在技术上影响大家,并且为这个世界做一些贡献,就是一件好事情,这就是成功。
何泰然 Tairan He
那你对幸福有没有什么新的感悟?包括我特别好奇,你经历了各种人生阶段之后,现在最理想的人生节奏是什么样的?
是在 CMU 当教授,还是在 OctoML 创业,或者新开一家新的公司、全职创业,还是回到 PhD、ACM 班时期那样专注写代码的状态?哪一种是你最理想的人生状态?
陈天奇
我觉得应该是和大家一起解决想解决的问题就好。
何泰然 Tairan He
不管你以什么样的形态,不管抬头是什么,对你来说,这件事最核心的吸引力和魅力是什么?
陈天奇
一方面,解决问题的过程本身很有趣,对吧?第二个是,可能你尝试了那么几次之后,还真能够解决一些东西。
何泰然 Tairan He
天奇,我们今天聊了 3 个小时。我想最后留给你一段时间,你可以说任何你想说的。
因为我们所说的这些东西,会变成一个时间胶囊,放在 2025 年这个时间节点上。你可以说一些对你影响很深的话、你自己的信条,或者讲讲你自己的价值观。什么样的东西都行,自由发挥。你想留在这个 podcast 最后的那段话是什么?
陈天奇
在整个过程中,我其实非常幸运,能够获得不同的人的帮助,也能够取得一些成果。
但我觉得在整个过程中,最让我感觉收获深刻的是,我们还是可以接受失败,并且在接受失败的过程中继续鼓励自己,继续做有趣的事情。
这一点可以让我们在每个过程中重新出发。其实你在做科研的过程中,也都是一个再出发的过程。现在这个时代,很多时候 we need to reinvent ourselves,然后 keep doing the next thing。
我觉得这是一个很有趣、也是我希望能够一直保持的事情:接受失败,并且能够提醒未来的自己,继续按照当时的初心努力,不要怕任何事情。
何泰然 Tairan He
所以一个理想状态下,10 年后、20 年后的陈天奇,应该是一个经历过更多次失败的陈天奇。
陈天奇
会有更多的失败,并且能够继续保持最初的心态,去挑战我们想要挑战的东西。这样最好了。
何泰然 Tairan He
好,感谢天奇你的时间,我们今天就到这里。
陈天奇
谢谢,谢谢,谢谢。