系统学习 AI 学习路径:从 GPU 运行时到推理、微调与 RAG 评估

activation-checkpointing

激活检查点:用反向重算换显存,训练长上下文和大模型的基础手段

补充说明

激活检查点(activation checkpointing,也叫 gradient checkpointing)在前向时不保存全部中间激活,只保留少量检查点;反向传播时重新计算中间结果。它把显存换成了额外计算,通常能显著降低激活占用,是长上下文、大 batch 和多卡训练的基础优化。

PyTorch 原生用 torch.utils.checkpoint,Hugging Face 模型提供 gradient_checkpointing_enable(),FSDP/DeepSpeed/ColossalAI 也各有集成方式。它只省激活显存,不省参数、优化器状态和 KV Cache;推理阶段通常不需要。

常用示例

# Hugging Face Transformers
model.gradient_checkpointing_enable()
model.config.use_cache = False  # 训练时关闭 KV Cache
import torch
from torch.utils.checkpoint import checkpoint

def block(x):
    return model_block(x)

# 非重入模式,支持更多场景(推荐)
y = checkpoint(block, x, use_reentrant=False)
# FSDP:按 Transformer block 开启激活检查点
from torch.distributed.algorithms._checkpoint.checkpoint_wrapper import (
    checkpoint_wrapper, CheckpointImpl, apply_activation_checkpointing,
)
from transformers.models.llama.modeling_llama import LlamaDecoderLayer

apply_activation_checkpointing(
    model,
    checkpoint_wrapper_fn=lambda m: checkpoint_wrapper(
        m, checkpoint_impl=CheckpointImpl.NO_REENTRANT
    ),
    check_fn=lambda m: isinstance(m, LlamaDecoderLayer),
)
# DeepSpeed 配置片段
{
  "activation_checkpointing": {
    "partition_activations": True,
    "contiguous_memory_optimization": True
  }
}

易错点与排错

相关命令

参考链接

读完自测

合上页面,先回答,再展开对照。

  1. 激活检查点用什么换什么?它不省哪些显存?
  2. 训练时为什么要关闭 use_cache?
  3. use_reentrant=True 和 False 应该怎么选?
答案
  1. 用额外的前向重算换显存;它不省参数、优化器状态、KV Cache 等显存。
  2. use_cache=True 会保留 KV Cache,训练时增加显存占用且对反向没有帮助;训练通常设为 False。
  3. 新代码优先 use_reentrant=False,对控制流、RNG 和非张量输出支持更好;旧代码或特定框架要求时再按文档选择。
微信小程序码:扫码打开命令速查小程序

小程序版

微信扫码,随时查命令