Back to blog

Mirage: A Multi-Level Superoptimizer for Tensor Programs

多层级张量程序超级优化器,通过统一搜索空间生成高效注意力内核

Mirage: A Multi-Level Superoptimizer for Tensor Programs

一、论文概述

项目内容
标题Mirage: A Multi-Level Superoptimizer for Tensor Programs
作者Mengdi Wu, Xinhao Cheng, Shengyu Liu, Chunan Shi, Jianan Ji, Man Kit Ao, Praveen Velliengiri, Xupeng Miao, Oded Padon, Zhihao Jia
机构Carnegie Mellon University, Peking University, Pennsylvania State University, Purdue University, Weizmann Institute of Science
论文arXiv:2405.05751
代码GitHub: mirage-project/mirage
发布2024-05-09 (v1), 2025-06-06 (v3)
领域Machine Learning (cs.LG), Programming Languages (cs.PL)

二、核心思想

问题定义

在GPU上实现DNN的高性能执行对现代ML应用至关重要。当前的DNN框架使用张量程序(有向无环图)来指定计算,但现有优化方法存在局限:

  1. 单层级优化:现有编译器(如TVM、Triton)主要在单一抽象层级优化,无法发现跨层级的优化机会
  2. 搜索空间巨大:张量程序的优化空间呈指数级增长
  3. 正确性保证:优化后的程序必须与原始程序等价

解决方案概述

Mirage是首个多层级超级优化器,核心创新包括:

  1. μGraphs(μ图):统一表示张量程序在kernel、thread block、thread三个层级的计算
  2. 抽象剪枝:基于抽象表达式的搜索空间剪枝技术,提供最优性保证
  3. 概率等价验证:具有强理论保证的随机等价性检查

三、技术架构

整体框架图

Mirage概述

Mirage的工作流程:

阶段名称说明
输入计算图用户提供的DNN计算图
生成μGraph Generator生成候选μGraph
剪枝Abstract Pruning基于抽象表达式剪枝
验证Equivalence Checking概率等价性验证
输出最优μGraph高性能CUDA代码

核心概念:μGraphs

GPU层级

μGraphs统一表示GPU计算层级:

层级说明对应GPU层级
Kernel Graph内核级计算图GPU Kernel
Block Graph线程块级计算图Thread Block
Thread Graph线程级计算图Thread

关键洞察: 通过在三个层级统一表示,Mirage可以发现组合代数变换、调度变换和新内核生成的优化。

μGraph示例

μGraph示例

以RMSNorm和MatMul为例:

  • 现有系统:分离的两个kernel
  • Mirage发现:融合的μGraph,消除中间tensor物化

核心公式

抽象表达式 (Abstract Expressions):

每个tensor的抽象表达式描述其计算语义:

E(O)=sum(k,div(mul(E(I1),E(I2)),E(I3)))E(O) = \mathsf{sum}(k, \mathsf{div}(\mathsf{mul}(E(I_1), E(I_2)), E(I_3)))

抽象剪枝 (Abstract Pruning):

给定两个抽象表达式 E1E_1 和 E2E_2,检查 E1E_1 是否是 E2E_2 的子表达式:

subexpr(E1,E2)=?true\mathsf{subexpr}(E_1, E_2) \stackrel{?}{=} \text{true}

通过SMT求解器验证,如果 subexpr(E1,E2)\mathsf{subexpr}(E_1, E_2) 为假,则剪枝该搜索分支。

等价性验证 (Equivalence Verification):

使用随机测试在有限域上验证等价性:

∀x∈Zp:f(x)≡g(x)(modp)\forall x \in \mathbb{Z}_p: f(x) \equiv g(x) \pmod{p}

选择素数 pp 和 qq(q∣p−1q | p-1),在有限域 Zp\mathbb{Z}_p 和 Zq\mathbb{Z}_q 上进行测试。

μGraph生成算法

μGraph生成器

Algorithm 1: Mirage’s hybrid μGraph generation algorithm

输入: 计算图 G
输出: 最优 μGraph

1. 将 G 转换为 kernel graph
2. 对每个 kernel graph:
   a. 生成 thread block graph 候选
   b. 对每个 thread block graph:
      i. 生成 thread graph 候选
      ii. 使用抽象表达式剪枝
      iii. 验证等价性
3. 返回最优 μGraph

关键优化:

  • 多线程并行搜索:并行探索搜索空间
  • 抽象表达式剪枝:显著减少搜索空间
  • 增量式生成:逐步细化μGraph

四、核心创新

创新点说明理论/实验依据
μGraphs统一表示在kernel、block、thread三层统一表示发现跨层级优化机会
抽象表达式剪枝基于SMT的搜索空间剪枝提供最优性保证
概率等价验证有限域随机测试强理论保证(错误概率可调)
混合生成算法自顶向下生成 + 自底向上细化高效探索搜索空间

五、实验结果

性能比较

性能比较

6个基准测试在A100和H100上的结果:

基准测试Mirage vs 最佳基线说明
RMSNorm + MatMul3.3×跨层级融合
QKNorm + Attention2.4×注意力优化
LoRA2.1×低秩适配优化
GatedMLP1.8×门控MLP优化
其他DNN1.2-2.0×广泛适用

端到端推理性能

端到端性能

PyTorch vs PyTorch + Mirage生成的kernel:

  • 在广泛使用和高度优化的DNN上仍能显著提升性能
  • 即使是成熟的模型(如Transformer)也能获得改进

消融实验

技术搜索时间影响
多线程并行减少3-5×
抽象表达式剪枝减少10-100×
增量式生成减少2-3×

六、相关工作

方向代表工作Mirage的优势
DNN编译器TVM, Triton跨层级优化,发现新kernel
超级优化Souper, STOKE专门针对张量程序
调度搜索AutoTVM, Ansor搜索空间更高效
手写kernelcuBLAS, cuDNN自动发现,无需人工设计

七、总结

核心贡献

  1. 首个多层级张量超级优化器:通过μGraphs统一表示kernel、block、thread三层
  2. 抽象剪枝技术:基于抽象表达式减少搜索空间,提供最优性保证
  3. 概率等价验证:具有强理论保证的随机等价性检查
  4. 显著性能提升:在广泛使用的DNN上比现有系统快1.2-3.3×

技术影响

  • 自动化优化:无需人工设计kernel,自动发现跨层级优化
  • 理论贡献:抽象剪枝和概率验证的理论框架
  • 开源实现:公开可用,可集成到现有DNN框架

局限性

  • 搜索时间可能较长(对于复杂程序)
  • 当前主要支持前馈网络,循环网络支持有限
  • 需要GPU硬件特定的优化

八、参考资源