← 返回列表
Lex Fridman Podcast播客13 May 2019来源: lexfridman.com主持: Lex Fridman

Chris Lattner: Compilers, LLVM, Swift, TPU, and ML Accelerators

一句话导读

这篇播客聊的是编译器大神Chris Lattner的故事。他是LLVM和Swift语言的创造者,现在在Google做AI芯片。他认为编译器就像翻译官,把人类写的代码转成机器能懂的语言。LLVM最牛的地方不是技术多厉害,而是让苹果、谷歌、英伟达这些竞争对手一起用同一个工具,省得各自从头造轮子。他还提到Swift语言一开始只是周末做着玩,后来因为苹果需要更安全的代码才正式推出。重点提了三个东西:LLVM(已经用了19年,大家还在用)、Swift(Python互操作只用1200行代码就搞定)、TPU(谷歌的AI芯片,用了一种叫bfloat16的省钱省电的格式)。

AI 摘要AI 生成 · 可能有误 · 以原文为准

Chris Lattner在Lex Fridman Podcast中讨论了编译器技术、LLVM、Swift、TPU及ML加速器。核心观点是编译器是连接硬件与软件、生成高效代码的关键技术。重要结论包括:Lattner创建了LLVM编译器基础设施项目和Clang编译器,领导了Apple的Swift编程语言开发,并在Tesla担任Autopilot软件副总裁,负责从Autopilot硬件1到硬件2的过渡,期间Tesla从零开始构建内部软件基础设施。他还参与Google的TensorFlow CPU、GPU、TPU加速器及Swift for TensorFlow项目。

全文约 14 分钟 · 9 个章节
深度解读

本期速览

Chris Lattner(LLVM 创始人、Swift 语言创建者、前 Tesla Autopilot 软件副总裁,现任 Google 高级总监)在 Lex Fridman 播客中深入剖析编译器技术的本质——编译器是连接人类意图与机器执行的桥梁,其核心挑战不是算法创新,而是软件工程:让数百人协作构建模块化、可复用的基础设施。Lattner 认为,LLVM 最大的贡献并非某个优化突破,而是通过标准化和模块化设计,让 Apple、Google、NVIDIA、AMD 等竞争对手在共享基础设施上协作,这一模式正在被 MLIR 项目复制到机器学习编译器领域。


主题一:编译器本质——从人类意图到机器执行的桥梁

Chris Lattner 认为,编译器的核心任务是在「人类想要的抽象层级」和「硬件实际执行的层级」之间建立转换通道。

  • 三层架构:编译器通常分为前端(语言特定,如 Clang 解析 C/C++)、中端(优化器,语言无关)、后端(硬件特定,生成机器码)。LLVM 标准化了中端和后端,使得 Swift、Julia、Rust、C/C++ 等不同语言可以共享同一套优化和代码生成基础设施。
  • 中间表示(IR):前端将源代码解析为抽象语法树(AST),然后「降低」为控制流图(CFG)形式的中间表示。IR 是语言无关的——JavaScript 的「假值」概念等语言特性留在前端,中端优化器只需处理统一的 IR。
  • 硬件多样性驱动:x86、ARM、PowerPC 等传统芯片,加上 GPU、TPU 等 ML 加速器,使得编译器必须持续适应新硬件。Lattner 强调:「硬件和软件两端都在变复杂,编译器是中间那个必须同时理解两端的系统。」

关键类比:Lattner 将编译器与神经网络对比——两者都在不同抽象层级上转换表示,但编译器通常只有少数几种表示并做多次迭代变换,而神经网络通过多层产生大量不同表示。


主题二:LLVM 的成功秘诀——不是算法突破,而是工程与社区

Lattner 认为,LLVM 最深刻的贡献不是某个编译器算法的创新,而是通过模块化设计让竞争对手在共享基础设施上协作。

  • 起源:LLVM 始于 Lattner 在伊利诺伊大学的硕士项目,最初只是「好玩」——他原本计划一年拿个非论文硕士就回去工作,结果被「技术狙击」留了五年。团队最初只有他、导师和 2-3 名研究生。
  • 模块化设计:LLVM 的核心设计原则是模块化——例如,Lattner 写了一个寄存器分配器,后来「比我聪明得多的人」可以把它整个替换掉。这与 GCC 形成鲜明对比:GCC 的全局变量和紧耦合设计使得替换子系统极其困难。
  • 竞争对手协作:Apple、Google、AMD、Intel、NVIDIA、Cray 等公司在商业上是竞争对手,但都在 LLVM 上协作。Lattner 解释:「这不是出于善意,而是因为基础设施太昂贵,没有一家公司——即使是巨头——愿意自己全部实现。」LLVM 已有约 150 个不同的优化 pass。
  • 社区治理:LLVM 采用分层代码所有者体系,硬件厂商自然成为其硬件特定部分的负责人。Lattner 名义上仍是顶层,但主要工作是调解技术分歧,而非审查每个补丁。LLVM 基金会(非营利组织)负责商业和活动事务,但不干预技术方向。
  • 意外应用:Sony 将 LLVM 用于电影制作管线中的图形编译,实现了更好的特效——「这是好基础设施的标志:能以设计者从未预料到的方式被使用。」

数据点:LLVM 已有 19 年历史,比它诞生时的 GCC 还要老。Lattner 的补丁数量仍比任何人都多一个数量级。


主题三:Swift 的诞生——从「不可能」到「必须做」

Lattner 描述 Swift 的起源:从「周末项目」到「异端想法」,最终因内存安全这一不可妥协的需求而成为现实。

  • 起点:2010 年,Clang 的 C++ 支持刚完成。Lattner 觉得 C++「在很多方面很丑陋」,于是开始在业余时间探索「更好的东西」——没有告诉任何人,也没有任何野心。
  • 内部阻力:当时 Apple 的软件团队「热爱 Objective-C」——许多领导来自 NeXT,工程师也是因为喜欢 Objective-C 才被招聘。做新语言的想法被视为「异端」。Lattner 指出:「iPhone 的成功被认为是因为 Objective-C,而不是尽管它。」
  • 关键转折:Objective-C 基于 C 的指针系统存在根本性的内存安全问题。Lattner 论证:「如果你去掉指针,它就不再是 Objective-C 了。你不能在不从根本上改变语言的情况下修复内存安全。」这一认识最终说服了团队。
  • 设计哲学:Swift 的核心设计原则是「渐进式复杂度暴露」——从 `print("hello world")` 一行代码开始,逐步引入变量、控制流、函数、类、泛型、模块。Lattner 强调这对编译型语言来说很不寻常:「你可以用 Swift 写固件,但它有非常高层的感觉。」
  • 动态编译能力:Swift 不只是静态编译——在 Colab 或 Jupyter 中,它实际上是动态编译的:每行代码通过 Swift 编译器前端、优化器、JIT 编译为机器码,然后注入到运行中的进程。Lattner 强调:「这不是偶然,Swift 从一开始就为此设计。」

Python 互操作:Swift 通过引入「动态成员查找」和「动态调用」两个语言特性,实现了 `import numpy` 这样的 Python 互操作。实现只有约 1200 行纯 Swift 代码——它创建一个 Python 对象类型,然后通过 C 互操作调用 Python 解释器。


主题四:Swift for TensorFlow——重新定义 ML 编译器栈的分工

Lattner 认为,Swift for TensorFlow 与 Python 绑定的根本区别在于:Swift 可以改变语言本身来优化人机分工,而 Python 受限于「用库能做什么」。

  • TensorFlow 本质上是编译器:它接收模型,然后让模型在硬件上跑得快——这就是编译器做的事。它有前端、优化器和多个后端。
  • Python 的局限:Python 的 ML 生态是「用 Python 库能做到的最好情况」——没有因为 ML 而添加的语言特性(矩阵乘法运算符是例外)。自动微分需要 `tf.GradientTape` 等手动管理。
  • Swift 的优势
  • 类型系统:编译器可以自动构建计算图、做融合和优化,程序员无需手动操作。
  • 语言集成的自动微分:Swift for TensorFlow 正在实现语言级别的自动微分,可以复用 1970 年代 Fortran 时代的源到源转换技术——包括数值稳定性修复等优化。这需要能「看到整个函数」才能做到,而逐操作(op-by-op)的 eager 执行做不到。
  • MLIR 项目:Lattner 将其描述为「LLVM 2.0」——它从 LLVM 的成功和错误中学习,旨在为 TensorFlow 生态中多个编译器(Google XLA、NVIDIA TensorRT、Intel nGraph)提供共享基础设施。MLIR 尚未开源,但预计几个月内会开源。

主题五:TPU 与硬件-软件协同设计

Lattner 以 bfloat16 为例,说明 TPU 的成功来自硬件、软件、算法三者的协同设计。

  • bfloat16 的起源:最初来自研究团队优化网络权重传输时的压缩方案——它有更小的尾数和更大的指数,精度较低但能表示更大范围的值。在 ML 中,这实际上可能提高泛化能力。
  • 硬件优势:乘法器的面积和延迟与尾数位数的平方成正比,与指数位数线性相关——bfloat16 因此比标准 float16 更便宜(在芯片面积和功耗上)。
  • 第三代 TPU:100 petaflops 的大型液冷系统。Lattner 强调:「我们还没有用完想法。」硬件生产周期长达数年,而算法在持续变化——必须下注并决定如何最优分配晶体管。

主题六:Tesla 经历——愿景的力量与高 turnover 的现实

Lattner 对 Tesla 的评价是矛盾的:他尊重 Elon Musk 的愿景能力,但也经历了「前所未见的高 turnover」。

  • 硬件 1 到硬件 2 的过渡:硬件 1 最初设计用于简单的自动化功能(如交通感知巡航控制),后来「功能蔓延」到车道保持等辅助驾驶功能。硬件 2 的核心挑战是从第三方视觉栈转向自研视觉栈——Lattner 主要参与了这一过渡。
  • 对 Elon Musk 的评价:「Elon 能吸引顶尖人才,因为他有非常清晰的未来愿景,让人们相信并愿意为之努力。这种愿景的力量我极为尊重。世界上有很多人站在街角说『我们要去火星』,但只有极少数人能让他人相信、构建路径并实现它。我不尊重他所有的方法,但我非常尊重这一点。」
  • 工作强度:Lattner 定义「努力工作」不只是长时间工作,而是同时兼顾短期交付和长期思考的平衡。在 Apple,他通过培养团队和领导层来解放自己,以便「有点疯狂地思考下一件事」。

提及的标的

标的 嘉宾态度 关键数据
LLVM 看好(创建者视角) 19 年历史,约 150 个优化 pass,社区含 Apple/Google/AMD/Intel/NVIDIA/Cray
Clang 看好 C/C++/ObjC 前端,Google 现为主要贡献者
Swift 看好(创建者视角) 始于 2010 年,Python 互操作仅 1200 行代码
TensorFlow 看好 开源被视为「软件史上的里程碑时刻」
TPU(Google) 看好 第三代 100 petaflops 液冷系统,bfloat16 格式
Tesla Autopilot 中性(经历描述) 硬件 1→硬件 2 过渡,从第三方视觉栈转向自研
GCC 中性对比 与 LLVM 性能「如此接近以至于不重要」,但模块化不如 LLVM
XLA(Google) 正面提及 TensorFlow 的编译器系统
TensorRT(NVIDIA) 正面提及 硬件特定编译器
nGraph(Intel) 正面提及 硬件特定编译器

值得记住的判断

1. 「LLVM 最大的贡献不是算法创新,而是让竞争对手在共享基础设施上协作」(Chris Lattner)——Apple、Google、AMD、Intel、NVIDIA 等公司共同投资 LLVM,因为「基础设施太昂贵,没有一家公司愿意自己全部实现」。

2. 「Swift 的诞生不是因为 Objective-C 不好,而是因为内存安全无法在不改变语言的前提下修复」(Chris Lattner)——Objective-C 基于 C 的指针系统,去掉指针就不再是 Objective-C。这一认识是说服 Apple 内部「Objective-C 热爱者」的关键。

3. 「编译器与神经网络在概念上相似——都在不同抽象层级上转换表示,但编译器只有少数几种表示并做多次迭代变换」(Chris Lattner)——这一类比揭示了 ML 编译器(如 TensorFlow)与经典编译器的深层联系。

4. 「Python 的 ML 生态是『用库能做到的最好情况』,而 Swift 可以改变语言本身来优化人机分工」(Chris Lattner)——Swift for TensorFlow 通过语言集成的自动微分和类型系统,让编译器自动构建计算图、做融合优化,程序员无需手动操作。

5. 「bfloat16 的尾数更小、指数更大——精度降低但范围扩大,在 ML 中可能提高泛化能力,同时在硬件上更便宜(乘法器面积与尾数位数的平方成正比)」(Chris Lattner)——这是硬件-软件-算法协同设计的典型案例,最初来自网络权重压缩研究,后被烧入 TPU 硅片。

6. 「MLIR 是『LLVM 2.0』——它从 LLVM 的成功和错误中学习,为 TensorFlow 生态中多个编译器提供共享基础设施」(Chris Lattner)——MLIR 旨在让 XLA、TensorRT、nGraph 等系统共享代码,避免重复发明轮子。

7. 「Elon Musk 能吸引顶尖人才,因为他有非常清晰的未来愿景并让人们相信——世界上有很多人说『我们要去火星』,但只有极少数人能让他人相信并实现它」(Chris Lattner)——Lattner 尊重愿景的力量,但明确表示「不尊重他所有的方法」。

8. 「编译器是最后一门综合课程——它把算法、数据结构、软件工程全部拉在一起,而且你必须在一个代码上持续构建整个学期,与自己的决策共存」(Chris Lattner)——这是 Lattner 被编译器吸引的根源,也解释了为什么编译器工程师如此稀缺。