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的流程大概是这样的:
- 把模型导入成计算图
- 用AutoTVM自动搜索最优的调度方案
- 生成目标代码
我在项目中遇到过一件事:用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芯片生态中的位置。模型框架在最上层,硬件在最下层,编译器在中间做翻译和优化。LLVM、MLIR、TVM是当前主流的三种编译器技术,各有侧重。
记住,投资AI芯片,一定要看编译器。硬件决定上限,编译器决定下限。没有好的编译器,再强的芯片也只是纸上谈兵。