AI Infra 自学教材

第二篇 · 框架与自动微分

你天天在用的 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 源码导读。


← 返回 首页 | 上一章:第一篇 · 性能与存储层次

On this page