checkpoint_sequential和checkpoint区别?激活检查点的checkpoint_sequential和checkpoint区别?
前向时只保存部分层的激活(如每层或每隔几层存一次),其余在 backward 时按需重算,用算力换显存,使更深的网络或更大 batch 能跑起来。
checkpoint_sequential(如 torch.utils.checkpoint.checkpoint_sequential):把 一个 sequence 的 submodule 列表 当作一整段,只在这段的首或尾存一次 checkpoint,中间全部重算。适用:顺序的若干层(如 ResNet 的 stage、Transformer 的若干连续层),接口简单,但粒度较粗,重算范围大。
checkpoint(如 torch.utils.checkpoint.checkpoint):对 单个 可调用的 function 或子模块做 checkpoint;前向时只记输入,不存中间激活,backward 时用同一输入重新执行 function 得到激活再算梯度。粒度细,可只对某一层或某一 block 用,非顺序 或自定义 block 也可用;需保证 function 无副作用、确定性(否则重算结果可能不一致)。
| 返回模块 | 返回总览 |