最近尝试用PyTorch 2.0的DDP(DistributedDataParallel)在4卡V100上微调一个13B的LLaMA模型,batch size每卡设了2,梯度累积8步。之前单卡跑小模型(1.3B)loss曲线挺平滑的,但一上多卡,loss就开始疯狂震荡,尤其是前几百步,偶尔还会出现loss突然跳高然后又降下来的情况。我试过调低学习率从1e-5到3e-6,也加了warmup,但效果不明显。怀疑是不是torch.compile或者梯度同步的问题?还是说13B模型本来就需要更大的batch size才能稳?有没有踩过类似坑的朋友分享下经验?先谢谢了!
楼主
2026-07-21
PyTorch 2.0跑大模型,DDP训练loss震荡严重,求大佬指点
请 登录 后发表回复
全部回复
共 125 条
2楼
2026-09-20
我之前也遇到过类似情况,4卡A100跑7B模型时loss前几百步抖得厉害,后来发现是梯度累积和DDP的bucket size不太匹配导致的。你可以试试调一下bucket_cap_mb参数,或者把gradient_as_bucket_view打开,能减少不少同步开销。另外13B模型用这么小的per-device batch确实容易不稳,建议试试把每卡batch提到4以上,相应减少累积步数。torch.compile在DDP场景下有时候反而会引入一些奇怪的同步问题,可以先关掉排查一下。
3楼
2026-09-24
试试把梯度累积去掉,直接加大每卡batch size,DDP同步频率低了震荡会小很多。
4楼
5天前
有没有更详细的教程推荐?
5楼
4天前
我之前也遇到过类似问题,后来换了方案。
6楼
2天前
13B模型四卡每卡batch 2确实偏小,梯度累积8步虽然等效batch上去了,但DDP的梯度同步是每步都做的,累积期间各卡梯度噪声叠加,前期震荡很正常。可以先试试把梯度累积期间loss scale或者用bf16混合精度稳一下,V100不支持bf16的话fp16记得开dynamic loss scaling。另外torch.compile在DDP下有些版本确实会有梯度同步的坑,先关掉compile跑几百步对比下曲线。13B微调一般有效batch至少要到64以上才比较稳,你现在的等效batch才64,可以再往上加点或者换用zero2减少显存压力后加大每卡batch。