训练显存,指的是模型在训练过程中同时驻留在 GPU 上的全部张量之和。它由四笔账构成:参数(parameters)、梯度(gradients)、优化器状态(optimizer states)和激活(activations)。前三笔随参数量线性增长,第四笔随批量大小和序列长度增长。
打个比方:把训练想象成盖楼。参数是已经盖好的楼体;梯度是每个楼层收到的改造意见,一楼一份;优化器状态是施工队的台账——Adam 要给每个参数记两个数(一阶动量、二阶动量);激活则是施工时摊开的脚手架和建材,一次开工的面越大,摊得越开。楼盖完进入推理阶段,脚手架撤走,只剩楼体。
算一笔具体的账(混合精度 + Adam,全量微调):
| 项目 | 常见精度 | 每参数字节 |
|---|---|---|
| 参数 | 低精度副本 + fp32 主副本 | 2 + 4 = 6 |
| 梯度 | 与参数同精度 | 2 |
| 优化器状态 | Adam 的动量两项,各 fp32 | 8 |
| 合计 | 约 16 字节/参数 |
也就是说,1B 参数的模型,光前三笔就要约 16GB,还要再叠加激活和框架开销。24G 卡做全量微调,参数量通常要压到 1B 上下才比较从容。如果训练框架不保留 fp32 主副本,前三笔能降到 12 字节/参数,但要自己权衡数值稳定性。
和推理显存的关键区别:推理只需要参数(外加 KV cache),所以 24G 卡跑 7B 甚至更大的量化模型做推理很轻松;训练却要多背梯度、优化器状态和激活三座山,同一张卡就训不动 7B 的全量微调。
四笔账对应的省显存手段各不相同:
- 参数:量化;LoRA 只训低秩旁路,冻结的原参数不产生梯度和优化器状态
- 梯度:本身与参数同大小,很难单独省;常见的AI 词典:梯度检查点">梯度检查点(gradient checkpointing)省的是激活,用重算换显存
- 优化器状态:8-bit Adam、ZeRO/FSDP 把状态切分到多张卡
- 激活:减小批量、缩短序列长度、上梯度检查点
所以看到"24G 能训多大模型",别只盯参数量。估算顺序是:参数量 × 每参数字节 ≈ 静态开销,再给激活留余量——批量越大、序列越长,余量要留得越多。要报一个准数,最好拿真实配置实测一次峰值显存;具体工具与参数以官方页面为准。
