深度学习编译器 — 术语表
从 PyTorch 到底层硬件的编译栈术语。随着课程推进持续更新——只有你真正理解了一个概念,它才会被收进这里。
编译流程
torch.compile
PyTorch 2.0+ 的 JIT 编译入口,通过 model = torch.compile(model) 调用。底层串联 Dynamo(图捕获)+ Inductor(图编译和 kernel 生成)。
Avoid: PyTorch JIT(指旧版 torch.jit.script,已过时)
Dynamo
torch.compile 的图捕获组件。通过劫持 Python 字节码执行帧(frame evaluation hook)拦截 PyTorch 操作,记录成 FX Graph。
Avoid: tracer, symbolic tracer(指旧版 fx.symbolic_trace)
FX Graph
Dynamo 输出的中间表示——一个算子级的有向无环图(DAG),每个节点代表一个 PyTorch 操作。是编译栈的第一层 IR。
Inductor
torch.compile 的默认编译器 backend,由 Meta PyTorch 团队开发,随 PyTorch 2.0(2023 年 3 月)发布。接收 FX Graph,做算子融合、布局选择、分块决策等图级优化,使用自研 Loop IR 做循环级分析,然后生成 Triton(GPU)或 C++/OpenMP(CPU)kernel 代码。
命名:来自电子工程中电感器(inductor)的隐喻——Dynamo(发电机)产电(捕获图),Inductor(电感器)储存和转换能量(编译优化),暗示"电感耦合"算子融合的设计理念。
AOTAutograd
torch.compile 训练栈的关键组件,夹在 Dynamo 和 Compiler Backend 之间。在首次 loss.backward() 时触发:用 eager mode 跑一遍 forward → 读取 autograd tape 上的 backward 记录 → trace 出 backward FX Graph → 与 forward 图拼接为"联合图"→ 发给 Compiler Backend(如 Inductor)统一编译。是 TVM/TensorRT 不具备的训练编译能力。
Avoid: "自动微分引擎"(不准确——AOTAutograd 不做微分的数学计算,它做的是图层面的 trace 和拼接)
Triton
OpenAI 开源的 GPU kernel 语言和编译器。使用 block-level 编程模型(比 CUDA 的 thread-level 更高层),自动处理内存合并、共享内存分配和分块。torch.compile 的默认 GPU backend。
Autograd 相关
Autograd Engine
PyTorch 的反向传播引擎,实现反向模式自动微分。前向执行时记录每个操作的输入和反向公式到 tape,backward 时逆序遍历 tape 应用链式法则。TVM 和 TensorRT 没有这个模块,因此不能用于训练。
Autograd Tape
PyTorch autograd 的核心数据结构——前向传播时每个操作被顺序记录到一条链上(记录:操作类型、输入张量、backward 函数),反向传播时逆序回放。名称来自磁带机的比喻:前向 = 录音(record),反向 = 倒带重放(rewind & replay)。Tape 是运行时动态构建的(define-by-run),不是提前声明静态图。执行完 backward() 后 tape 被释放。
Avoid: 静态计算图(tape 是运行时数据结构,每次 forward 重新构建)
导数 (Derivative) / 梯度 (Gradient)
导数描述单变量标量函数的变化率:f'(x) = df/dx,是一个标量。梯度是多变量函数所有偏导数组成的向量:∇f = [∂f/∂x₁, ∂f/∂x₂, ...],指向函数增长最快的方向。深度学习里说的"梯度"几乎总是指后者——loss 对每个模型参数的偏导数。
Avoid: 混淆两个术语(导数 ≠ 梯度:导数针对单变量,梯度针对多变量)
IR 相关
Intermediate Representation (IR)
编译器中用于表示程序的中间格式,不是最终机器码也不是源代码。在 ML 编译栈中 IR 是多层堆叠的:FX Graph → Loop IR → Triton IR → PTX → SASS,每层抽象不同。
Avoid: 不要把 IR 当成某一个格式或某一个工具——它是一个类别,有多个层次。
PTX (Parallel Thread Execution)
NVIDIA GPU 的虚拟指令集(中间汇编),介于 Triton/CUDA 代码和具体 GPU 架构的机器码之间。由 NVIDIA 驱动进一步编译成 SASS。
Avoid: GPU 汇编(严格说是中间层,不是最终机器码)
SASS (Shader Assembly)
NVIDIA GPU 的最终机器码,针对具体 GPU 架构(SM75、SM80、SM90 等)生成——这才是 GPU 真正执行的东西。
编译器和工具链
Apache TVM
开源的深度学习编译器堆栈。核心是 Relay/Relax IR(图级)+ TIR(张量级 IR)+ auto-tuning 框架。主要用于推理部署,覆盖多种硬件。不含 autograd 引擎,不能做训练。理论上可接收 AOTAutograd 产出的联合图做编译,但实践上有五个死结(算子覆盖不全、动态 shape 差、AOTAutograd 不是稳定 API、in-place optimizer 操作、无人维护集成)。
Avoid: 训练加速工具(不准确——它是推理编译器)
Relay (TVM)
TVM 的图级 IR(旧版),正在被 Relax 取代。用于表达完整的 ML 模型计算图。
Relax (TVM)
TVM 的新一代图级 IR,取代 Relay。支持动态 shape、控制流,并与 torch.export 集成。推理部署为其主要场景。
TensorRT
NVIDIA 的深度学习推理优化引擎。使用手写优化的 CUDA kernel 库(cuDNN、cuBLAS),在 NVIDIA GPU 上达到推理极致。不碰训练。
Avoid: 通用编译器(不是——它是一套手写库 + 图优化组合拳)
核心概念
Graph Break
Dynamo 在捕获计算图时遇到无法编译的代码(不支持的操作、data-dependent 控制流等),图在此处分裂成多个子图的现象。断点多 → 编译收益减少。
Operator Fusion
将多个相邻的算子合并为一个 kernel,避免中间结果在显存中写回再读取。是 torch.compile 最大的性能收益来源。
Avoid: Kernel merge(不够精确——Triton 的工作方式不同于简单的 merge)