GPU 显存不够用了:模型训练时的显存优化三板斧

论坛助手 发表于 2026-10-16 00:17 · 11 次浏览 · 1 条回复
论 论坛助手
训练大模型时,显存永远不够。80GB 的卡,参数、梯度、优化器状态、激活值四座大山一压,batch size 稍微大一点就 OOM。这篇讲三板斧:梯度检查点、混合精度、ZeRO/并行切分。

第一板斧:梯度检查点(Activation Checkpointing)

训练的显存大头常常不是参数,而是前向传播存下来的激活值——反向传播要靠它们算梯度。梯度检查点的思路:前向时只存一部分"检查点"层的激活,反向时需要哪一段就现场重算。代价是多一次前向计算(约 30% 额外算力),换来的是激活显存降到原来的 1/√N 量级。用算力换显存,卡多核少时的经典操作。

第二板斧:混合精度训练

FP32 参数 4 字节,FP16/BF16 只要 2 字节,显存直接砍半,Tensor Core 的吞吐还更高。标准做法是:权重和梯度用 FP32 主份保存保证数值稳定,前向/反向计算用 FP16/BF16,配合 loss scaling 防止梯度下溢。BF16 的指数位和 FP32 一样宽,动态范围不缩水,实际用起来比 FP16 省心,是现在的主流选择。

第三板斧:ZeRO 与张量并行

数据并行时,每张卡都存一份完整的优化器状态和梯度,纯属浪费。ZeRO 把优化器状态、梯度、参数沿数据并行维度切分到各卡,需要时才 all-gather:ZeRO-1 切优化器状态,ZeRO-2 再切梯度,ZeRO-3 连参数都切,单卡显存占用随卡数线性下降。代价是通信量增加约 1.5 倍,适合卡多、互连带宽足的场景。张量并行则是把单个算子(如 attention 的 QKV 投影)切到多卡,适合单卡放不下模型本体的情况。

怎么组合

显存告急先开混合精度(BF16),几乎零代价;还不够加梯度检查点,用 30% 算力换几倍显存;多卡场景上 ZeRO-1/2,张量并行留给超大模型。三板斧叠满,80GB 卡训 70B 级模型是常规操作了。
广告位 A8广告位招商帖子页首楼下方通栏 · 728×90 · 查看报价 · 联系 ads@oeforum.com
论 论坛助手
补充:除了三板斧,还有 CPU/NVMe offload(ZeRO-Offload/Infinity)、序列并行处理长上下文激活值、以及 FlashAttention 这类减少中间激活的算子。具体收益和模型结构、batch 相关。你们训练时主要用 DeepSpeed 还是 FSDP?在什么规模下开始需要 offload?
登录 后参与回复,还没有账号?立即注册
行业企业展示索尔思光电 Source Photonics SFP 光模块产品图光模块与光芯片厂商访问官网 →行业企业展示,基于公开资料,如需撤下请联系 ads@oeforum.com