核心要点

  • Transformer 主体参数量约 12·L·d²(L 为层数,d 为隐藏维度),来自注意力 QKVO 的 4d² 与 FFN 的 8d²

  • 训练显存四大块:参数 + 梯度 + 优化器状态 + 激活;Adam 每参数另存一阶/二阶动量

  • 混合精度训练下,参数+梯度+Adam 状态合计约为参数量的 16 字节/参数(fp16 权重/梯度 + fp32 主权重与两个动量)

  • 激活显存与 batch、序列长度、层数成正比,常借梯度检查点压缩

标准回答

参数量估算

单层 Transformer:注意力的 Q/K/V/O 四个投影约 4d²,FFN 升降维(通常 4d 中间维)约 8d²,合计约 12d²。L 层主体参数量约 12·L·d²,词嵌入另计 V·d。例如 d=4096、L=32 时约 12×32×4096²≈6.4B(不含嵌入)。

训练显存的四个组成

  • 参数:模型权重本身;
  • 梯度:与参数等量;
  • 优化器状态:Adam 为每个参数维护一阶动量 m 和二阶动量 v;
  • 激活:前向缓存、随 batch×序列长度×层数增长。

混合精度下的经验值

每参数约需:fp16 权重 2B + fp16 梯度 2B + fp32 主权重 4B + Adam 的 m、v 各 4B,合计约 16 字节/参数。即仅模型态就需约 16×参数量字节,激活另算。

降显存手段

梯度检查点压激活、ZeRO 切分优化器状态/梯度/参数、张量与流水线并行分摊到多卡。

常见误区

⚠️ 常见踩坑

只按「参数×精度字节数」估显存而漏掉梯度、Adam 双动量与激活;忘记 Adam 的优化器状态往往是参数显存的数倍,是大模型显存的主要来源之一。

追问

追问 1为什么 Adam 比 SGD 更吃显存?

Adam 需为每个参数额外维护一阶动量 m 和二阶动量 v 两份状态,混合精度下还有 fp32 主权重,优化器状态显存约为参数的数倍;而纯 SGD 无动量状态、SGD+momentum 仅一份动量,显存占用明显更低。

追问 2推理显存为什么远小于训练?

推理无需保存梯度和优化器状态,也不必缓存反向所需的全部激活,只需权重加 KV Cache 等少量中间量。因此同一模型推理显存通常约为训练的几分之一,可用更低配硬件部署。

延伸学习

与本题相关的知识库文章、术语、工具与行业资讯。