第二篇 · 框架与自动微分
你天天在用的 PyTorch,背后到底做了什么
⏳ 本章待补充
这一章会随你的学习进度补写。下面是它已经确定好的内容规划。
这一章要回答的问题
你天天在用的 PyTorch,背后到底做了什么?
看起来这章"离 Infra 很远",实际上它是你和硬件之间的那一层抽象。读懂它,你才会明白后面所有系统论文在对抗什么:动态图的灵活性,是用执行效率换来的;显存不够,是因为自动微分把中间结果全留着了。
前置知识
- 必须先读完 第一篇 · 性能与存储层次。这一章会用"搬运"的视角解释显存占用。
- 会写 PyTorch 训练循环(
loss.backward()/optimizer.step())。 - 理解链式法则。
计划覆盖的内容
| 小节 | 回答的问题 |
|---|---|
| 自动微分的三种模式 | 为什么反向传播的代价与输出维度成正比,而与参数量无关? |
| 动态图 vs 静态图 | define-by-run 换来了什么、丢失了什么? |
| 显存里到底放了什么 | 参数、梯度、优化器状态、激活值各占多少? |
| 重计算(rematerialization) | 用计算换显存,什么时候划算? |
| 动手实验 | 用 micrograd 手写一遍 autodiff;用 profiler 看调度开销 |
用到的第一篇的知识
- 1.4 节的"不必要的内存引用" → 理解激活值为什么是显存大户
- 1.5 节的存储层次对照 → 理解动态图的调度开销
- 全篇的搬运视角 → 理解训练显存四个占用者各自对应哪些优化
对应的论文(见论文清单)
PyTorch(NeurIPS 2019)、自动微分综述(JMLR 2018)、TensorFlow(OSDI 2016)、Dynamic Tensor Rematerialization(ICLR 2021),以及 micrograd / tinygrad 源码导读。
← 返回 首页 | 上一章:第一篇 · 性能与存储层次