1、推理显存

加载模型权重和处理当前对话的KV缓存。
模型权重:参数量 x 每个参数占用字节数。80亿参数,BF16精度(2字节),则约需16GB
KV缓存:与处理的序列长度、批次大小直接相关。

2、训练显存

模型权重、梯度、优化器状态以及前向传播的中间计算结果(激活值)

1、模型权重:16GB
2、梯度:反向传播后计算得到,格式同参数,16GB
3、优化器状态:AdamW需保存动量和方差,通常以FP32格式保存,32GB
使用AdamW优化器,每训练一个参数,优化器需要存储 参数、梯度、动量m、方差v
m和v必须是全精度FP32(防止舍入误差累积、维护小梯度的精确性)
本来应该是32GB(m)+32GB(v),现在混合精度框架下,会使用 一个 FP32权重的主副本来执行梯度更新。
所以这部分最终是32GB
模型静态内存(权重、梯度、优化器状态)总计 最低64G

4、激活值:存储了前向传播中所有层、子层的中间输出,反向传播时必须被保留
(1)激活值显存取决于 模型结构、批次大小、序列长度和精度。
粗略经验:全量训练时,激活值通常是模型参数的4倍-10倍。
(2)减少激活值的主要技术
a.梯度检查点:不在前向时存储所有激活值,而只存储部分关键层的激活值。反向传播时,会重新计算未存储的中间激活值
b.选择性激活值重计算:只对那些显存占用最大的子模块(如Attention模块)应用重计算
使用梯度检查点、选择性激活值冲计算后,激活值的显存占用可以下降到16GB左右
总的显存需要可以控制在80GB左右

3、训练显存占用优化

静态内存优化

(1)ZeRO

通过数据并行组中的 不同GPU之间 划分 模型的不同状态,来消除内存冗余。

  • ZeRO-1:优化对象是优化器状态(m、v),静态显存占用从64GB -> 48GB
  • ZeRO-2:优化对象是优化器状态和梯度,静态显存占用从64GB -> 32GB
  • ZeRO-3:优化对象是优化器状态、梯度和模型权重,静态显存占用从64GB -> 16GB

(2)8-bit/4-bit优化器状态

针对优化器做精度方面的调整

动态内存优化(激活值)

内存高效注意力

比如Flash Attention / Xformers

原理:重新设计了 Transformer注意力机制的计算方式。它不将完整的注意力矩阵 写入 HBM(高带宽内存),
而是计算拆分,利用GPU内部的SRAM(片上静态随机存取内存)进行计算,从而避免了大量激活值的存储和HBM读写。

激活值 Offloading

原理:类似梯度检查点,但更一步。它将前向传播计算出的 激活值 临时存储到 CPU内存 或 固态硬盘SSD上, 只在反向传播需要时再传回 GPU。

效果:理论上可以将 激活值这部分的显存占用 降到几乎为0
代价:巨大的 PCle总线通信开销,会显存降低训练速度

综合优化:PEFT

LoRA

梯度、优化器部分占用的显存会大大减少。训练Qwen3-8B 仅需要12GB-20GB显存。

特别说明,LoRA训练的主要优势 在于大幅减少了 显存占用和多卡通信量,
而不是显著减少单次 迭代所需的计算时间。

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐