AI 编译器 可视化实验室
用交互式 SVG 呈现计算图、图优化、TVM、MLIR、XLA、自动微分等 AI 编译核心技术。八个模块,纯原生实现。
计算图构建 · PyTorch → Graph
深度学习框架将模型代码追踪为有向无环图(DAG):算子为节点,张量为边。切换不同模型结构,点击节点查看输入输出张量形状与算子属性。
计算图 DAG
PyTorch 通过 torch.fx 或 TorchScript 将 nn.Module 追踪为符号图,节点为算子(Conv/MatMul/ReLU...),边为张量。编译器在此图上做类型推断、形状传播与优化。
图优化 · 常量折叠 / 算子融合 / DCE
左侧为优化前计算图,右侧为优化后。常量折叠在编译期求值常量子图;算子融合将 Conv+Bias+ReLU 合并为单个 kernel 减少访存;死代码消除删除无输出依赖的节点。
优化 Pass
勾选优化 pass 观察图变化。常量折叠:图中 const×2 在编译期算出,ConstMul 节点被常量替换。算子融合:Conv→Bias→ReLU 三个 kernel 合并为一个 ConvBiasReLU,减少 2 次中间张量读写。DCE:无消费者节点被删除。
TVM · AutoTVM / Ansor 自动调优
算子在不同硬件上需选择最优 tile 与循环展开参数。AutoTVM 用模板搜索,Ansor 用进化+代价模型自动生成调度。调整 tile 参数观察矩阵分块策略与调优曲线。
tile 参数搜索
矩阵乘 C[m,n]=A[m,k]×B[k,n] 按 (bm,bn,bk) 分块:外层遍历块,内层在块内做向量/张量化计算。Ansor 生成随机 schedule,用 XGBoost 代价模型预测性能,进化搜索选优。下方曲线显示调优过程中测量延迟的下降。
MLIR · 多层中间表示与 Pass 管道
MLIR 通过嵌套 dialect 表示不同抽象层:高层的 toy/linalg → affine → SCF → LLVM IR。每个 Pass 将上层 dialect 下降为下层。点击 Pass 观察逐层 lowering。
Dialect 下降
linalg.generic 表示数据并行计算;affine 将循环结构显式化便于多面体优化;scf 转为结构化控制流;最终 LLVM dialect 直通 LLVM 后端生成机器码。每层保留前层语义并增加低层细节。
XLA · HLO IR 与 GPU 融合
XLA 将前端算子编译为 HLO IR,再经融合与代码生成产出 GPU kernel。融合策略把 elementwise + reduce 等 producer-consumer 合并以减少显存带宽压力。切换融合级别观察 kernel 数量变化。
XLA 融合策略
HLO IR 是显式数据流图。XLA 三种融合:kLoop(同形状 elementwise 链)、kInput(reduce + elementwise)、kOutput(输出分裂)。融合后多个 HLO 编译为单个 GPU kernel,中间张量留在寄存器/共享内存。
自动微分 · 前向 / 反向模式
前向模式沿计算图传播切线,适合输入少输出多;反向模式(反向传播)先前向求值再反向求梯度,适合输入多输出少(loss 标量)。点击单步观察前向值与梯度在图上的传播。
反向模式
计算图:z = (x·y) + sin(x)。前向:t₁=x·y=6, t₂=sin(x)≈0.84, z=t₁+t₂≈6.84。反向:∂z/∂t₁=1, ∂z/∂t₂=1;∂z/∂x=∂z/∂t₁·y + ∂z/∂t₂·cos(x)=3+0.34=3.34;∂z/∂y=∂z/∂t₁·x=2。一次反向遍历得到所有输入梯度。
内存规划 · buffer 分配与复用
编译器为每个中间张量分配 buffer。朴素策略每个张量独立分配导致峰值高;基于活性分析的重叠着色策略让不重叠生命期的 buffer 共享内存。切换策略对比峰值内存。
活性分析与重叠着色
每个 buffer 有 [定义点, 最后使用点] 的生命期区间。若两区间不重叠则可共享同一内存槽(图着色)。朴素分配峰值=Σsize;复用分配峰值=max_t Σ(活跃 size),通常显著降低。模拟搜索/静态规划会进一步做尺寸对齐与碎片整理。
算子库 · cuDNN / MKL / TensorCore
编译器后端将算子映射到高度优化的库:cuDNN 处理 Conv,MKL 处理 CPU 线性代数,TensorCore 做 WMMA 矩阵乘。切换算子与输入配置,观察库选择与 kernel 调用路径。
库选择策略
编译器维护算子→库映射表:Conv 在 GPU 走 cuDNN (Winograd/Implicit GEMM),在 CPU 走 MKL-DNN;MatMul 当形状满足 m,n,k≥16 且对齐时走 TensorCore (WMMA),否则走 cuBLAS。autotuning 会在多个候选 kernel 间实测择优。