激活(activations)是前向传播中每层的中间输出,反向传播要回读它们计算梯度,所以训练时要么存、要么重算。与参数静态显存
16Ψ“只随参数量、与 batch/seq 无关”相反,激活显存正比于 批大小
b × 序列长
s × 隐藏维度
hl。每层保存输入激活(FP16 每元素 2 字节)需
2⋅s⋅b⋅hl 字节,累计得激活显存 ≈
∑l=1L2⋅s⋅b⋅hl≈2Lsbh 字节;经验法则: 每层每 token 约 16 字节(≈ 每 token 存 8 个 FP16 元素的粗估口径,视隐藏维度而定),总激活 ≈
16Lsb 字节,精确值用
∑l2sbhl 计算。数值例: Llama-2 70B(
L=80,
h=8192),
s=4096,
b=2 → 每层
2×4096×2×8192≈134 MB,共 80 层 ≈ 10.7 GB——只有静态参数显存(1120 GB)的约 1%,但随
s×b 线性放大,长上下文 + 大批次时反客为主。重计算(Gradient Checkpointing): 不存每层激活,只每
k 层存一个检查点,反向时重跑前向把中间激活算回来;激活显存从
O(L) 降到
O(L)(取
k≈L),FLOPs 增加约 1/3——省显存换算力;选择性重计算只重算最占显存的张量(attention 的
s×s 分数矩阵、MLP 中间激活),把额外计算压到最低。