3、编译器:芯片的“翻译官”:LLVM、MLIR、TVM等编译器技术,如何将模型翻译成芯片指令

做AI芯片投资,有个坑我踩过好几次——就是只看芯片的算力峰值,不看编译器好不好用。

你想想看,一块芯片标称100TOPS,结果跑个模型只能发挥出30%的性能。这能叫好芯片吗?

编译器,说白了就是芯片的“翻译官”。它把PyTorch、TensorFlow写出来的模型,翻译成芯片能执行的底层指令。翻译得好不好,直接决定了芯片的真实性能。

核心观点:编译器是AI芯片的“软件灵魂”。没有好的编译器,再强的硬件也是废铁。

3.1 编译器到底在干什么?

我经常跟投资人打个比方:你写了一段Python代码,芯片只认识0和1。编译器就是中间那个“翻译”。

具体到AI芯片,编译器要做三件事:

  • 解析模型:把PyTorch/TensorFlow的计算图读进来
  • 优化计算图:合并算子、消除冗余、调整内存布局
  • 生成指令:把优化后的计算图映射到芯片的具体指令上

嗯,这里要注意。传统CPU的编译器(比如GCC)已经非常成熟了。但AI芯片的编译器,难度完全不在一个量级。

为什么?因为AI模型的结构千变万化。今天流行Transformer,明天可能就换成了Mamba。芯片的硬件架构也五花八门,有SIMD的、有脉动阵列的、有数据流的。编译器得在两者之间找到最优映射。

投资视角:看一家AI芯片公司,先问他们的编译器团队有多少人。如果少于20人,我建议你谨慎。编译器是典型的“人月”工程,急不来。

3.2 LLVM:编译器界的Linux

LLVM,全称Low Level Virtual Machine。名字叫虚拟机,其实是个编译器基础设施。

我个人习惯把LLVM比作“编译器界的Linux”。它提供了一套通用的中间表示(IR)和优化框架。你只需要写前端(把高级语言转成IR)和后端(把IR转成目标指令),中间的优化工作LLVM全包了。

举个例子,苹果的Swift语言就是用LLVM做编译器的。NVIDIA的CUDA编译器也用了LLVM。为什么大家都用?因为省事。

对于AI芯片公司来说,基于LLVM做编译器是个明智的选择。你不需要从零开始写优化pass,LLVM已经提供了几百个现成的。你只需要把精力放在芯片特有的优化上。

// LLVM IR示例:一个简单的加法函数
define i32 @add(i32 %a, i32 %b) {
  %result = add i32 %a, %b
  ret i32 %result
}

这段代码看着简单,但LLVM的优化器能把它变成各种形态。比如循环展开、向量化、内联等等。这些优化对AI模型特别重要。

避坑指南:我曾经见过一家公司,非要自己写全套编译器,不用LLVM。结果两年过去了,连基本的算子都没对齐。后来还是乖乖切回了LLVM。记住,能用开源的就别自己造轮子。

3.3 MLIR:多层次的中间表示

MLIR是Google搞出来的,全称Multi-Level Intermediate Representation。它解决了LLVM的一个痛点:LLVM的IR太底层了。

你想想看,AI模型里有卷积、有注意力机制、有LayerNorm。这些高层语义,在LLVM IR里全变成了load/store和算术指令。优化起来非常困难。

MLIR的做法是:引入多层IR。从高层(比如Tensor操作)到底层(比如向量指令),逐层下降。每一层都有自己的优化pass。

举个例子,在MLIR里你可以这样表示一个卷积:

// MLIR中的卷积操作(高层IR)
%result = linalg.conv_2d 
    ins(%input, %filter: tensor<1x224x224x3xf32>, tensor<3x3x3x64xf32>)
    outs(%output: tensor<1x112x112x64xf32>)

这个高层IR,编译器可以轻松识别出“哦,这是个卷积”。然后针对卷积做专门的优化,比如Winograd变换、内存重排等等。

我个人觉得,MLIR是AI编译器未来的方向。现在主流的AI芯片公司,几乎都在往MLIR上迁移。

特性 LLVM MLIR
IR层次 单层(底层) 多层(高层到底层)
AI优化 困难(需要反向工程) 容易(保留高层语义)
扩展性 中等 强(Dialect机制)
生态成熟度 非常成熟 快速发展中

投资判断:如果一家AI芯片公司的编译器是基于MLIR构建的,说明他们的技术路线比较前沿。如果还在用纯LLVM,也不是不行,但未来可能需要迁移。

3.4 TVM:端到端的深度学习编译器

TVM是陈天奇团队搞出来的。它跟LLVM/MLIR不太一样,TVM是专门为深度学习设计的端到端编译器。

TVM的核心思想是:用“搜索”代替“手工优化”。

传统编译器靠的是专家写的优化规则。比如“循环展开4次性能最好”。但TVM觉得,不同硬件、不同模型,最优的优化参数是不一样的。与其写死规则,不如让机器自己去搜。

TVM的流程大概是这样的:

  1. 把模型导入成计算图
  2. 用AutoTVM自动搜索最优的调度方案
  3. 生成目标代码

我在项目中遇到过一件事:用TVM优化一个BERT模型,在GPU上跑。手工优化的版本延迟是5ms,TVM自动搜索出来的版本是3.2ms。提升了将近40%。

当然,TVM也有缺点。搜索时间太长,有时候搜一个算子要几个小时。不过现在有了一些加速方法,比如基于迁移学习的搜索。

实用技巧:看一家公司的编译器能力,可以问他们一个问题:“你们的编译器支持AutoTVM或者类似的自动调优吗?”如果答案是“不支持”,那他们的优化可能不够深入。

3.5 编译器生态的投资判断框架

说了这么多技术细节,咱们回到投资本身。怎么判断一家AI芯片公司的编译器好不好?

我总结了一个“三看”框架:

  • 一看兼容性:支持多少种模型框架?PyTorch、TensorFlow、ONNX、JAX都支持吗?
  • 二看性能:典型模型的端到端性能如何?跟NVIDIA的TensorRT比差多少?
  • 三看易用性:开发者上手需要多久?有没有完善的文档和调试工具?

嗯,这里要特别强调一下易用性。我见过太多芯片公司,编译器性能做得不错,但开发者体验一塌糊涂。装个环境要半天,报错信息看不懂,社区也没人回答。这样的芯片,就算性能再好也卖不出去。

避坑指南:我曾经投资过一家公司,他们的芯片算力是竞品的2倍,但编译器只支持自家魔改的框架。结果开发者根本不买账,宁愿用性能差一点的NVIDIA。后来这家公司花了整整一年才把PyTorch支持做好,但市场窗口已经过了。

3.6 编译器技术的未来趋势

最后聊聊趋势。编译器技术这几年变化很快,有几个方向值得关注:

  • MLIR生态化:越来越多的芯片公司加入MLIR社区,形成统一的AI编译器基础设施
  • 自动调优:用强化学习、进化算法自动搜索最优调度,减少人工调优的工作量
  • 联合优化:编译器跟硬件协同设计,比如编译器告诉硬件“我需要这个指令”,硬件再去实现
  • 量化编译:编译器直接处理量化模型,自动插入量化/反量化节点,减少精度损失

我个人最看好MLIR生态化这个方向。为什么?因为统一的基础设施能降低整个行业的重复劳动。就像当年Linux统一了操作系统内核一样,MLIR有可能统一AI编译器的前端和后端。

对于投资人来说,关注一家公司在MLIR社区的贡献度,是个不错的切入点。贡献越多,说明他们对编译器技术的理解越深,也越能跟上行业的发展节奏。

总结:编译器是AI芯片的“软件灵魂”。LLVM提供了基础框架,MLIR解决了多层次优化问题,TVM实现了自动调优。判断一家芯片公司的编译器好不好,看兼容性、性能和易用性三个维度。未来,MLIR生态化和自动调优是主要趋势。

AI芯片编译器技术生态图 模型框架层 PyTorch · TensorFlow · ONNX · JAX 编译器技术层 LLVM 底层IR · 通用优化 MLIR 多层IR · Dialect机制 TVM 自动调优 · 端到端 硬件执行层 GPU · NPU · TPU · 自定义加速器 编译器技术是连接模型框架与硬件执行的桥梁

这张图展示了编译器在整个AI芯片生态中的位置。模型框架在最上层,硬件在最下层,编译器在中间做翻译和优化。LLVM、MLIR、TVM是当前主流的三种编译器技术,各有侧重。

记住,投资AI芯片,一定要看编译器。硬件决定上限,编译器决定下限。没有好的编译器,再强的芯片也只是纸上谈兵。