ai-infra-interview-305

第 78 题:激活检查点的checkpoint_sequentialcheckpoint区别?

题目

激活检查点的checkpoint_sequentialcheckpoint区别?


完整讲解

一、Activation checkpointing 的目的

前向时只保存部分层的激活(如每层或每隔几层存一次),其余在 backward 时按需重算,用算力换显存,使更深的网络或更大 batch 能跑起来。

二、checkpoint_sequential

checkpoint_sequential(如 torch.utils.checkpoint.checkpoint_sequential):把 一个 sequence 的 submodule 列表 当作一整段,只在这段的首或尾存一次 checkpoint,中间全部重算。适用:顺序的若干层(如 ResNet 的 stage、Transformer 的若干连续层),接口简单,但粒度较粗,重算范围大。

三、checkpoint(通用)

checkpoint(如 torch.utils.checkpoint.checkpoint):对 单个 可调用的 function 或子模块做 checkpoint;前向时只记输入,不存中间激活,backward 时用同一输入重新执行 function 得到激活再算梯度。粒度细,可只对某一层或某一 block 用,非顺序 或自定义 block 也可用;需保证 function 无副作用、确定性(否则重算结果可能不一致)。

四、对比与选择


面试要点


记忆要点

  1. sequential = 一段顺序层共用一个存点;checkpoint = 单层/单块。
  2. sequential 粗、重算多;checkpoint 细、灵活。
  3. 生产多用 checkpoint 包装单层或自定义 segment。
返回模块 返回总览