编者按:本文根据《Lex Fridman 播客》第 70 期现场录音编译整理。对谈一方是吉姆·凯勒(Jim Keller),传奇的微处理器架构师,先后任职于 DEC、AMD、苹果、特斯拉,录制时刚加入英特尔,主导过 AMD 的 K7、K8、K12 与 Zen 微架构以及苹果 A4、A5 处理器,也是 x86-64 指令集与 HyperTransport 互连规范的合作者之一;另一方是主持人莱克斯·弗里德曼,麻省理工学院研究人员,研究自动驾驶与人机交互。谈话从人脑与处理器的分野出发,一路走到摩尔定律的存续、数学层级的跃迁、宇宙是否是一台计算机、自动驾驶的难点,以及超级智能之下人的位置。整理时只删去了口头语、寒暄、重复与残句,所有论证、例子与锋利的判断一并保留。
主持人: 今天的嘉宾是吉姆·凯勒,传奇的微处理器工程师。他在 AMD、苹果、特斯拉都待过,现在在英特尔。他主导过 AMD 的 K7、K8、K12 和 Zen 微架构,做过苹果的 A4、A5 处理器,还是 x86-64 指令集与 HyperTransport 互连规范的合作作者。他是个彻底从第一性原理出发的工程师,习惯跳出既定框架去想问题,本人也非常有意思。我们先从一个偏哲学的问题开始:人脑和以微处理器为核心的计算机之间,有哪些相同,又有哪些不同?
凯勒: 既然人们其实并不真正知道人脑是怎么工作的,那就很难比较。
主持人: 这话我同意。
凯勒: 计算机说到底只有两样东西:存储和计算。到今天为止,几乎所有计算机架构都采用全局存储,这是一个实实在在的东西,然后是计算,你把数据取出来,做一些相对简单的运算,再把数据写回去。在现代计算机里,这两者是解耦的。
主持人: 你的意思是,人脑里这两件事是混在一起的,是一团缠绕的东西?
凯勒: 人们观察到的是,大脑有若干层神经元,既有局部连接也有全局连接,信息以某种分布式的方式存储。人们在计算机里做出了所谓的神经网络,信息也以某种方式分布着,背后当然有数学,但我不认为大家对这套数学的理解有多深。我们在上面跑的计算都是很直白的计算。至今没有人能说,一个神经元执行的就是这个运算。所以到今天为止,两者仍然很难比较。
主持人: 在把视角拉远之前,我们先说基础。从零开始造一台计算机是怎么回事?什么是微处理器?什么是微架构?什么是指令集架构?甚至可以往回退到,什么是晶体管?
凯勒: 计算机工程特别迷人的地方在于,它对抽象层的理解相当清楚。自下而上:先有原子,原子组合成材料,比如硅、掺杂硅、金属;在这之上我们造出晶体管,再造出逻辑门,再造出功能单元,比如加法器、减法器、指令解析单元;然后把这些组装成处理单元。现代计算机大概由十到二十个局部一致的处理单元构成,这些东西再去跑程序。软件那边同样有抽象层:先有一套指令集,再往上是汇编、C、C++、Java、JavaScript。本质上,这条链子从原子一直通到数据中心。
凯勒: 所以你要造一台计算机,首先得有目标:它用来干什么,得有多快。今天光是衡量「多快」就有一整套指标。然后,在一个上千人的组织里造计算机,需要许多完全不同的专业分工同时运转。
主持人: 所以既有技术上的抽象层,也有组织上的抽象层。而在每一层上都有人的智慧介入,有的部分是科学,有的是工程,有的是艺术。如果一定要挑,你最看重、最喜欢哪一层?魔法是在哪一层进入这个体系的?
凯勒: 我其实不在意这个,好玩的地方就在这儿,我对层次是无所谓的。我会说,在相当长的时间尺度上,指令集是稳定的,比如 x86 指令集、ARM 指令集。
主持人: 什么是指令集?
凯勒: 它规定你怎么编码那些基本操作:载入、存储、乘、加、减、条件分支。真正有意思的指令并不多。你去看一个程序运行的情况,百分之九十的执行时间落在二十五个操作码上,也就是二十五条指令,而这些是稳定的。
主持人: 「稳定」意味着什么?
凯勒: 意味着这套架构存在二十五年了,它管用,一直管用。因为最基础的东西很久以前就定下来了。
凯勒: 但老式计算机的运行方式是:取指令,按顺序执行,做载入,做加法,做比较。现代计算机的运行方式是:一次取进大量指令,比如五百条,然后算出这些指令之间的依赖图,再把其中彼此独立的小图交给不同的执行单元去跑。所以,人们喜欢说计算机应该简单、干净,可事实是,简单干净但慢的计算机,市场规模是零。我们卖不出去任何一台简单干净的计算机。实现方式可以是干净的,但人们真正愿意买的那种计算机,无论是手机还是数据中心,都是取进大量指令、算出依赖图,再以某种方式执行出正确答案并顺带优化那张图。
主持人: 也就是深度乱序执行。
凯勒: 对,深度乱序,围绕内存顺序还有一整套语义。计算机内部有一堆记账用的表格,记录这些操作以什么顺序完成,或者说以什么顺序「看上去」完成。但要跑得快,你就得取进很多指令,把并行性全找出来。
凯勒: 还有第二类计算机,今天我们叫它 GPU。我把区别称为「找到的并行」(found parallelism)和「给定的并行」(given parallelism)。前者是:你有一个程序,里面很多指令彼此依赖,你取进一批,算出依赖图,再乱序发射。之所以要这么做,是因为你手上只有一条串行的叙事要执行,而这条叙事事实上是可以乱序完成的。
主持人: 你把它叫做叙事。
凯勒: 是啊,人是按串行叙事思考的。你读一本书,一句接一句,一段接一段。你其实可以把它画成图,如果画得足够准确,你就能指出哪些句子可以任意调换顺序而不改变意思。
主持人: 对一本书提这个问题,本身就很迷人。
凯勒: 你确实可以这么做。有些段落能重排,有些句子能重排。你说「他又高又聪明」,高和聪明的顺序无所谓;但你要说「那个穿红衬衫的高个子男人,他衬衫什么颜色」,依赖关系就出来了。
凯勒: 而 GPU 是另一回事,它在像素上跑非常简单的程序,但一次给你一百万个像素。就你眼前这块屏幕而言,先算哪个后算哪个根本无所谓。所以我把那个叫「给定的并行」:围绕大量对象的简单叙事,你可以直接宣布它是并行的,因为你已经告诉我它是并行的。而「找到的并行」里,叙事是顺序的,你要去发现其中一小块一小块的并行。
主持人: 是很小的口袋,还是其实相当大?
凯勒: 相当大。
主持人: 那要把这些并行找出来有多难?
凯勒: 那只是晶体管数量的问题。一旦你把问题攻破了,你就能说:这是一次取十条指令的办法,这是计算它们之间依赖关系的办法,这是描述依赖关系的办法。这些都是可以拆出来的零件。依赖关系一旦描述清楚,剩下的就是一张图。
主持人: 这里有没有理论上的最优解?就一般的现代程序而言,人写出来的程序里到底有多少「可找到的并行」?
凯勒: 大概十倍。
主持人: 十倍是相对什么而言?
凯勒: 相对按顺序执行。按顺序执行,你得到的指标叫每指令周期数(CPI),大概是三,也就是每条指令三个周期,因为运算本身有延迟等等。而现代计算机能做到零点二到零点二五个周期每指令。所以今天大约就是十倍。
凯勒: 这里面有两件事。一是叙事中固有的并行度,二是叙事的可预测性。有些操作做完一堆计算之后会问,如果大于一就做这个,否则做那个。这类判断在现代计算机里能被预测到百分之九十多的准确率。
凯勒: 分支出现得非常频繁。设想一下,平均每六条指令就有一个判断要做,可你想一次取进五百条指令,把依赖图算出来,然后并行执行。假设你取了六百条指令,每六条一个分支,那就是一百个分支,你必须预测对九十九个,这个窗口才有意义。
主持人: 也就是说,分支是没法并行的,或者说……分支预测到底是什么意思?
凯勒: 想象你反复做同一件计算,你在一个循环里,条件是「大于一就怎样」,而这个循环要走一百万次。那么每次看到这个分支,你就可以说,它多半还是大于一。
主持人: 而且你说这种预测非常准。
主持人: 我一下就懵了,这到底是怎么做到的?
凯勒: 你要知道,最让人感慨的是这个。二十年前,做法就是记下上一次这个分支往哪边走了,然后预测它还往那边走。
主持人: 那准确率是多少?
凯勒: 百分之八十五。后来有人说,我们留几个比特,做一个小计数器。它往一个方向走就加一,往另一个方向就减一。比如你有一个三比特计数器,加加减减,最高位当符号位,于是你有了一个带符号的两比特数:大于一就预测跳转,小于一就预测不跳转,或者小于零,随便你怎么定。这一下把准确率带到百分之九十二。
凯勒: 再后来有人说,这个分支的走向取决于你是怎么走到这里的。如果你从这条路径过来,说的是鲍勃和简,然后问「鲍勃喜欢简吗」,那走一个方向;但如果你说的是鲍勃和吉尔,问「鲍勃喜欢她吗」,就会走另一个方向。这就叫历史。于是你把历史和计数器结合起来。
主持人: 这很妙。
凯勒: 但今天已经不是这么干的了。现在用的东西有点像神经网络。你把所有执行流拿过来,对程序的执行方式做深度的模式识别,而且用好几种不同的方法同时做,再有一个机制去挑哪个结果最好。计算机里面藏着一台小超级计算机,专门算分支往哪走。这样一来,值得去搜寻并行性的有效窗口就更大了。
主持人: 你刚才说这让人感慨,可我觉得这太厉害了。
凯勒: 它厉害在复杂得吓人。有意思的是:做到百分之八十五,用一千个比特就够了;做到百分之九十九,要用几十兆比特。这是那种典型的情形,为了把窗口从五十条指令扩到五百条,你付出了三到四个数量级的比特。
主持人: 如果分支预测错了会怎样?
凯勒: 流水线要清空,代价体现在性能上。不过还有更妙的。现在有人在研究这样的情况:你沿着一条路径执行下去,前面有两条岔路,但在很远的地方,有些东西其实跟你走哪条路无关。于是你走错了路,执行了一堆东西,发现预测失败,退回去,但你把已经算出来的结果都记着,其中有一些是完全有效的。就像你读一本书,某一段读岔了,但你对下一段的理解有时候是不受影响的。
主持人: 有时候受影响,有时候不受,而且这种不变性是可以预判的。
凯勒: 对,你可以跟踪那部分数据有没有变过。等你再回到某一段代码时,你就知道该重算,还是直接沿用。
主持人: 这里面多少是艺术,多少是科学?听上去相当复杂。
凯勒: 这么说吧。想象你走到路口,得做个决定,你手上有一堆判断依据,也许还有地图。你是想走最短的路,还是最快的路,还是风景最好的路?这只是一组数据而已。现在想象你在做一件很复杂的事,比如造一台计算机,有几百个决策点,每个点有几百种可能的走法,而你选的走法之间还以复杂的方式相互作用,你必须选对地方。就是这么回事。所以我说不好。
主持人: 你把这个问题绕过去了。你刚才描述的其实就是罗伯特·弗罗斯特那首《未选择的路》。
凯勒: 我描述的是弗罗斯特的难题,只不过我们是以计算机设计师的身份在面对它。
主持人: 全是诗意,太好了。
凯勒: 我确实不知道怎么描述这件事。有些人特别擅长做那种直觉的跳跃,能看出各种东西之间的组合关系;有些人不擅长跳跃,但极其擅长评估备选方案。每个人的方式都不一样。所以计算机是由技能构成完全不同的一群人合作设计出来的,一个好团队里各种人都有,其中一部分你大概会形容为有艺术家气质,可惜或者说幸好,这种人不多。
主持人: 是幸好还是可惜?
凯勒: 计算机科学很难,百分之九十九是汗水,百分之一的灵感当然极其重要,但那百分之九十九你跑不掉,活得实打实地干。而且这条堆栈的每一层上都有有意思的事情可做。
主持人: 说到底,同一个程序跑很多遍,是不是总会得到同样的结果?还是说,中间存在一些模糊的空间?
凯勒: 这是个数学问题。如果你跑的是一个正确的 C 程序,按定义,每次运行都会得到同样的答案。这是一句关于语言定义的陈述。
凯勒: 不过,当年我们最早做三维图形加速的时候,同一个场景跑多次是会得到不同结果的。有人觉得没问题,有人觉得这很糟糕。等到高性能计算领域开始用 GPU 做计算,他们就认定这非常糟糕。
凯勒: 而现在的人工智能领域,人们在看这样一类网络:数据精度低到本身就带着噪声。而且大家观察到,输入数据本来就噪声大得离谱,那凭什么计算过程必须一点噪声都没有?于是有人试验带噪声的算法,靠容忍噪声更快拿到答案。比如网络开始收敛时,你去看那张计算图,它一开始很宽,慢慢变窄,你可以问:最后那一点点还重要吗?我是不是可以先开始下一轮,而不必一路算到底?这样就能造出带噪声的算法。
凯勒: 但如果你在开发一个东西,每跑一次得到的答案都不一样,那真的很烦人。所以直到今天,绝大多数人还是希望每次运行拿到同样的答案。
主持人: 我明白,但这正是编程语言的形式化定义所在。
凯勒: 确实有一些语言的定义并不保证同样的答案,可是用这些语言的人还是想要那份确定性。因为你一旦拿到一个坏答案,你就得琢磨:这是因为程序写错了,还是因为那个不确定性?所以每个人都想要一个开关,写着「无论如何请给我确定性」。这挺奇怪的,因为进入货币计算之外的几乎一切输入都是带噪声的,凭什么答案就必须干干净净。
主持人: 那你站在哪一边?
凯勒: 我为跑程序的人设计计算机。既然大多数人要确定性的答案,那就给他们确定性的答案。人们没意识到的是,你拿到的是确定的答案,可执行流程完全是不确定的。同一个程序跑一百遍,内部运行方式没有两遍是一样的,一次都没有,但每次给出的答案完全相同。
主持人: 这实在太惊人了。
主持人: 在很多人眼里,你已经是芯片架构师中的传奇。哪一个设计是你最自豪的?可以是因为它难,因为它的影响,或者因为其中那一组精彩的想法。
凯勒: 我觉得这个说法很怪。我有两个小孩,我保证他们听到这个问题会笑翻。
凯勒: 我真正感兴趣的是造计算机,而且我和非常非常聪明的人共事过,我自己没那么聪明得离谱。我着迷的是这些东西怎么组合到一起,既是作为一件事本身,也是作为一项人去完成的事业。
主持人: 人和计算机怎么组合到一起。
凯勒: 对,人怎么思考,怎么造出一台计算机。我常发现,最好的计算机架构师往往对人不太感兴趣,而最好的带人的管理者往往不擅长设计计算机。所以整个「人的堆栈」本身就很迷人。
主持人: 从管理者到一线工程师。
凯勒: 造了很多年计算机之后我意识到,你从晶体管、逻辑门、功能单元、计算单元这样一层层往上搭,你完全可以用同样的方式去看人。
主持人: 人就是功能单元。
凯勒: 是的。于是组织设计就变成了一个计算机架构问题。这就太酷了,因为人和人各不相同,就像各个计算单元各不相同一样,他们喜欢做的事情也不同。所以我在重新框定自己对组织的理解这件事上得到了很多乐趣。就像我们刚才说执行路径,很多条不同的路径最终能到达同一个好结果。
主持人: 从单个人这样的功能单元到整个组织,你在人的抽象层上学到了什么?要做出真正特别的东西,需要什么?
凯勒: 大多数人想得不够简单。你知道菜谱和理解之间的区别吗?这个大概有一套哲学上的说法。想象你要做一个面包,菜谱告诉你:取面粉,加水,加酵母,搅拌,醒发,放进模具,送进烤箱。这是菜谱。而理解面包,你要懂生物学、供应链、谷物研磨、酵母的物理过程、热力学。理解可以有很多层。
凯勒: 人们在设计和构建东西的时候,往往只是在执行一摞菜谱。问题在于,菜谱的适用范围都是有限的。你手上有一本极好的面包食谱,它一个字也不会告诉你煎蛋卷该怎么做。可如果你对烹饪有深入的理解,那么面包、蛋卷、三明治,你看待一切的方式都不一样。大多数人在成为某个领域的专家时,希望达到的是更深的理解,而不是攒下一大堆可执行的菜谱。
凯勒: 有意思的是,从一群人的角度看,执行菜谱效率高得惊人,前提是那正好是你想做的事。如果不是,你就彻底卡死。这个区别至关重要。每个人身上「深入理解」和「照方抓药」的配比不同,有些人特别擅长辨认出「这件事现在必须往深里理解」。
主持人: 完全明白。那么在开发的每一个阶段,团队里都需要这种深入理解吗?
凯勒: 这又回到艺术与科学那个问题了。如果你事事都要拆开来求甚解,你什么都做不完;可如果在该拆开的时候不拆,你就会做错事。而且在每一个岔路口,人是非常古怪的存在,你跟他说的每一句话都可能引出一百万种输出,然后这些输出还会以滑稽的方式互相作用。什么时候该说,说什么,什么时候该介入,什么时候不该,这非常复杂。
主持人: 本质上是计算上不可解的。
凯勒: 是个难以处理的问题。
主持人: 人确实是一团乱麻。不过你说的深入理解,是不是也包括那些根本性的问题,比如「什么是计算机」,或者「我们为什么要造这个东西」这类关于目的的追问?还是更偏向往物理极限那个方向深挖?
凯勒: 就造计算机而言,是往简单里想,再简单一点。常见的做法是:你造了一台计算机,然后有人说想再快百分之十,你就说好,我把这个缓冲区做大一点,也许再加一个加法单元,或者把这个三发射做成四发射。你会看到,每一块都在一点点变得更复杂。到某个时刻你撞墙了,再加一个特性、再加一个缓冲,速度也不动了。于是人们说,这是根本性的极限。可另一个人来看一眼会说,其实是你切分问题的方式、是各个特性之间相互作用的方式限制了你,这需要重新想、重新写。于是你重构、重写,而人们常常发现,重写出来的东西不但更快,复杂度还只有原来的一半。
主持人: 在你的职业生涯里,你遇到过多少次需要把整个东西推翻重来?
凯勒: 我在这件事上站在一个极端:每三到五年一次。
主持人: 你是哪个极端,更频繁还是更少?
凯勒: 更频繁地重写。如果你真想在计算机架构上取得大的进展,每五年就该从头来一次。
主持人: 那 x86-64 这样的标准怎么办?你多久会重来一次?
凯勒: 那份规范我是合作者,那是九八年的事,二十年前了。所以它还在。指令集本身后来扩展过好几次。但指令集其实没那么有意思,有意思的是它底下的实现。在 x86 架构上,英特尔设计过好几套,AMD 也设计过好几套,彼此差别很大。我不太想细说频率,但业界的倾向是大约十年重写一次,而我认为真正该做的是五年一次。
主持人: 所以你是个异类,你要更频繁地重写。
主持人: 这不吓人吗?
凯勒: 当然吓人。
主持人: 对谁吓人?
凯勒: 对所有相关的人。因为正如你说的,重复既有的菜谱最省事,公司要赚钱。
凯勒: 不,更根本的是,个体工程师也想成功。所以他们想的是渐进改良,把缓冲区从三加到四。这就要说到收益递减曲线了。我记得史蒂夫·乔布斯讲过这个:你有一个项目,从这里起步,往上走,然后开始收益递减;要上到下一个层级,你必须做一个新的,而新的起点会低于旧的那条曲线的最优点,但它最终会走得更高。
凯勒: 于是你面对两种恐惧:短期的灾难和长期的灾难,而且你两边都会犯错。以季度为单位看业绩的人,对「什么都要改」这件事怕得要死。而那些真正在经营一门生意、或者在为长期目标造计算机的人知道,短期的局限恰恰堵死了长期的成功。你去看那些长期成绩真正出色的公司领导者,每当他们意识到必须重做一遍,他们就重做了。
凯勒: 所以要么有人站出来说话,要么你并行推进多个项目,一边优化旧的,一边造新的。但市场那边的人总是要你保证:新计算机在每一项上都更快。而计算机架构师会说,新计算机在平均意义上更快,但性能结果是一个分布,一定会有一些离群点更慢。这非常难办,因为总有一个客户恰好只在乎那一项。
主持人: 说到长期。五十多年来,摩尔定律对我和无数人来说都是一盏灯,它指向未来那些出色的工程师能造出的了不起的东西。
凯勒: 抱歉,我又在想我的孩子们听到这话会怎么笑。
主持人: 在你眼里,摩尔定律到底是什么?请给不了解的人下个定义。
凯勒: 戈登·摩尔最初那句简单的话是:晶体管数量每两年翻一番,大致如此。而我自己的操作性模型是:计算机性能每两到三年提升一倍。这个数字随时间上下摆动过不少,我们交付性能的方式也变过,但底层的想法就是晶体管两年翻倍。今天的节奏是所谓的缩小系数,大约每两年零点六,不是零点五。
主持人: 这里说的还是严格意义上的晶体管数量?
凯勒: 缩小系数说的是把晶体管做得更小。在芯片面积不变的前提下,如果你把晶体管尺寸缩到零点六,你就能多放一除以零点六倍的晶体管。
主持人: 那更宽泛地说呢?你觉得摩尔定律更合适的定义应该是什么?
凯勒: 首先,我关注摩尔定律已经三十年了。
主持人: 在什么意义上?
凯勒: 我造计算机造了四十年,也就是一路看着它走过来。而在我意识到摩尔定律存在的同时,我也被告知它将在十到十五年后终结。一开始我信了,可十年过去,人家还是说它十到十五年后终结。有一阵子说五年,然后又回到十年。到某个时候我决定,这个特定的世界末日预言,我这辈子不再操心了,这挺舒服的。后来我加入英特尔,所有人都说摩尔定律已死。我想这可真让人难过,因为这毕竟是摩尔定律的公司。它没死,而它一直都「即将」死。人类喜欢这类末日式的断言,比如粮食会吃光、空气会用尽之类。
主持人: 但它活了这么久,仍然令人惊叹。当然现在有很多人相信摩尔定律已死。
凯勒: 那他们可以去加入过去五十年里说同样话的那批人,这个传统很悠久。
主持人: 那你为什么认为它没死?
凯勒: 首先,人们以为摩尔定律只是一件事,就是晶体管变小。可实际上,掀开被子看,里面是成千上万项创新,而几乎每一项创新都有自己的收益递减曲线。你要是把它画出来,看到的是一串收益递减曲线首尾相接的级联,我不知道该管这叫什么,但叠加出来的结果是一条指数曲线,至少到目前为止是。而且我们不断发明新东西。所以如果你是某一条递减曲线上的专家,你看到它趋于平缓,你多半会告诉别人:这条路走到头了。与此同时,另外一大批人正在做完全不同的事情。这很正常。
凯勒: 其次是那个观察:一个开关器件到底能小到什么程度?一个现代晶体管大概是一千乘一千乘一千个原子。量子效应大约在二到十个原子的尺度上出现。所以你可以想象把晶体管做到十乘十乘十,那就是小一百万倍。而量子计算那批人还在琢磨怎么直接利用量子效应。
主持人: 一千乘一千乘一千个原子,这个说法真是干净利落。
凯勒: 现代晶体管的鳍(fin)大概一百二十个原子宽,但我们还能把它做得更薄,外面还包着栅极,还有间隔层,还有一整套几何结构。一个称职的晶体管设计师能把每个方向上的原子数都数出来。现在已经有技术可以按单原子层沉积,你想的话甚至可以一个一个地摆原子。问题只在于制造:如果摆一个原子要十分钟,而你需要把十的二十三次方个原子拼成一台计算机,那要花的时间就太长了。所以方法既包括把东西做小,也包括想出既便宜又可控的制造手段。
凯勒: 所以创新的面铺得非常宽:设备、光学、化学、物理、材料科学、冶金。四种材料放在一起会怎样相互作用,稳不稳定,随温度稳不稳定,能不能可重复地做出来。里面牵涉的技术真的数以千计。
主持人: 单就缩小尺寸这件事,你不认为我们已经接近物理的根本极限?
凯勒: 我做过一次关于摩尔定律的报告,我请人给我一张通往一百倍的路线图。两周后他们说,我们只做到了五十倍。
主持人: 一百倍是什么意思?
凯勒: 一百倍的缩小。他们说只到五十,我说那你们再回去做两周。
凯勒: 关于摩尔定律,事情是这样的:我相信接下来十年到二十年的尺寸缩小是会发生的。而作为计算机设计者,你有两种立场。你要么相信它会继续缩小,那你在做架构时就会考虑怎么用上更多的晶体管,或者反过来说,怎么不被随之而来的复杂度淹没。你必须有一个策略。
主持人: 所以你是敞开着的,随时准备迎接一整支新的晶体管大军来干活。
凯勒: 我是在期待。我期待每两三年就多出一批晶体管,而且数量大到足以改变你思考设计和架构的方式。想象你用砖头盖房子,而砖头每两年小一半。如果你还是按老办法盖,每人每天砌那么多砖,盖一栋楼的时间就会指数级上升。但如果你说我知道这事要来,那我就去设计能更快搬砖、更好用砖的设备,因为更小的砖也许带来更高的强度、更薄的墙、更省的材料。所以一旦你手上有一张关于晶体管会怎样变多的路线图,你就会围绕它去设计,既利用它,也应对它。人们没意识到的是,假如我不相信摩尔定律,而摩尔定律的晶体管照样来了,我的设计团队会被淹死。
主持人: 面对这股晶体管的洪水,最难的部分是什么?回顾你的职业生涯,当晶体管变多时,架构设计中真正发生变化的是什么?
凯勒: 有两个常量。第一,人不会变得更聪明。
主持人: 顺便一提,有研究说因为营养之类的原因,我们确实变聪明了。
凯勒: 你说的是弗林效应。没人真正理解它,也没人知道它是不是还在继续,或者是不是真的。但我基本上相信,人在总体上并没有变聪明多少,证据不支持这一点。
凯勒: 第二,团队规模不可能无限扩大。人类在十人的团队里配合得很好,到一百人还能彼此认识,再往上你就必须引入组织边界。这些是相当硬的约束。所以你只能分而治之。设计越大,你越要把它切成块。抽象层的威力在这里极高。我们过去用晶体管造计算机,现在有一个团队把晶体管变成逻辑单元,另一个团队把逻辑单元变成功能单元,再一个团队把功能单元变成计算机。所以中间要建起一层层抽象,而你必须思考什么时候换挡。
凯勒: 另外,我们用更快的计算机来造更快的计算机。有些算法在新机器上快一倍,可很多算法是 N 平方的,所以晶体管多一倍的计算机,跑起来可能要花四倍时间。这意味着你必须重构软件。简单地用更快的计算机去造更大的计算机,是行不通的。这些事你都得想。
主持人: 就计算性能而言,缩小尺寸是你最看重的那条路吗?还是说你也关注别的方向,比如强推给定的并行、大规模并行、把很多 CPU 堆叠起来这类做法?
凯勒: 我换个方式来说。老式的、慢的计算机,你写 a 等于 b 加 c 乘 d,很简单。后来我们造出带向量单元的更快的计算机,你可以做成组的方程、做矩阵。再到现代的人工智能计算,比如卷积神经网络,你是拿一个大数据集去卷另一个大数据集。所以这里有一个数学的层级:从简单方程,到线性方程,到矩阵方程,再到更深一层的计算形态。而现在数据集大到人们开始把数据当作一个拓扑问题来看:数据组织成某种巨大的形状,而计算要做的,是从这个巨大的形状里取出数据并施加运算。
凯勒: 所以计算机让人们把算法推得远得多。你提到的萨顿那篇文章里说,人工智能一开始是规则集,那是一种非常简单的计算情形;后来做国际象棋,靠的是深度搜索,一个巨大的走法与结果数据库加上深搜,但那仍然只是搜索。而现在我们拿海量图像去训练一组权重,再拿这组权重去做卷积,这是完全不同的现象,我们现在管它叫人工智能。他们正在做下一代,你会看到,他们是在沿着这张数学的图往上走,而算力和数据集都支持这种上行。
主持人: 我倒想说,这一切仍然是搜索。就像你说的拓扑问题,本质上还是在数据集里搜寻有价值的数据,而神经网络的优化本身也是一种搜索。
凯勒: 我不确定。你去看识别一只猫的那些中间层,那不是搜索,那是无穷无尽的投影。就像这只手机在这里投下一个影子,你可以把那个影子再投到别处,再投到别处。你去看那些层,会发现这一层描述的是尖耳朵、眼睛的圆度、毛茸茸的质感。把这些属性抽取出来的计算过程,不是搜索。推理阶段也许可以算搜索,训练不是。
主持人: 可深度网络里,人们看着那些层,根本不知道它表示的是什么,而一旦把这些层拿掉,网络就不工作了。
凯勒: 所以我不认为那是搜索。至于它究竟是什么,你得去问数学家。
主持人: 你不同意,不过这也许只是措辞之争。
凯勒: 我觉得不是。
主持人: 我觉得绝对不只是措辞。在我看来,优化就是搜索,我们是在优化神经网络检测猫耳朵的能力。而国际象棋和那个有十万维的空间之间的差别,确实完全不是一回事,棋盘数据库和这种优化根本不是同一种东西。从这个意义上说,我明白你为什么那么讲。
凯勒: 有意思的是,这正好又是「给定的搜索空间」和「找到的搜索空间」的区别。
主持人: 说得漂亮。
主持人: 那么就基本的数学运算,以及能把这些运算固化到硬件里的架构而言,你觉得今天的 CPU 是否仍然是执行这些运算的核心?
凯勒: 是的。那些运算仍然是加、减、载入、存储、比较、分支,这件事很了不起。计算机的基本构件是晶体管,晶体管之下是原子,于是你有原子、晶体管、逻辑门、功能单元、计算机。而数学的基本构件在某个层面上就是加、减、乘,可数学能描述的空间在我看来基本上是无限的。运行这些算法的计算机,做的却还是同样那几件事。
凯勒: 当然,某个算法可能会说我需要稀疏数据,或者我要三十二位数据,或者我需要一个卷积操作,它天然地取八位数据相乘再按特定方式求和。所以 TensorFlow 里的数据类型隐含了一套优化目标,但当你真的往计算机里看,看到的还是乘加。这一点没怎么变。
凯勒: 量子研究者认为他们会彻底改变这一点。也有人在想模拟计算,因为你去看大脑,它似乎更偏模拟,也许那样效率更高。但我们手上是一百万倍的算力提升,而算力的强度和它能触及的数学抽象层级之间的关系,我说不清楚。就像你在人工智能里看到的:从规则集,到简单搜索,到复杂搜索,再到「找到的搜索」,每一步都是几个数量级的计算量。等我们再拿到两个数量级,会发生什么?我的朋友科杜里说过,每一个数量级的算力变化,都会从根本上改变计算在做的事情。
主持人: 就是那句话,量的差别就是质的差别。
凯勒: 蚂蚁和蚁丘的区别,神经元和大脑的区别。总有那么一个说不清道不明的地方,量变成了质。而这件事在数学里我们已经见过好几次了,我猜它还会一直发生。
主持人: 所以你的感觉是,只要埋头把晶体管做小就行?
凯勒: 不只是埋头。我们非常清楚上面跑的软件栈和计算负载是什么样,我们一直在琢磨:如果你有一 PB 内存,而访问方式是稀疏的,还要支持人工智能程序员想要的那类运算,你该怎么办?所以这中间是有对话、有互动的。但你真正走进芯片内部,看到的还是加法器、减法器、乘法器。
主持人: 如果把视角拉开,按萨顿的说法,过去几十年人工智能研究的大部分进展,来自于利用算力增长和简单算法,等着算力上来。
凯勒: 软件的人有个说法叫过早优化的陷阱。如果你写了一个庞大的软件栈,你最先写的那部分恰好是性能瓶颈的概率很低。但当整个东西跑起来之后,你能不能通过优化正确的地方让它快一倍?当然能。可就在你优化的这段时间里,你本来是不是可以另写一套更好的软件栈?也许可以。这就形成了一种创造性的张力。
凯勒: 而在你写软件的整个过程中,底下的硬件一直在变快,这就回到摩尔定律了。如果摩尔定律会继续,那你的人工智能研究就应该预期这一点会兑现,于是你会做出一套稍有不同的选择。如果你认定我们已经撞墙、什么都不会发生、从此只能靠重写算法,那么按过去三十年摩尔定律「已死」的记录来看,这是一个失败的策略。
主持人: 我知道你已经回答过,但我还是要把这个笨问题再问一遍:你为什么认为摩尔定律不会死?未来五到十年,最让你兴奋、最有希望的可能性是什么?是晶体管继续缩小,还是有另一条 S 曲线接上来?
凯勒: 就是继续缩小晶体管,而这背后是成千上万项创新,所以答案是「全都是」。有一大堆 S 曲线各自走完自己的路,然后被重新发明。半导体制造商和技术人员已经公布了所谓的纳米线:他们把原来的鳍加上环绕栅极,变成一根细线,这样控制更好,尺寸更小。从这里出发,怎么继续缩小有一些很明显的步骤。围绕金属互连堆栈的冶金也有非常明显的缩小空间。这里面有一整套组合拳。
主持人: 所以你觉得单靠缩小就能拿到很多?
凯勒: 是的,大概一百倍。
主持人: 一百倍,太惊人了。
凯勒: 而且只需要十到十五年。
主持人: 你比我懂,但对我来说,这一百倍会给计算的性质带来什么,完全无法预测。
凯勒: 你知道贝尔定律吗?很长一段时间里,从大型机、小型机、工作站、个人电脑到移动设备,摩尔定律驱动着计算机变快变小。而科杜里说,每一个十倍都会催生一种新的计算:标量、向量、矩阵、拓扑。你去看产业的走向:先是大型机、小型机、个人电脑,然后互联网起飞,然后是移动设备,现在我们在建延迟一毫秒的 5G 无线网络,人们已经在设想一个智能世界,万物都认识你、识别你。这种转变的后果是无法预测的。
主持人: 作为这种未来的关键设计者之一,你是什么感觉?
凯勒: 我们说的又不是那些做愤怒的小鸟应用的人。
主持人: 愤怒的小鸟,谁知道呢,说不定那才是宇宙的意义所在。
凯勒: 我可要在这件事上表个态。
主持人: 还有手机分散注意力这件事。
凯勒: 那我也表个态,不过我不觉得这有多要紧。
主持人: 你说的是哪个部分?智能手机的副作用,还是注意力被分散?
凯勒: 谁知道这一切会通向哪儿,它变得太快了。我父母当年冲我姐姐吼,因为她躲在壁橱里,抱着一部带拨号盘的有线电话跟朋友聊一整天。现在我太太冲我的孩子们吼,因为他们跟朋友发一整天短信。在我看来这是同一件事,永远是同一个回声。
主持人: 但你确实是这个未来硬件的关键架构师之一。这让你有什么感受?你会觉得有责任吗?会觉得兴奋吗?
凯勒: 我们身处一个社会情境里。这颗星球上有几十亿人,光是做技术的就有几百万。我觉得自己很幸运,能做我在做的事,还有人付我钱,而且这件事本身很有意思。但同时有那么多事情在并行发生,各种作用力的方向根本无法预测。如果不是我在这儿,也会有别人在做。这些不同方向的力量一直都在发生。我相信总有哲学家,或者研究哲学的哲学家,在琢磨我们究竟怎样改造了自己的世界。
主持人: 你不能否认,这些工具正在改变我们的世界。
凯勒: 没错。
主持人: 你觉得是在变好吗?
凯勒: 我最近读到一个说法:大学里 GRE 成绩最高的两个专业是物理和哲学,而两者其实都在试图回答同一个问题,为什么会有东西存在。哲学家站在偏神学的那一侧,物理学家显然站在物质的那一侧。而宇宙里有一千亿个星系,每个星系一千亿颗恒星,看上去至少是相当重复的。我们正朝着一百亿人口走去。这一切究竟是为了什么,很难说。你问的是这个吗?
主持人: 是的。我倾向于认为复杂度在显著上升,我也好奇计算和这件事的关系。我们的物理世界天然地生成数学。
凯勒: 这是显而易见的。我们有 XYZ 坐标,你把一个球做大,表面积按半径平方增长。世界本身就在生成数学。而数学家和物理学家多年来一直聊得很开心。相比之下,计算在数学意义上一直相当平庸,人家在可能性的其他疆域里纵横驰骋,我们还在做二进制代数。
凯勒: 但最近,计算终于能做那种复杂到没人明白答案是怎么出来的数学运算了。
主持人: 机器学习。
凯勒: 是的。过去的路子是:你拿到一个数据集,猜一个函数,如果这个函数对新数据有预测力,它就算物理。而现在,你可以拿一个庞大的数据集,对它是什么毫无直觉,用机器学习去找出一个模式,而这个模式没有对应的函数。它给出的结果,我不知道是不是完全可以用数学描述出来。所以相对于 a 等于 b 加 c,计算确实做成了某件有意思的事。
主持人: 从基本的加法运算,到神经网络这一步,让人想起地球生命起源时发生的事。你觉得我们是在创造演化的下一步吗?
凯勒: 我不知道。宇宙里已经有那么多东西了,很难讲。
主持人: 但人类在做的,不就是在既有的抽象层之上,再造出新的抽象层和新的可能性吗?
凯勒: 看起来是。可这是不是意味着人类不再需要狗了呢?不是。有那么多东西同时既有趣又有用。
主持人: 但你确实看到了一层比一层更高的抽象,而且是在人造的机器里建起来的。当你看人类的时候,你觉得人类是这条漫长历史链条的顶点,还是我们只是中间的某一环?我们是 CPU 里的基本运算,还是 C++ 程序,还是 Python 脚本,还是神经网络?
凯勒: 有人算过大脑一秒钟做多少次运算,我从不同的推算路径上看到过十的十八次方这个数字好几次。那你能不能造一台每秒做十的二十次方次运算的计算机?当然能。我们会不会造出来?我想会。那大脑的计算方式里有没有什么神奇的东西?我不知道。
凯勒: 我个人的体验很有意思:你以为你知道自己怎么思考,然后各种念头冒出来,你根本搞不清它们是怎么来的。如果你打坐,你会发现自己能觉察到的东西本身就很有意思。所以我不知道大脑是不是神奇的。物理证据说不是,很多人的个人体验说是。要是大脑真的神奇,而我们又能靠更多算力造出大脑来,那才叫好笑,那我就不知道该说什么了。
主持人: 你觉得魔法可能只是一种涌现现象吗?
凯勒: 除了这个还能是什么?我不知道。
主持人: 在你看来,意识是什么?意识、爱,这些深刻属于人的东西,看上去是从我们的大脑里涌现出来的。这些东西我们最终能不能编码进越来越快的芯片里?
凯勒: 我们这一小时的对话是不够的,而且没人真的知道答案。
主持人: 能不能用几句话概括一下?
凯勒: 很多人观察到,生物体是在很多个层级上同时运行的。如果你只有两个神经元,有人说那就是一个感觉神经元加一个运动神经元,于是你能朝一样东西靠近,也能远离它,这关系到你身体的完整和安全。往动物界看,你会看到更复杂一些的大脑,到某个阶段出现了规划系统,然后出现了情绪系统,对安全感到高兴,对威胁感到不安。而人类的大脑里有大量结构:规划、运动、思考、感受、驱力、情绪,我们似乎还有好几层思维系统,另外还有一个做梦的系统,没人搞得懂它是怎么回事,我觉得这实在太滑稽了。你可以认为这些系统相当独立,你甚至能观察到自己的某些部分正在观察另一些部分。至于哪一部分是神奇的,哪一部分不是计算,我不知道。
主持人: 那有没有可能一切都是计算?
凯勒: 很可能。
主持人: 计算有极限吗?
凯勒: 我认为没有。
主持人: 你觉得宇宙是一台计算机吗?
凯勒: 看上去是。但它是一台很奇怪的计算机。因为如果它真是计算机,你去算一下描述量子效应需要多少计算量,那个数高得离谱。假如它是计算机,你会用一种更容易计算的东西去搭它。所以这是一台很滑稽的机器。
凯勒: 不过模拟论那批人指出,这里的规则确实有点意思:你看得非常近的时候,一切是不确定的;光速规定了你只能看那么远;除了纠缠这个怪事之外,事情不能同时发生,而纠缠看上去又是同时的。规则都怪怪的。还有人说,物理学就像五十个方程、五十个变量,用来定义那五十个变量。物理学本身已经乱了几千年了。你走到任何一件事的角落里,它要么不可计算,要么无法定义,要么不确定。这几乎像是这个模拟的设计者在阻止我们把它彻底看懂。
主持人: 但同时,那些需要计算的东西所需的计算量之大,让「宇宙是计算机」这个想法显得荒谬,因为其中最小的一点点都要耗尽宇宙全部的算力才能算出来。
凯勒: 那可真是台奇怪的计算机。你说这个模拟跑在一台计算机上,可这台计算机按定义得有无限的算力。
主持人: 不是无限。
凯勒: 你是说如果宇宙是无限的?
主持人: 我是说,我们宇宙里的一小块看起来就要无限的计算量。
凯勒: 不至于无限,但非常多,是一个相当大的数。算清楚这么一小点,要动用一光年见方空间里的全部质量。那已经足够接近无限了。所以如果它是计算机,那真是台了不得的计算机。这就是模拟论这个说法奇怪的地方:你凑近看,它就有点站不住,可宇宙的规则又暗示着有什么事情正在发生,而且看上去有点随意。
主持人: 你说的是整个宇宙,是物理定律?
凯勒: 是啊,它怎么就长成了现在这个样子?很多人都在谈这个。就像我说的,人类中最聪明的两群人在从不同侧面研究同一个问题,而他们都彻底失败了,这也挺酷的。
主持人: 他们最终可能会成功。
凯勒: 都两千年了,这个趋势不太乐观。
主持人: 相对宇宙的历史,两千年什么都不是,我们还有时间。
凯勒: 大家在每个阶段都是这么说的。
主持人: 但按你刚才描述的,摩尔定律没有死,技术的指数增长会继续,未来看起来相当了不起。
凯勒: 至少会很有意思,这一点是肯定的。
主持人: 你怎么看雷·库兹韦尔的那个判断,技术的指数级改进会无限延续下去?你会不会把摩尔定律理解得更宽泛一些,认为各类技术会把一条条 S 曲线叠起来,整体呈指数?
凯勒: 我们会看到各种各样的东西。一百万倍意味着什么?那已经是个惊人的数字,而且那还只是本地一小片硅片上的事。现在想象一下,你决定让一千吨硅在一台计算机里协同工作,密度还是现在的一百万倍,那你说的就是比我们已经快得难以置信的计算机再多十的二十次方倍的算力。没人知道那意味着什么。科幻作家管那个叫「计算子」,就是一个本地文明把附近的恒星整个变成一台计算机。
主持人: 所以哪怕只是把晶体管缩小,也只是这场涟漪的一个维度。
凯勒: 人们往往把计算机当成成本问题。可计算机是用硅和少量金属做的,这些东西都不值钱。沙子多的是,你差不多可以把一片海滩加一点海水变成计算机。所有的成本都在设备上,而设备的趋势是,一旦你搞清楚怎么造出那台设备,成本就往零走。埃隆说过,先想清楚你要把原子排成什么构型,再想怎么把它们放到那儿去。
凯勒: 他真正深刻的洞见是:人们被「怎么做」束缚住了。我有这么个东西,我知道它怎么工作,那我就在它上面小修小补弄出点新东西来。而不是先问,我究竟想要什么,再去想怎么造出来。这是完全不同的思维方式,而且几乎没有人具备。
主持人: 说到这个。你是特斯拉自动驾驶硬件早期的关键人物之一。埃隆·马斯克相信,只看车辆自动驾驶这个问题,它同样可以按这种指数方式改进,因为在「怎么做」这个层面上没有什么阻碍。你怎么看这个领域,以及你自己和马斯克、特斯拉在其中的那段经历?
凯勒: 你需要造的那台计算机是很直白的。你可以争论它要不要快两倍、五倍还是十倍,但短期看那只是时间和价格问题,不是什么大事。开车这件事本身并不需要特别聪明,所以它不是个超级难的问题。安全方面最大的问题是注意力,而计算机在这方面非常擅长,问题不在技巧上。
主持人: 我想反驳一点。你说的都对,但我们人类往往低估了自己视觉系统有多不可思议。你能凭 20/50 的视力开车。
凯勒: 你可以训练一个神经网络,从视频里提取任何物体的距离和任何表面的形状。
主持人: 但这真的不简单。
凯勒: 这是个数据问题。
主持人: 它不简单,因为这不只是检测物体,而是理解整个场景,而且要以不出错的方式理解。人类视觉系统连同整个大脑最漂亮的地方在于,我们能把空缺补上。这不只是准确检测车辆,还包括推断被遮挡的车辆,理解意图。我认为这是个更大的问题。
凯勒: 你觉得靠数据、靠算力提升、靠采集量的增加还不够?
凯勒: 是这样:你开车的时候有人加塞,你的大脑会给出一套理论解释他为什么这么干,说他是个坏人,说他在分心,说他蠢,你可以听见自己心里的旁白。如果你认为这套旁白对于成功驾驶是必要的,那现在的自动驾驶系统就做不到。但如果说,车是有轨迹的弹道物体,速度和方向的变化服从某种概率分布,道路是固定给定的,顺便说一句,道路不会动态变化,那么你可以把世界彻底地测绘一遍,把每个对象彻底地定位一遍,把各种轨迹彻底地算一遍。
主持人: 可你说的每一个「彻底」,难度都完全不同。
凯勒: 所以你可以说,在某些人类不擅长的地方,自动系统迟早会强得多。它们在注意力上更好,它们会永远记得这条路上有个坑,而人类会忘;它们会记得这一段路的车道线画得很古怪,那是计算机算过一次就记住的事,尤其是它们还能收到更新。
凯勒: 有人说过,机器人这类东西是要把给定条件最大化。所以让机器人抓起这个瓶盖的办法之一,就是在盖子顶上点一个红点,因为不然你还得先搞清楚它是什么。把给定条件最大化,这才是关键。人类去一个新地方开车,你会记住路,因为你全程都在处理信息;可当你第五十次开车去上班,到了公司你根本想不起来自己是怎么到的,你在自动驾驶状态。而自动驾驶的汽车永远处在这个状态,它们对为什么被加塞、为什么堵车没有任何理论,所以它们永远不会停止注意。
主持人: 我倾向于认为,你确实需要关于他人的理论和心理模型,尤其是对行人和骑车人,对其他车辆也一样。你说的这些其实都是驾驶的核心。开车比人们以为的复杂得多。
凯勒: 我不这么看。
主持人: 举个例子,稍微反驳一下,比如强行汇入车流。你不能光等着有空隙,你得有一定的进攻性。
凯勒: 你会惊讶于这件事的计算有多简单。
主持人: 在那个具体问题上也许是。但我还是要说,我会非常惊讶。
凯勒: 我倒觉得你可能会惊讶于它有多复杂。我常跟人说,进展在短期内让人失望,在长期里让人惊讶。
主持人: 完全有可能。
凯勒: 我猜十年之后,这一切会被当成理所当然。到时候多半是个五十美元的方案,没人在意。就像 GPS,我们在太空放了卫星告诉你自己在哪儿,这曾经是天大的事,现在一切东西上都有 GPS。
主持人: 确实如此。但我还是认为,牵涉到人类行为的系统,比我们愿意承认的更复杂。我们能用技术做出不可思议的东西,只要不牵涉人。
凯勒: 可人比人们通常以为的更简单。我猜我们大部分时候是从一大堆模式里抽取,然后不断重复。
主持人: 可我不能信你,因为你自己就是人。
凯勒: 这话听着就很像一个人会说的。
主持人: 不过我希望的是,无论谁对谁错,有很多事情人类做不好而机器确实擅长,比如你说的注意力。它们在这些方面好太多,以至于整体的安全图景会变得非常明显,自动驾驶汽车会更安全,哪怕在别的方面它们还不够好。
凯勒: 我非常相信安全。现有的那些安全系统,比如不会撞上人的自适应巡航、车道保持,已经有那么多功能了。你去看事故的帕累托分布,砍掉其中百分之八十是完全做得到的。
主持人: 在自动驾驶团队工作的时候,媒体和公众似乎对安全有一种非常强烈的审视,标准压得很高。作为一个做硬件、想造出安全车辆的人,你怎么看这种压力?它公平吗?还是新技术本来就该被这样对待?
凯勒: 我觉得这是合理的。我跟美国和欧洲的监管者都聊过,我原本担心的是,法规会把技术方案写死。比如现代刹车系统默认是液压的,你按字面去读法规,刹车几乎必须是液压的。但监管者说,他们关心的是使用场景:正面碰撞、偏置碰撞、不要撞行人、不要撞人、不要冲出路面、不要闯红灯。他们非常关注场景,而且他们手上有全部的数据,知道哪些场景造成的伤亡最多。所以大部分时候,那些对话都是在讨论下一步该做什么才是对的。
凯勒: 另外,埃隆除了安全之外,也很看重自动驾驶能把人的时间和注意力解放出来,我觉得这也很有意思。但建立自动系统时,目标就是要比人更安全,把标准定在比人更安全,并且对每一起事故都严加审视,这在道理上是站得住的,所以我认为这是件好事。
主持人: 和你在英特尔、AMD、苹果做的事情相比,自动驾驶的芯片设计和硬件设计有什么不同?在汽车领域造这种专用计算系统,有哪些有意思或者困难的地方?
凯勒: 造车载计算机主要有两个难点。一是软件,我们的机器学习团队在开发的算法变得很快,所以你在造加速器的时候,心里一直有种担忧或者说直觉:算法会变化得足够大,以至于你造的加速器是错的。
凯勒: 二是一个更普遍的规律:如果你造一台真正优秀的通用计算机,把它的性能记作一,那么在同样的硅面积上,GPU 大概能给你五倍,因为并行性不用你去发现,而是别人给定的;再往上,专用加速器还能在 GPU 之上再拿两到五倍,因为你可以说,我知道这里的数学永远是八位整数和三十二位累加器,运算只是全部数学可能性的一个子集。所以人工智能加速器相对 GPU 有性能优势,是因为在那个很窄的数学空间里,你把算法钉死了。当然你还是要尽量保持可编程,可人工智能这个领域变化太快。于是这里就有一种创造性的张力:我想要专用化带来的加速,又不能专用到那个地步,以至于新算法一出来,你会后悔当初没用 GPU。
凯勒: 要为汽车这类应用造一台好计算机,还要处理各种传感器输入、安全处理器等等一堆东西。埃隆的目标之一是把成本压到足够低,让每一辆车都装上自动驾驶计算机。你去看最近的一些创业公司,他们后备箱里放着一台服务器,因为他们想的是「我要造一台取代司机的自动驾驶计算机」,所以他们的成本预算是一两万美元。而埃隆的约束是:不管用户买不买自动驾驶功能,每一辆车上都要装一台。所以他心里的成本约束是极其严的。要打中那个成本,你就必须重新思考整个系统设计。这很复杂,但也很好玩。
凯勒: 这有点像匠人的活儿,像做小提琴的师傅。你可以说斯特拉迪瓦里是了不起的东西,演奏家也了不起,但那个做琴的人,是他挑了木头,把它打磨、切割、上胶,还要等对的天气,好让上漆的时候不出岔子。这是匠人的活儿。你也许是个天才匠人,因为你掌握着最好的技法,还发现了新的技法,但大多数工程师做的就是匠人的活儿,而人是真的喜欢做这种事。
主持人: 聪明的人喜欢。
凯勒: 所有人都喜欢。我上大学的时候挖过沟,挖得还挺好。
主持人: 也挺有成就感。
凯勒: 挖沟当然也是匠人的活儿。有个说法叫「复杂掌握行为」。你在学一样东西的时候,因为在学,所以有乐趣;当你做的事情既机械又简单,就没什么满足感;但如果那些步骤本身是复杂的,而你做得很好,做起来就令人满足。而且如果你对它保持好奇,在做的过程中还会学到新东西,把自己的水平再往上抬一层。匠人的活儿是好事,工程本身复杂到你必须学会很多技能,而学完之后你做的很大一部分就是匠人的活儿,这很有意思。
主持人: 所以自动驾驶,造一台资源受限到能装进每一辆车的计算机,本质上归结为匠人的活儿。
凯勒: 这不是说不需要天才。里面有需要深思熟虑的决定、要解的问题、要做的取舍:你需要十个摄像头接口还是八个?你是为当前这款车造,还是为下一款造?安全那部分怎么处理?细节多得是,但很好玩。这跟「我在造一种全新的、有新数学、有新网络结构的计算机」不一样,那种事里发明的成分更多。可一旦架构选定,落到实处,你往里一看,还是加法器、乘法器、存储器,还是那些最基本的东西。
凯勒: 所以计算机永远是这么一套奇特的抽象层和想法的叠加,而落到实处就是晶体管和导线,非常朴素的东西。顺便说一句,这本身就是个有意思的现象。很多人觉得工厂的活儿就是机械装配,可我在装配线上待过,那些真正干这行的人非常喜欢它,这是一份很棒的工作,而且相当复杂。把汽车装起来是难的,车在动,零件在动,有时候零件是坏的,你得协调着把所有东西装到一起,而人做得很好。
凯勒: 我记得有一天我去上班,生产线因为某个原因停了,几个工人坐在那儿情绪很低落,因为他们重新安排了一堆流程,本来那天能创下当日产量的新纪录,个个都摩拳擦掌等着干,结果泡汤了。这些都是壮实的糙汉子,可他们做的事情很复杂,你做不来。当然待久了你也能做,但你得一步步熬上去。因为在移动的装配线上,把所谓的亮饰条在九十秒内固定到二十五个点位上,复杂得不可思议,而人类做得非常好。顺带说一句,我认为这比开车还难。
主持人: 我觉得开车会先做出来,你去工厂那件事我们再看。
凯勒: 对我们人类来说,开车是容易的。
主持人: 我说的是,造一台会开车的机器不容易。
凯勒: 好吧。开车对人来说容易,是因为我们已经进化了几十亿年来开车。
主持人: 好了好了,现在你也加入互联网大军来取笑我了。
凯勒: 我对你的人类学很感兴趣,这个我们得好好挖一挖,里面有些不太准确的地方。
主持人: 总体上说,关于热情、匠艺、张力、混乱,关于这一整摊子事,你从和埃隆·马斯克共事、从特斯拉那段经历里学到了什么?那是一个以混乱、创新和匠艺著称的地方。
凯勒: 我很喜欢他的思维方式。你以为自己已经理解了某样东西的第一性原理,然后你和埃隆聊过,才发现你连表皮都没划开。他有一个很深的信念:不管你在做什么,你所在的位置都只是一个局部最优。
凯勒: 我有个朋友发明了一种更好的电机,比我们当时用的好很多。有一天他过来说,他有点失望,因为这东西真的很棒,可我看上去没那么惊艳。我说,如果超级智能的外星人来了,他们会到处找你吗?会说「那个造电机的家伙在哪儿」吗?多半不会。但做既有创新性、又算得上匠艺的工作,本身是很令人满足的,这是好事,这很酷。
凯勒: 而埃隆擅长的是把一切拆开,去问最深的第一性原理是什么,去问事情究竟是怎么回事。那种不带假设、不被「怎么做」束缚地看问题的能力,非常野。我们造火箭,用的还是那些一样的东西,这太好玩了。而且他自己也真的投入其中。SpaceX 第一次成功回收火箭的时候,特斯拉这边在大会议室架了投影仪,大概五百人下来看。火箭落地那一刻,所有人都欢呼,有些人哭了,太酷了。
主持人: 但你们是怎么做到的?
凯勒: 非常难。有人说那地方混乱。你想想看,要从自己所有的假设里挣脱出来,怎么可能不痛苦得要命?而埃隆是很硬的。我猜回过头看,人们会说,我真高兴有过那段经历,去把那么多层假设一层层拆开。有时候特别有意思,有时候很痛苦。
主持人: 所以剥离假设这个过程,情感上和智识上都可能是痛苦的。
凯勒: 是的。想象一下,你思维过程中的百分之九十九是在维护你的自我认知,而其中百分之九十八是错的。
主持人: 你这数学没算对吧。
凯勒: 你想想,当你把那一点有用的东西找回来的时候是什么感觉。那一刻你敞开了,你有了做点不一样的事情的能力。我不知道数字对不对,可能是百分之九十九点九。
主持人: 就算只有百分之五十,想象一下也已经够难受了。
凯勒: 很久以来我就怀疑,人是可以变得更好的:你可以想得更好,可以想得更清楚,可以把事情拆开来看,而且这样的例子有很多。埃隆是一个,我父母也是。
主持人: 你也是,至少跟你聊天很有意思,我确实学到不少。
凯勒: 还有一件事。比如我读书,人们会说,哦你读书啊。可我读了五十五年,每周读几本书,也许是五十年,因为我大概三四岁才学会认字。事情是这样的:人写一本书,往往是把自己二十年里满怀热情做的事情,压缩成两百页,这挺有意思的。然后你上网就能查到谁写的书最好,这里有一整套筛选机制。你把书读了,大体上能读懂,然后就能拿去用。我曾经进过一家公司,我想我以前没怎么管过人,于是我读了二十本管理书,然后开始���人谈。跟公司里跑来跑去的那些副总裁比起来,我不过是比谁都多读了十九本管理书而已。
主持人: 这有那么难吗?
凯勒: 而且里面有一半的东西第一次用就管用,这甚至不是什么高深学问。
主持人: 但这件事的内核,就是质疑假设,就是从第一性原理出发去思考,去看清情境的真实面貌,并且把这份认识用起来。
凯勒: 是的。我的大脑里装着「可以质疑最初的假设」这个念头,但我可以连着好几天把它忘得一干二净。
主持人: 所以你得不断绕回来。
凯勒: 因为要把它保持在注意力中心很难。你同时在很多个层面上运作,「把这件事做完」是优先事项,「让自己开心」是优先事项,「随便瞎混一会儿」也是优先事项。人怎么过日子,本身就很复杂。然后你才想起来,哦对,我可以从第一性原理想问题。而且那件事很累人,做一阵子就得歇歇。
主持人: 那么从大局、从第一性原理出发,最后一个问题,虽然你其实已经答过了:你认为自动驾驶是可以在几年、一两年、三五年、十年这个尺度上解决的问题,而不是一个世纪?
凯勒: 当然。
主持人: 再多问一句,你的信心从哪儿来?是问题本身的基本盘,还是硬件和软件作为计算问题的基本盘?
凯勒: 理解弹道、规则、地形,这些看上去是可解的。你可以对照语音识别来看:很长一段时间里,人们做频域分析之类的东西,怎么弄都不管用;后来他们用深度学习去做,效果好极了。这中间经过了多轮迭代。而自动驾驶早就走过了「频域分析」那个阶段。用雷达,不要撞上东西,数据采集在上升,算力在上升,对算法的理解在上升,一大堆问题正是这样被解决掉的。
主持人: 数据这一侧确实很有力量。但我还是要和你、和埃隆唱个反调,我再说一次:一旦把人加进来,这就不再是弹道问题,而是更复杂的东西。当然我很可能被证明是错的。
凯勒: 汽车是重阻尼系统,转向变化很慢,转向系统跟计算机比慢得多,加速也很慢。
主持人: 在某个时间尺度上是这样,在弹道的时间尺度上是这样。但人的行为,我说不好。
凯勒: 人也很慢,而且我们的运作方式很怪,我们比现实慢半秒钟,这件事也没人真正理解,挺好玩的。
主持人: 是啊。所以我完全可能被打脸。而且随着计算、软件和硬件各方面同时进步,我想到处都会有惊喜。
主持人: 说到惊喜,很多人担心人工智能发展中的奇点,请原谅我问这样的问题。当人工智能呈指数改进,达到超越人类的通用智能水平,越过那个点就无法回头。你担心计算机变得超人般聪明所带来的生存威胁吗?
凯勒: 不太担心。我们本来就生活在一个高度分层的社会里。你去看整个动物界的能力、才能和兴趣分布,会发现聪明人有他们的生态位,普通人有他们的生态位,匠人有他们的生态位,动物也有它们的生态位。我猜,感兴趣的领域会差得非常远。某个东西比我们聪明十倍,然后要把我们一个个揪出来,就因为我们喜欢在星巴克喝咖啡,这听上去不太可信。
主持人: 那有没有一个生存意义上的问题:你怎么在一个存在着远比你聪明的东西的世界里活下去?
凯勒: 那要看你的自尊是不是建立在「本地最聪明的人」这件事上。而这样的人大概占人口的千分之一,其余的人从出生起就一直在面对这件事了。
凯勒: 有意思的经验的可能空间非常大。超级智能看起来很可能出现,虽然我们还不知道自己是不是神奇的,但我猜不是。而且很可能,它会创造出对我们来说很有意思的可能性,而它的兴趣对它自己来说也是有意思的。至于它的兴趣为什么非要变成争夺一平方英尺的土地,或者变成人们通常担心的那些事,我看不出理由。
主持人: 所以你不认为它会继承人性中比较黑暗的那些部分?
凯勒: 这取决于你怎么看待现实的构成。人类之所以是现在这个样子,是因为好的力量和坏的力量之间存在一种创造性的对立张力,关于这一点有很多哲学上的解释。我不知道为什么那边会不一样。
主持人: 你是说恶对善是必要的?
凯勒: 我不确定该不该用「恶」这个词,但我们生活在一个竞争的世界里,你眼中的善往往是别人眼中的恶。其中确实有恶性的成分,但那部分看起来是自限的,尽管偶尔会极其可怕。总之,观念是会被辩论的,人们有不同的信念,而辩论本身就是一个过程,是抵达某个结果的方式。
主持人: 但你不认为这个过程会把一部分人甩在后面,甩得让人痛苦?
凯勒: 对那千分之一的人来说会。可为什么现在还没有让很大一部分人痛苦呢?其实是有的。社会里确实有很多压力,关于百分之一,关于这个那个。但每个人的生活里本来就有很多压力,都是关于什么才让自己满足。「认识你自己」看来是恰当的箴言,去追求让你的生命有意义的东西,看来也是恰当的。而这方面的路径太多了,每一个层面上都有大量尚未探索的空间。
主持人: 你算是个乐观主义者。
凯勒: 我侄子管我叫「一个厌世的乐观主义者」。
主持人: 这个说法里有一种漂亮的张力。如果回望你的一生,可以重活其中的某一刻,你会选哪一段最幸福的时光?家人之外。
凯勒: 我不想重活任何时刻。我喜欢的是那种状态:你怀着某种乐观,同时又有面对未知的焦虑。
主持人: 所以你爱未知,爱它的神秘。
凯勒: 神秘我说不好,但它确实让你血往上涌。
主持人: 在这颗淡蓝色的小点上,生命这一整件事的意义是什么?
凯勒: 它就是它所做的那样。不知为什么,宇宙造出了原子,原子造出了我们,我们做各种事情,我们弄明白一些事情,我们探索一些事情。事情就是这样。
主持人: 不是「就是这样」,而是「本来如此」。吉姆,我想不出更好的收尾了。今天非常荣幸,也非常开心,谢谢你。
凯勒: 我也很开心,谢谢。
主持人: 最后,我想把戈登·摩尔的一句话留给各位:如果你尝试的每一件事都成功了,说明你还不够拼。
传奇芯片架构师 Jim Keller 从晶体管、分支预测到组织管理与马斯克式"第一性原理",系统论证了摩尔定律远未死亡——未来 10–20 年仍有约 100 倍的缩小空间,而算力每上一个数量级都会催生质变的新计算形态。
约十倍。他用的指标是 CPI(cycles per instruction,每条指令所需周期数):按顺序执行时,由于各类操作的延迟,大致是 3 个周期执行一条指令;而现代乱序处理器可以做到 0.2 到 0.25 个周期一条指令,即每周期发射四到五条指令。这个对比出现在他解释「发现的并行」的段落里,用来量化「一次取几百条指令、构建依赖图、并行发射」这套复杂机制究竟换来了多少回报。他同时指出,这十倍来自两个因素:叙事中可发现的并行性,以及叙事的可预测性。
代价从约一千比特膨胀到几十兆比特,即三到四个数量级。必须做到 99% 是因为分支平均每六条指令出现一次:若要维持约五百到六百条指令的执行窗口,窗口内就有近一百个分支,只有把一百个里的九十九个都预测对,这个窗口才是有效的,否则频繁的预测失败会不断清空流水线。Keller 用这个例子说明摩尔定律语境下的典型现象——为了把窗口从五十条扩到五百条指令,工程上愿意付出四个数量级的存储代价,这本身就是一条收益递减曲线。
他认为人们误以为摩尔定律是「晶体管变小」这一件事,实际上底下是成千上万项各自具有收益递减曲线的创新,叠加起来才呈现为指数曲线;因此某条曲线走平时,该领域专家会真诚地宣告终结,而另一批人正在别处推进。物理依据是尺度算术:现代晶体管约一千乘一千乘一千个原子,而量子效应在二到十个原子尺度才出现,理论上还有约一百万倍的空间;具体技术路径包括从 FinFET 转向纳米线(环栅)、互连金属堆叠的冶金优化、原子层沉积等。他判断未来十到二十年还能继续缩小,量级约一百倍。
菜谱是一套可照做的步骤,执行效率极高,但适用范围封闭——一本极好的面包菜谱不会告诉你怎么做煎蛋卷;理解则是掌握底层原理(生物学、供应链、热力学),因此可以迁移到面包、煎蛋卷、三明治等一切场景。他用这组概念解释了三件事:一是专家的标志不是攒了多少菜谱,而是知道何时该切换到深入理解;二是组织为何倾向渐进改良——重复菜谱高效且安全;三是每三到五年该从头重写架构的主张——不断给旧菜谱打补丁会撞上看似根本、实则源于问题切分方式的假极限。
因为持续渐进改良(加大缓冲区、把三发射改成四发射)会让每一块都逐步复杂化,最终撞上一个「看似根本性」的极限;而重新切分问题、重写之后,往往不仅更快,复杂度还只有原来的一半。阻力来自 S 曲线的结构:新曲线的起点必然低于旧曲线当前的优化点,于是同时存在短期灾难和长期灾难两种恐惧。按季度考核的管理者对全面改动怕得要死,个体工程师也倾向做能证明自己成功的渐进改进;此外市场部门要求「每一项都更快」,而架构师只能保证平均更快、必有离群点变慢,而总有客户恰好在乎那一项。
Lex 认为优化就是搜索——训练是在十万维参数空间里搜索能检测猫耳朵的配置。Keller 反对:他说训练是一连串投影,网络的中间层分别在描述尖耳朵、圆眼睛、毛茸茸这些属性,而抽取这些属性的计算过程并不是搜索;他承认推理阶段或许可算搜索,但训练不是,而且深度网络里有些层人们根本不知道表示了什么,去掉却又不工作。调和点是 Lex 自己给出的:这正对应 Keller 先前提出的 given search space 与 found search space 的区别——棋盘数据库是给定的搜索空间,高维参数空间是被发现的搜索空间。Keller 立刻接受了这个说法。
Keller 的链条是:一、开车不需要特别聪明,安全的最大瓶颈是注意力,而机器在注意力上有结构性优势——人开熟路会进入自动状态,机器永远在处理信息;二、道路是固定给定的,车辆可视为有概率性速度变化的弹道物体,可以彻底建图、彻底标注、彻底算轨迹;三、工程哲学是「最大化给定条件」,把需要推断的东西尽量变成显式输入;四、类比语音识别——频域分析多年无果,深度学习一举突破,而驾驶早已过了那个阶段;五、汽车转向与加速相对计算机时间尺度阻尼极大,留有余量。Lex 的反驳集中在人的因素:难点不是检测物体,而是场景理解、遮挡推断和对行人、骑车人、其他司机意图的心理建模——人被加塞时会对对方动机产生理论。两人最终各自保留立场。
性能阶梯是:同样面积的硅,通用 CPU 算 1 倍性能;GPU 约 5 倍,因为并行性是被直接给定而非需要挖掘的;专用 AI 加速器在 GPU 基础上再取 2 到 5 倍,因为可以把数学固定为 8 位整数乘法加 32 位累加这类窄子集。根本风险是专用化与算法演进之间的张力:AI 算法变化极快,加速器一旦针对当前算法过度优化,新算法出现时其效果提升可能大到让你后悔没用 GPU。因此他强调仍要保留可编程性,在「专用化带来的加速」和「不被算法迭代淘汰」之间取平衡。这段还提到特斯拉的成本约束——创业公司后备箱服务器预算一两万美元,而马斯克要求每辆车都装,成本目标直接反向决定系统架构。
他的回应基于生态位:社会本就高度分层,动物界各种能力与兴趣各占其位,聪明人、普通人、匠人、动物都有各自的领域;一个比人聪明十倍的东西,其兴趣领域会与人类天差地别,没有明显理由让它去为一小块土地开战,或因为我们爱去星巴克而追杀我们。他进一步把焦虑重新定性为自尊问题——真正在意「不再是最聪明的」的只有约 0.1% 的人口,其余人从出生起就在与更聪明的人共处。薄弱处在于:这个论证依赖「兴趣不重叠」这一假设,而主流风险论证恰恰指向工具性趋同——无论目标是什么,获取资源与自我保存都是有用的子目标,因此重叠可能是结构性的而非偶然的。他也承认自己不确定人是否有「魔法」,只是倾向物理证据说没有。
部分成立,但需要设限。辩护的一面:他的论证并不依赖芯片的特殊性,而依赖两个通用前提——底层条件在持续变化(对芯片是晶体管洪水,对创业是市场与技术栈变化),以及渐进改良会让系统逐步复杂化直至撞上由旧切分方式造成的假极限。他给出的组织解法也可迁移:并行做多个项目,一边优化旧的一边造新的,让有人敢站出来说话。设限的一面来自他自己的话:指令集这类契约层稳定了二十五年,重写的是底下的实现而非接口;他也承认自己是这件事上的极端派,且强调 99% 的工作仍是「匠人的活儿」,重写不是常态而是节律。因此迁移时应区分「可重写的实现」与「不该动的接口/承诺」,并确认底层条件是否真在指数级变化——若不变,重写只是浪费。
从全篇看,他大概率会用可验证的操作性证据而非态度来回应。第一,他给出过成本:剥离假设在情感和智识上都是痛苦的,且这种痛苦正来自它在拆你的自我形象——这不是浪漫化,而是承认代价。第二,他给出过产出:跟马斯克聊过之后才发现自己「连表面都没刮到」,而这种不带假设看约束的能力真的造出了可回收火箭。第三,他自己就设了限——他坦承会一连好几天忘记质疑假设,因为把事做完、让自己开心、瞎折腾都在争优先级,而且第一性原理思考「太多也很累」,隔一阵做一次就好。第四,他把 99% 的日常工作明确归为匠人手艺并且认为那很满足。所以他的立场不是「持续自我怀疑」,而是「知道有一个可以打开的开关,并且在撞上假极限时记得去开」。