MLIR
MLIR(Multi-Level Intermediate Representation,多级中间表示) 是由谷歌主导并入驻 LLVM 社区的新一代编译器基础设施和架构框架。
如果把传统的 LLVM 比作一条“标准现代铁路线”,那么 MLIR 就是一套允许开发者自由组装、任意嵌套不同轨距和车厢的“模块化多级立体轨道交通系统”。它是现代 AI 编译器大一统(如 PyTorch 2.0+ 编译生态、Triton 等)的核心工程底座。
为了让你在架构层面彻底吃透它,我们直接切入它的诞生背景、核心魔术、以及在大模型底层的物理流向:
一、 为什么在 AI 时代,LLVM 不够用了?(MLIR 解决的痛点)
在传统 LLVM 架构中,唯一的通用核心是 LLVM IR。它是一种非常低级的、接近汇编语言的“标量级中间表示”(只认识最基础的指针、标量加减、条件跳转)。
当 AI 大模型爆发后,高级算法中充满了海量的高阶图语义(例如:多维张量 Tensor、卷积 Convolution、矩阵乘法 GEMM、或者 Transformer 的多头注意力机制)。
- 传统做法的灾难:如果你直接用传统的编译器前端,强行把一个 $1024 \times 1024$ 的高层多维矩阵乘法操作(
Tensor MM),一股脑打碎、降级成最低级的 LLVM IR 标量指针加减代码。 - 高阶信息丢失:在这个简单暴力的打碎过程中,原有的多维矩阵形状、循环的并行意图、片上 SRAM 分块(Tile)的物理内存布局等高阶信息会彻底丢失。
- 优化瘫痪:由于低层的 LLVM 优化器根本看不懂这堆零碎的标量指针代码原本是个“矩阵乘法”,它就没办法在底层为你自动做算子融合(Kernel Fusion)、多线程 Warp 并行编排、或者硬件异步拷贝流水线排布。
为了在编译期间完美保留并逐层优化这些 AI 高阶语义,MLIR 应运而生。
二、 MLIR 的核心魔术:方言(Dialect)系统
MLIR 抛弃了 LLVM 强求“全天下统一用同一种低级 IR”的死板设定。它允许开发者在同一个框架下,针对不同的抽象层级,自由定义最适合该层级规则的语法、操作和类型,这些规则在 MLIR 里被称为 Dialect(方言)。
在 MLIR 生态中,代码的降级(Lowering)不再是一步到位,而是像剥洋葱一样,在不同方言之间进行精密、平滑的层层递降和变换优化:
- 顶层方言(高层图层,如 StableHLO、TOSA、Triton IR):
- 它认识什么:只认识大模型的图结构。它知道什么是 Tensor、什么是 $Q, K, V$ 矩阵、什么是计算图。
- 在干什么:在这一层进行高层的图优化,比如死代码消除、算子代数化简(把相连的繁琐公式合成一个)。
- 中层方言(算子与数据分块层,如 Linalg Dialect、Vector Dialect):
- 它认识什么:它把高层张量降维,开始理解什么是 Tile(分块计算)、什么是分块循环。
- 在干什么:专门优化数据怎么搬运、硬件如何并行。在这一层,AI 编译器会精细安排线程束(Warp)之间的向量化读写,物理消灭 Bank 冲突。
- 底层方言(硬件映射层,如 LLVM Dialect、NVVM/ROCDL Dialect):
- 它认识什么:完全对齐英伟达等显卡的底层硬件物理指令集(如 Tensor Core 指令、寄存器分配、共享内存异步搬运)。
- 在干什么:做最后临门一脚的硬件指令映射。
三、 在大模型 Infra 中,MLIR 是怎么在后台干活的?
以你编写的 OpenAI Triton 算子 为例,你用 Python 写好一段块级编程代码,丢给系统。MLIR 在底层为你拉起了一场无缝的“方言降级接力赛”:
[Triton Python 源码]
│
▼ (解析成高层方言)
【 Triton Dialect 】 ───── 编译器大喊:“我看到了一个 $128 \times 64$ 的分块矩阵乘法!”
│
▼ (第一轮降级与优化 Lowering)
【 Linalg / Vector 】 ──── 编译器开始排布:“利用分块算法,在时间轴上编排异步数据搬运流水线。”
│
▼ (第二轮降级与优化 Lowering)
【 NVVM / LLVM IR 】 ──── 编译器精准翻译:“把这段逻辑映射到英伟达 Hopper 架构的 TMA 硬件指令上。”
│
▼ (交付底座)
[ LLVM 编译后端 ] ────── 接管最低层的 LLVM IR,进行最后的机器级寄存器打包
│
▼
[PTX 汇编 / 二进制机器码] ──> 直接注入显卡显存,引爆全满血硬件算力
💡 总结一句话
LLVM 是精通各种特定芯片的底层通用翻译官,而 MLIR 则是专门为了伺候大模型算子,允许我们在编译期间给代码“层层抽丝剥茧、级级精准调优”的多层级编译器高速公路网。
有了 MLIR,算子开发和多芯片异构适配(如适配英伟达 GPU、谷歌 TPU、华为昇腾)的工作量迎来了断崖式的锐减。这也是为什么如今不管是 PyTorch 的 torch.compile、英伟达的最新算子链,还是各大厂的自研 AI 编译器,都无一例外全面拥抱 MLIR 的根本原因。
