PyTorch 训练框架内核深度解析

贯穿 PyTorch 训练栈:从 Tensor 内存布局一路走到 Inductor 的 Triton 代码生成。

本专栏基于 PyTorch v2.11(torch.compile 编译栈已迭代三年、FSDP-2 早已从 _composable 毕业进 torch.distributed.fsdp、PT2E 量化流程已迁出主仓的版本)源码,系统剖析当代深度学习训练框架的设计与实现。从一个 tensor.add(other) 的完整旅程出发,由外到内、层层下潜:经过 Python 前端、Dispatcher 多分派、ATen 算子注册、c10 核心抽象、CUDA Caching Allocator、Autograd 反向图、TorchDynamo 帧拦截、AOTAutograd 函数化、Inductor Triton 代码生成、DDP 环形 AllReduce、FSDP ZeRO-3 分片,最终回到 NCCL 通信原语 —— 把每一个架构决策背后的"为什么"翻出来。

本专栏规模

项 数据
章节 24(前言 + 23 正文)
字数 ~30 万(中文字符 + 英文单词,含代码块;其中中文字符约 21 万)
Mermaid 架构 / 时序图 121 张
真实源码引用 数百处带 file:line 标注,路径与符号名逐个对齐 v2.11.0 源码
Section 编号 943 条,跨章 §X.Y.Z cross-reference 100% 命中

每章 6500+ 中文字 + 至少 4 张 mermaid 图 + 多段真实源码摘录,覆盖 v2.11 源码的核心机制(不是 API 教程、不是入门)。

读完你能做到什么

  1. 完整跟完一次 tensor.add(other)。 从 Python 前端到 Dispatcher 多分派、ATen 算子注册、c10 核心抽象,每一跳发生了什么(第1章 架构、第3章 c10、第5章 Dispatcher、第6章 ATen codegen)。
  2. 解释显存去哪了。 Tensor 与 Storage 的分离、CUDA Caching Allocator 的分配策略与碎片来源——这是"明明还有显存却 OOM"的答案所在(第2章 Tensor 与 Storage、第4章 CUDA 缓存分配器)。
  3. 说清反向图是怎么建起来又怎么跑的。 autograd 的设计、引擎的执行方式、与前向的对应关系(第7章 autograd 设计、第8章 autograd 引擎)。
  4. 读懂 torch.compile 的三段式。 TorchDynamo 怎么拦截字节码帧、AOTAutograd 的函数化、Inductor 生成 Triton 代码,以及端到端串起来的完整路径(第12章 Dynamo、第13章 AOTAutograd、第14章 Inductor、第15章 端到端)。
  5. 理解分布式训练的两条路。 ProcessGroup 与通信原语、DDP 的环形 AllReduce、FSDP 的 ZeRO-3 分片(第16章 ProcessGroup、第17章 DDP、第18章 FSDP)。
  6. 写自定义算子并做性能归因。 自定义算子的注册路径、Profiler 怎么读、量化与混合精度(第22章 自定义算子、第21章 Profiler、第20章 量化与 AMP)。
  7. 补齐工程侧。 nn.Module 的机制、优化器、DataLoader、序列化(第9章 nn.Module、第10章 优化器、第11章 DataLoader、第19章 序列化、第23章 设计哲学)。

适合谁读

与本系列其他专栏的关系

关联专栏 关系
vLLM 推理内核深度解析 推理侧;本专栏是训练侧 —— 两者共享 ATen / CUDA Allocator / Dispatcher,构成"训练 + 推理"双子卷
Tokio 源码深度解析 都是"用户态调度器 + 多线程 worker"模型,autograd Engine 章节会做对照
Rust 编译器与运行时揭秘 TorchDynamo 的 guards / TorchInductor 的 IR-Lowering 与编译器后端有同源思想
Serde 元编程 ATen 的算子代码生成(YAML → C++ 注册)和 Serde 的派生宏哲学相通

源码版本

本专栏的源码引用以 PyTorch v2.11.0 为准(tag 所指提交的日期为 2026-03-20,GitHub Release 于 2026-03-23 发布):

仓库 版本 Git Commit
pytorch/pytorch v2.11.0 70d99e9

第 20 章 §20.25、§20.33 谈量化格式落地时会去 vLLM 侧查注册名,那一处的路径依据下表(已在本机 checkout 核对):

对比对象 版本 用在
vllm-project/vllm v0.8.5 §20.25、§20.33 的 vllm/model_executor/layers/quantization/__init__.py
git clone https://github.com/pytorch/pytorch.git
cd pytorch && git checkout v2.11.0

选 v2.11 而不是更早的 v2.0 / v2.4,是因为它是几条脉络汇合后的形态:torch.compile 自 2.0 起已经过三年打磨;FSDP-2(fully_shard)自 v2.6 起从 torch.distributed.fsdp 公开导出,官方文档建议 FSDP-1 用户迁移过去;主仓 torch.ao.quantization 的 eager / FX 入口已标记 deprecated,PT2E 流程在 v2.11 从主仓删除、迁往 torchao;Distributed Checkpoint(torch.distributed.checkpoint)是官方的分布式分片存档方案。正文标注的文件路径与函数名是稳定锚点,行号会随补丁漂移。

目录

开篇

第一篇 全景

第二篇 张量层与运行时

第三篇 Dispatcher 与算子

第四篇 Autograd 自动求导

第五篇 nn 与训练栈

第六篇 torch.compile 编译器栈

第七篇 分布式训练

第八篇 工程与生态

版权声明

本专栏内容为 杨艺韬 版权所有,保留一切权利。未经书面许可,不得全文或大段转载、改编、翻译,或用于任何商业用途(含以本专栏内容训练模型、生成衍生课程或商品)。

欢迎分享本专栏的链接。引用少量内容用于评论、教学或研究时,请署名 杨艺韬 并附上原文链接。