本页章节
EXACT MECHANICS / ACTIVATION LIFETIME
激活重算:哪些值保存,哪些值重新生成
反向需要前向中的部分值。保存它们会占用内存,丢弃后重新前向会增加计算。沿一条六层链追踪创建、保留、重算和释放,再核对最终梯度。
反向为什么还要用前向结果?
保存全部激活时,反向从最后一层往前,用过的中间值即可释放。分段重算保存边界,先从边界重新执行该段前向,得到内部值,再反传和释放该段。真实自动微分框架保存哪些值取决于算子实现。
每个时刻,哪些激活仍然存活?
六层 tanh 链的逻辑激活账本
不含权重、梯度、临时 workspace 和框架开销h0=0.8,w=[0.9,1.1,0.8,1.2,0.7,1.05]。本例重算模式会完整重跑每一段;实际框架可能提前停止不需要的重算。
Loss:;与全部保存的梯度最大差:
| 事件 | 阶段 | 存活激活 | 数量 | 已执行前向层数 |
|---|
账本统计唯一逻辑激活 ID。重算边界与已有相同边界值合并记一个 ID;未计额外物理副本。数值计算和逻辑内存记录分开,不是浏览器或 GPU 实际内存测量。
什么时候重算能得到同一条反向路径?
输入与参数一致
重算必须使用对应前向时的输入和权重。若参数、全局状态或分支条件在中间改变,重新得到的激活可能属于另一计算图。
随机操作一致
dropout 等操作需保持随机状态约定。框架可以保存并恢复 RNG,但设备迁移、外部随机源和关闭状态保留都需单独检查。
副作用不能无意重复
函数中的计数、缓存写入、统计更新或外部操作可能在重算时再次发生。适合 checkpoint 的区域应有可验证的重执行语义。
比较输出、梯度和更新
固定同一输入与状态,对照前向 loss、每个参数梯度和一次优化器更新。数值容差依精度、实现和规约顺序确定。
分段更细会保留更多边界,分段更粗会在重算时同时保留更多内部值,峰值不必随段长单调变化。实际内存优化还要看张量大小、存活区间、工作空间和通信缓冲;省下激活后,能否扩大 microbatch 以及端到端是否变快,需要测量。
放不下全局负例池,怎样分块回传同一个目标?
四个 query 和四个 document 经过同一个小编码器:三维输入 → 四维 tanh → dropout → 二维表示。全局损失使用 4×4 点积候选矩阵,正例在对角线,温度为 1。先无图编码并保存表示,再对表示计算全局梯度,最后重算各块编码器。
编码 → 全局表示梯度 → 重算参数梯度
固定小网络 · 确定的伪随机算法| 事件 | 阶段 | 样本 | 编码前 RNG 状态 |
|---|
当前参数梯度与保留计算图的参考
| 矩阵行 | 当前累计梯度 | 参考梯度 |
|---|
输入、权重和随机数约定
query = [[.2,.5,-.1],[.6,-.3,.4],[-.2,.8,.7],[.3,.1,-.5]]
document = [[.1,.7,-.2],[.3,-.1,.6],[-.3,.5,.9],[.7,.1,-.4]]
W1 = [[.3,-.2,.5,.1],[-.4,.6,.2,-.3],[.1,.3,-.5,.4]]
W2 = [[.5,-.2],[.1,.6],[-.4,.3],[.2,.5]]
seed = 31
state = (1664525 * state + 1013904223) modulo 2^32
u = state / 2^32按 query 块、document 块的顺序生成随机数,每块按行读取。u≥dropout 时乘 1/(1−dropout),否则置零;dropout=0 时不消耗随机数。页面手工算法与框架默认 RNG 不同;独立验证另外运行真实 PyTorch dropout。
全局目标保留了,哪些状态仍需固定?
比较同一前向轨迹
参考采用相同分块、样本顺序与随机状态,但保留第一遍计算图。不能直接拿不同 batch 形状下的随机 mask 要求逐值一致。关闭随机性后再检查跨块大小的等价关系。
重算不推进训练状态
第一遍编码结束的全局 RNG 应在重算后恢复,防止改变下一步。若模块更新 BatchNorm 统计、缓存或外部状态,还需处理重复副作用;本例没有这些模块。
全局候选矩阵仍有成本
表示和表示梯度随样本数线性增长,直接物化的 query–document 分数矩阵随两侧样本数相乘增长。减少编码器计算图不等于消除全局损失的内存。
隐藏量账本只计声明对象
本例对每行计 tanh 输出、dropout mask 和乘后隐藏值三份四维张量。输入、权重、反向临时量、物理副本以及界面保存的对照快照另计;真实框架保存量见实测。
适用范围与一手资料
六层链使用逻辑激活账本。梯度缓存另用 4 对样本、3→4→2 编码器、tanh 与明确伪随机 dropout;与相同分块轨迹的保留图参考比较。Python 另验真实 dropout。隐藏量计数不包含全部物理分配。
公式与机制的原始依据 · 4 项
- PyTorch · torch.utils.checkpoint激活重算、RNG 保留、重入/非重入与重执行语义
- Scaling Deep Contrastive Learning Batch Size under Memory Limited Setup (2021)全局表示梯度与分块编码器 VJP;正文于 2026-10-28 核对
- PyTorch 2.9 · Autograd mechanics本项目框架对照固定 PyTorch 2.9.0;冻结、计算图与 no-grad 的语义,2026-10-27 核对
- PyTorch · Numerical accuracy浮点精度、非结合性、矩阵运算累加与非有限值