========================
== Seeking Complexity ==
========================

重新认识Chris Lattner

PUBLIC

Chris是谁?

  • 在Apple发明LLVM/Clang/Swift。
  • 在Tesla另外自动驾驶芯片。
  • 在Google发起MLIR
  • RISC-V商业化公司SiFive的VP
  • Modulr的创始人,发明Mojo

一系列光环的大佬。

记录这个文章的起点是,发现Chris在和geohot(重新认识geohot中的geohot)就什么是AI compiler的终极形态的讨论:

可以说是正统派和野路子的正面交锋/交流。

Chris写了一个系列文章:Democratizing AI Compute,讲述了自己为什么要创业做Mojo。

读完之后,感觉终于解决了我一个长久的困惑,TVM/XLA/Triton/cuTile…似乎都在解决一个问题,AI编译器,他们究竟是什么关系。

所幸大佬站在浪潮之巅,亲身经历这一切,并慷慨地写了一个像是自传一样的总结,让我可以管中窥豹。

记录一下。

DeepSeek对AI的影响

DeepSeek通过透明的承认自己在压榨GPU上的热爱和成就,戳破了一层窗户纸。

AI模型的工程化比学术化相比,更加是这个时代的中心,而GPU的利用水平拉开了不同玩家的差距。

Chris过去25年最多的时间投入在了LLVM上,这是一个编译器的编译器,为C++/Rust/Swift/OpenCL的语言奠定了编译器基础。

其中OpenCL则是最早的大家对于通用AI编译器抽象的愿景的化身。

在Google,Chris帮助Google做出了TPU,可以说是帮Attention/Bert等创新铺平了计算道路。

但是当别人问他:为什么CUDA这种东西依旧存在。Chris自己也觉得需要展开说说:

  • 为什么CUDA如此成功
  • 为什么OpenCL并没有解决这个问题,而后继者Triton,OneAPI也没有解决这个问题。

到底什么是CUDA

是语法(CUDA C++),还是库(cuDNN)或者是解决方案(Triton Serving/TensorRT/TensorRT-LLM)。

2001年之前,GPU只能运行固定的render pipeline(transform/lightning/raster),直到shader开始支持可编程的图形效果。

人们发现,这里存在通用计算的可能。

2006年CUDA发布,用一种C++语法扩展的方案支持了并行计算。

然后很快地,在这种语言之上的库蓬勃发展,线性代数cuBLAS,傅里叶变换cuFFT,以及对后面影响最大的神经网络cuDNN。直接支撑起了TensorFlow和PyTorch。

然后又有:

  • Triton Serving:模型推理服务
  • TensorRT:端测的模型编译部署
  • TensorRT-LLM:Nvidia的类似vLLM的LLM推理服务

CUDA怎么成功的

只能马后炮的总结一下了:跨代兼容,坚定的投入软件,和PyTorch/TensorFlow并肩作战,AI迎来了GenAI这样真正的突破。

CUDA足够好吗

垄断是每个人(除了nvidia)都担心的。

CUDA不具有100%的硬件控制力,所以FlashAttention不得不使用PTX来写。相比CUDA来说,PTX就更加是一个黑匣子了。

所以Jim Keller有一个有名的论述:CUDA是一片沼泽,而不是护城河

OpenCL怎么样

OpenCL肩负了大家的愿景,一个硬件无关的AI计算标准,但是失败了。特别是发起者Apple自己都放弃了OpenCL,推出了自己的Metal。

Chris从中吸取了教训:

  • 不能只提供规范,没有参考实现。
  • 强有力的领导,不能随意分叉,碎片化。
  • 性能要顶级。目前OpenCL竟然都无法利用TensorCore。
  • 好用,约等于不能用C++。

TVM/XLA这些AI编译器怎么样

对于计算机科学来说,如果新问题出现,大家就会想加入一个新的抽象。算子在增多,计算芯片在增多。那么我需要一个自动生成内核的工具,不想手写kernel,也就是一个AI编译器。

TVM算是早期AI编译器中最成功的一个,其发起者陈天奇和Luis Ceze都是编译器背景。

但是:

  • TVM始终无法提供最佳性能,距离nvidia实现总是相差20%以上。
  • 供应商对代码进行分叉,互相抱怨影响了开发进度
  • 编译速度太慢

TVM的商业化公司OctoAI被Nvidia收购之后,大量管理层离职,TVM的未来也随之变得充满不确定性。

XLA是Google的尝试,基本解决了集群训练的问题。但是XLA是私有的。

对应的OpenXLA是公开的,但是对于工程师来说,TPU总是第一优先级,从来不会优先考虑其他芯片。

同时因为迭代不够快,XLA也被Google自己抛弃,如今许多算子是在Pallas中实现的。

所以OpenCL的教训依旧存在:

  • 需要参考实现,有进步。
  • 强有力的领导,不算是。TVM碎片化严重。OpenXLA没有形成社区。
  • 性能要好,都没有做到beat cuDNN。
  • 还算好用,但是TVM编译时间(autotuning)太长了。

Triton怎么样

Triton是一个DSL(Domain-Specific Language),长得像python,但是不是python。

Triton提供了一种块级别的描述算子的方法,由编译器生成最优实现。并没有暴露所有的硬件能力。

结论来说,够易用,但是不够快。始终和最优实现(不管是Nvidia的库,还是手写的PTX算子)保持20%以上的差距。

除了Nvidia之外,其他芯片的支持也不够好。

MLIR怎么样

如上面所说,计算机这个圈子只要看到了新问题,第一反应就是加一层抽象。Chris和Jeff在2018年发现,好像有这么多AI编译器了(Glow/ONNX/TFLite/XLA/TVM)。

他们决定做一个编译器的框架,把编译器中用到的“编译器技术”统一起来:静态单赋值(SSA),代数化简,多面体分析。

用Chris的说法,MLIR自从先给LLVM基金会之后,得以腾飞,成为了众多项目的基础。

但是没有打破CUDA的垄断,因为:

  • 参考实现似乎是有的,但是只是不同模块的拼装。
  • 领导组织并没有维持稳定。
  • 性能依旧有差距。
  • 学习曲线陡峭,开发门槛搞。
  • 也是走向了碎片化。

为什么硬件公司无法建立AI软件

在硬件公司的财务统计里面,芯片永远是产品,软件永远是间接费用。

AI软件不是和Nvidia的CUDA竞争,而是和整个AI生态系统做竞争,因为所有人都在优先投入在Nvidia的硬件上。

所以为什么Modular可以做到

我觉得到这里就有点夹带私货了。

我觉得最核心的还是,Chris的Mojo真的可以做到最佳性能:Achieving State-of-the-Art Performance on AMD MI355 — in Just 14 Days

归根到底是一个技术够强,可以平推的故事。