PyTorch 学习笔记(14):PyTorch/LLVM 编译栈

缘起

做了7年GPU编译器,记录一下 Pytorch 端到端的技术栈, 记录一下查漏补缺.

完整编译链路

复制代码
Python 用户代码
   │
   ▼ PEP 523 字节码拦截
TorchDynamo (torch._dynamo)        ← 需要掌握:CPython 内部机制
   │
   ▼ FX Graph (torch 级算子)
AOT Autograd (torch._functorch)    ← 需要掌握:自动微分理论
   │
   ▼ FX Graph (ATen 级算子, decomposed)
Inductor (torch._inductor)         ← 需要掌握:编译器中端优化
   │
   ├──→ Triton codegen (GPU)       ← 需要掌握:Triton 语言 + GPU 架构
   │       │
   │       ▼ Triton IR → LLVM IR → PTX   ← 需要掌握:LLVM IR + GPU ISA
   │
   └──→ C++/OpenMP codegen (CPU)   ← 需要掌握:向量化 + OpenMP
           │
           ▼ GCC/Clang 编译 → .so

分层学习路线图

第一层:编译器基础理论(必修)

知识点 为什么需要 推荐资源
编译原理(前端/中端/后端) 理解 Pass 管线、IR 设计 龙书 Ch1-8;LLVM Tutorial
SSA(静态单赋值)形式 FX Graph 和 LLVM IR 的核心表示 龙书 Ch9;SSA Book
数据流分析 活跃变量分析、可达定义------理解 Inductor 调度 龙书 Ch9
循环优化(tiling/fusion/unrolling) Inductor 的 kernel fusion 核心 Muchnick Ch14-15
寄存器分配与指令调度 理解 LLVM 后端做了什么 LLVM Developer Guide

第二层:LLVM 体系(核心)

知识点 对应 PyTorch 环节 学习方式
LLVM IR 语法与语义 Triton 编译输出的中间表示 llc, opt 工具实操
LLVM Pass 框架(New/Legacy PM) Triton 的优化 pipeline 写一个自定义 Pass
LLVM 后端(SelectionDAG → MachineIR → MCInst) PTX/AMDGPU 代码生成 LLVM Backend Tutorial
NVPTX 后端 Triton → PTX 的最终转换 LLVM 源码 lib/Target/NVPTX/
AMDGPU 后端 ROCm 路径 .ll → .hsaco ROCm 文档
MLIR(Multi-Level IR) Triton 正在迁移到 MLIR Dialect MLIR Tutorial + Triton 源码

第三层:Triton 编译器(关键桥梁)

Triton 是连接 PyTorch 和 LLVM 的桥梁,必须深入掌握

复制代码
Triton Python DSL
    │
    ▼ AST → Triton IR (TTIR)         ← Triton 前端
    │
    ▼ Triton GPU IR (TTGIR)          ← GPU 特化(shared memory, warp 调度)
    │
    ▼ LLVM IR                        ← 通过 MLIR 的 LLVM Dialect lowering
    │
    ▼ PTX / AMDGPU Assembly          ← LLVM 后端

需要学习的 Triton 知识:

  • Triton 编程模型tl.load, tl.store, tl.dot, block-level 并行
  • Triton Dialect(MLIR):TTIR → TTGIR 的 lowering passes
  • Auto-tuning :PyTorch Inductor 如何选择 Triton kernel 的 num_warps, num_stages, BLOCK_M/N/K
  • 源码仓库github.com/triton-lang/triton(尤其 python/triton/compiler/lib/

第四层:PyTorch 编译栈各组件

组件 需要掌握的核心机制 关键源文件 快速链接
TorchDynamo CPython PEP 523 帧求值钩子;符号执行;Graph Break 机制;Guard 生成 symbolic_convert.py, eval_frame.py
FX Graph Node DAG 表示;Proxy 追踪;Graph 变换(subgraph rewriting) graph.py, proxy.py
AOT Autograd make_fx 追踪;前向/反向图联合追踪;min-cut 分区算法 aot_autograd.py 博客链接
Decompositions ATen 算子分解表;core_aten_decompositions decompositions.py 博客链接
Inductor Lowering ATen → Inductor IR 映射 lowering.py 博客链接
Inductor Scheduler Kernel Fusion 策略;内存规划 scheduler.py 博客链接
Triton Codegen FX Node → Triton Python 代码生成 triton.py
C++ Codegen FX Node → C++/OpenMP 向量化代码 cpp.py
FakeTensor 元数据传播;符号形状(SymInt) fake_tensor.py

第五层:GPU 架构与并行计算

知识点 重要性
CUDA 编程模型(Thread/Warp/Block/Grid) 理解 Triton 的 block-level 抽象
GPU 内存层次(Registers → Shared Memory → L2 → HBM) 理解 tiling 和数据复用策略
Tensor Core / Matrix Core 理解 CUTLASS 和 Triton 的 tl.dot
PTX ISA 阅读 Triton 最终产物
Warp Scheduling & Occupancy 性能调优
NVLink/NVSwitch 拓扑 理解 NCCL 通信优化

第六层:CPU 编译与向量化

知识点 对应 PyTorch 环节
SIMD 指令集(SSE/AVX2/AVX512/NEON/SVE) Inductor C++ codegen 输出、SLEEF 调用
自动向量化 Clang/GCC 的 -O2 -march=native
OpenMP 并行化 Inductor 的 #pragma omp parallel for
Cache-oblivious 算法 理解 tiling 的性能收益

推荐学习路径

复制代码
阶段1(1-2月): 编译原理 + LLVM IR 基础
    → 龙书前8章 + LLVM Kaleidoscope Tutorial
    → 能读写 LLVM IR,用 opt/llc 做实验

阶段2(1-2月): CUDA + Triton
    → CUDA C Programming Guide
    → Triton Tutorial (triton-lang.org)
    → 手写 matmul/softmax Triton kernel

阶段3(1-2月): PyTorch 编译栈
    → torch.compile 用户文档
    → 读 torch/_dynamo/CLAUDE.md(架构总览)
    → 用 TORCH_COMPILE_DEBUG=1 看完整编译产物
    → 单步调试 torch.compile 全流程

阶段4(1-2月): MLIR + Triton 编译器内部
    → MLIR Tutorial + Triton 源码
    → 理解 TTIR → TTGIR → LLVM Dialect 管线
    → 尝试添加一个 Triton optimization pass

阶段5(持续): 深入专项
    → Flash Attention 论文 + 源码
    → Inductor 的 Fusion 策略源码
    → AOTInductor 部署流程
    → 给 PyTorch/Triton 提 PR

补充:容易忽略但重要的知识

  1. CPython 内部机制 ------Dynamo 直接操作字节码,需要理解 dis 模块、frame 对象、co_code
  2. 符号形状推导(Symbolic Shapes) ------SymInt/SymFloattorch.fx.experimental.symbolic_shapes,动态 shape 编译的核心难点
  3. Polyhedral 编译理论------理解 Halide/TVM 的调度语言思想,有助于理解 Inductor 的 tiling 决策
  4. MLIR 正在成为新标准------Triton 已基于 MLIR 重写,StableHLO/TOSA/Linalg 等 Dialect 是未来趋势
相关推荐
Hammer_Hans2 小时前
DFT笔记36
笔记
C^h2 小时前
rt thread中的can通信 学习记录
学习
ByteCraze2 小时前
大四双非春招学习记录-K 个一组反转链表
数据结构·学习·链表
奶人五毛拉人一块3 小时前
模板与vector的学习
数据结构·学习·迭代器·vector·模板
一定要AK3 小时前
JVM 全体系深度解析笔记
java·jvm·笔记
EnglishJun3 小时前
ARM嵌入式学习(十八)--- Linux的内核编译和启动
linux·运维·学习
chushiyunen3 小时前
milvus笔记、常用表结构
笔记·算法·milvus
星幻元宇VR3 小时前
VR旋转蛋椅:沉浸式安全科普新体验
科技·学习·安全·vr·虚拟现实
YunQuality3 小时前
六西格玛黑带三个月拿证经验分享
笔记·职场和发展·职场·学习方法