#381 – Chris Lattner: Future of Programming and AI | Lex Fridman Podcast (2023-06-02, gemini-2.5-pro)
1. 导读
LLVM、Clang 及 Swift 的主要作者 Chris Lattner 在本期访谈中,系统探讨了 AI 软件栈碎片化与底层编译优化的挑战。访谈背景正值深度学习模型快速发展与异构硬件(GPU、TPU 及各类定制加速芯片)层出不穷,但连接顶层算法与底层硬件的编译器与运行时系统却存在严重的维护与迁移瓶颈。
Lattner 剖析了当前 AI 研发普遍面临的“双轨断层”——模型原型开发依赖高度灵活的 Python,而端侧与生产部署则依赖 C++ 与 CUDA 手动优化。他详细阐述了其创立的 Modular 公司推出 Mojo 编程语言与计算引擎的初衷:通过向下兼容 Python 语法并引入类似 Rust 的系统级内存控制机制,尝试统一动态算法开发与极致硬件性能优化,并构建一套面向异构硬件的可扩展编译中间层。
2. 核心观点
Chris Lattner 的核心判断是:当前 AI 系统工程的主要矛盾,在于上层模型结构迭代与底层异构芯片创新的速度,远快于中间系统软件栈的演进节奏。基于 TensorFlow 和 PyTorch 的生态长期依赖“Python 胶水 + C++ 算子库”的拼装架构,已难以支撑日益复杂的软硬件协同需求。Modular 的思路不是仅在特定框架内做补丁式优化,而是基于 MLIR 编译器基础设施构建新的硬件抽象层,并通过设计与 Python 语法兼容的高性能系统语言 Mojo,提供平滑的性能调优路径。
关键判断 1:AI 行业的“两个世界问题”是根本症结,必须从语言层面统一。 当前机器学习研发普遍存在算法探索(Python)与生产落地(C++/CUDA)的分离。研究员偏好 Python 的动态特性与庞大生态,但其执行开销难以满足低延迟服务要求;工程团队则需耗费大量时间将模型算子改写为 C++ 或专用硬件核函数,导致跨团队协作周期被拉长。Mojo 的设计目标是打通这一割裂:以 Python 语法的超集作为交互界面,允许开发者在同一个脚本内以动态语言形式编写流程,在计算瓶颈处按需引入静态类型、所有权语义和内存指针控制,避免在两种截然不同的语言和工具链之间来回搬运代码。
关键判断 2:性能提升应是渐进式选项,而非初始门槛。
Python 的广泛普及建立在其极低的入门门槛与表达效率之上。任何试图以陡峭的学习曲线或繁琐的静态标注全盘替代 Python 的尝试,都难以在通用领域取得成功。Mojo 采取渐进式增强策略:初始代码可以完全采用兼容 Python 的动态语法运行,通过现代编译管线获得基础性能提升;当遭遇极致算力需求时,开发者可逐步引入严格函数关键字 fn、静态类型注解、不可变变量绑定 let,并调用内置的 SIMD 向量化指令、多核并行调度与硬件自适应调优(Auto-tuning)工具,使其执行效率逐步逼近乃至对齐手写 C++/CUDA。
关键判断 3:硬件的未来是“古怪”且碎片化的,唯一出路是可编程的统一抽象层。 后摩尔定律时代,算力提升高度依赖特定架构加速芯片(如 ASIC、NPU、DSP)。各类加速器的内存分级、矢量位宽与指令集规范差异巨大,单纯依赖工程师为每一款新硬件手工编写底层加速算子(Kernels)的方式难以持续。Modular 的解法是通过 MLIR 框架构建与具体硬件解耦的可扩展中间表示,上层框架的模型计算图均可经此转换为中间代码;Mojo 语言则充当该编译系统的可编程前端,使硬件厂商和算法工程师能够在标准库层面编写通用优化逻辑,无需每次都深入编译器后端修改底层代码。
关键判断 4:兼容 Python 生态是生存前提,必须不惜代价避免“Python 2 到 3”的灾难重演。 历史上的 Python 2 到 3 迁移曾造成长达数年的生态割裂与代码迁移阵痛,新语言必须吸取这一教训。Mojo 选择将其定位为 Python 的严格超集,并深度支持与 CPython 运行时的无缝互操作。在生态过渡期内,Mojo 可以直接导入现有的 NumPy、Pandas 等三方库,通过底层桥接调用已有的 C 扩展模块。这种做法使得开发者可以在保留现有数据处理管线的前提下,将性能敏感的深层神经网络或自定义算子用 Mojo 单独重写,降低接入新技术的试错成本。
3. 批判与质疑
Lattner 的技术架构设想完备,但在工程现实与社区生态落地中,仍需面临几项严峻考验:
首先,“单一语言覆盖全栈”的设计往往面临认知负荷的反噬。 Python 的轻量动态与系统级编程对内存生命周期的显式控制在语义哲学上存在根本冲突。在 Mojo 中同时支持动态的 def 和严格静态的 fn,可能导致代码库风格分裂。开发者在同一项目中混用不同语义时,类型推导与所有权传递的调试难度可能显著增加。
其次,依托 CPython 运行时的互操作性在工程落地中存在开销折损。 虽然 Mojo 可以调用现成的 Python 包,但跨运行时的对象封送(Marshaling)和全局解释器锁(GIL)的存在,往往会拖累整体吞吐量。只有当核心科学计算库全部用 Mojo 原生重写后,其理论性能优势才能完全释放;而重新构建并校验庞大的科学计算包生态,需要跨越漫长的社区协作周期。
再者,单点计算基准测试不代表端到端工业场景的实际收益。 演示中 Mandelbrot 分形算法的万倍加速属于典型的密集矩阵计算场景。在真实的企业级 AI 推理管线中,网络 I/O、磁盘反序列化、主机与显存间的数据传输以及动态批处理(Dynamic Batching)调度往往占据大量时间,Mojo 能否在完整生产流程中依然保持决定性的加速优势,需接受工业级复杂场景的实测。
最后,由商业初创公司主导的闭源/渐进开源模式与传统开源社区存在治理张力。 Lattner 过去主导的 LLVM 和 Swift 分别获得了学术界和苹果生态的强力支持。Modular 作为一家商业公司,在权衡自研计算引擎的商业授权与 Mojo 编译器本身的开放性时,可能面临开发者对其技术锁定(Vendor Lock-in)的顾虑。
4. 行业视野
这场访谈为观察现代编译器与计算基础设施的演变提供了清晰脉络:
- 硬件异构加速与软件抽象的博弈:英伟达通过 CUDA 建立了极具壁垒的软硬件生态闭环。开源界与各大云厂商一直在尝试通过统一中间层打破垄断,例如 Google 的 XLA/JAX、OpenAI 的 Triton 以及 PyTorch 2.0 的 Inductor。Modular 和 Mojo 则试图以更底层的 MLIR 为骨架,提供跨厂商的替代路径。
- 胶水语言演进历史的镜像:历史上 C++ 兼容 C 语言以快速获取既有开发者群体,促成了 C++ 在系统级编程中的统治地位。Mojo 沿用这一策略,将自身绑定在已是 AI 领域事实标准的 Python 语法上,试图规避新语言推广初期缺乏开发者生态的困境。
- 计算系统软硬件协同设计的深化:随着半导体工艺物理极限临近,编译器不再只是将代码翻译成固定机器码的工具,而是需要深入参与内存层次调度、张量排布与流水线并行的软硬件联调系统。
5. 启示与建议
对 AI 架构师与系统工程师:
- 理性评估多语言混编的维护成本:如果系统内部存在严重的“Python 原型开发-C++ 生产改写”瓶颈,可关注 Mojo 的单语言统一范式,或利用 PyTorch 2.0 / Triton 等现代编译扩展工具,在靠近 Python 层的代码中直接编写高性能算子。
- 关注算力异构化带来的平台解耦需求:在系统设计时避免将上层业务逻辑直接绑定在特定厂商的专有硬件 API 上,尽量通过标准中间表示或硬件无关的抽象框架保留未来替换加速芯片的灵活性。
对投资人与战略决策者:
- 区分开发语言与编译运行时的商业模式:编程语言本身通常难以直接商业化,Modular 的潜在商业价值更可能集中在高性能跨平台模型推理引擎与企业级编译支持服务上;需关注其企业级平台在主流云厂商中的部署采纳率。
- 追踪核心科学计算库的移植进度:判断 Mojo 生态是否真正成熟的关键指标,在于是否有主流深度学习推理框架或重要三方库(如 PyTorch、vLLM)提供一等公民级别的原生支持。
总体而言,Lattner 指出的 AI 工具链断层与硬件碎片化问题是业界的确定性痛点;Mojo 与 Modular 提出的跨平台统一方案具备坚实的编译器工程基础,但其能否在英伟达 CUDA 与现有 Python 科学计算生态的庞大惯性中突围,仍需依靠长期的工程交付与社区生态培育来检验。
6. 金句摘录
-
“My belief of where computing goes, if you look out 10 years from now, is it’s not gonna get simpler. Physics isn’t going back to where we came from. It’s only gonna get weirder from here on out.”
- 中文意译:“如果展望未来十年的计算发展,我的看法是系统绝不会变得更简单。物理客观规律不会倒退回过去,硬件架构只会从现在开始变得越来越‘异构与特殊’。”
- 语境:Lattner 用此论据阐述为何不能再指望通用 CPU 解决所有问题,后摩尔定律时代的专用加速硬件层出不穷,系统软件必须从架构上主动适应这种碎片化现实。
-
“Our view is that Python is just not done yet.”
- 中文意译:“我们的观点是,Python 只是还没完全‘完工’而已。”
- 语境:在界定 Mojo 与 Python 的关系时,Lattner 没有将 Mojo 描述为替代或颠覆 Python 的对立面,而是将其定位为为 Python 补全系统级控制与性能拼图的演进延续。
-
“We’re not working forwards from making Python a little bit better. We’re working backwards from what is the limit of physics?”
- 中文意译:“我们不是顺着原路去把 Python 改良一点点,而是从‘底层物理硬件的性能极限究竟在哪里’这个终点反向推导。”
- 语境:当被问及为何不继续在现有 CPython 解释器上做增量修改时,Lattner 说明了从第一性原理设计编译管线的出发点:只有直面现代硬件的并行与向量化结构,才能彻底释放芯片算力。