一、从一次诡异的loss震荡说起上个月在部署一个八卡分布式YOLOv5训练任务时,遇到了一个让人头疼的现象:单卡训练时loss曲线平滑下降,一到多卡分布式训练,loss就开始周期性震荡,验证集mAP也比单卡低了近3个百分点。一开始怀疑是学习率没按线性缩放规则调整,但调整后问题依旧。最终花了三天时间,才发现是同步BN的梯度同步时机和梯度累积的步数没对齐导致的。如果你也在分布式训练中遇到过loss不稳定、收敛效果差的问题,这篇笔记或许能帮你避开我踩过的那些坑。二、节点间通信:不只是nccl那么简单很多人以为分布式训练只要选对nccl后端,通信问题就解决了。其实这里第一个坑就藏在初始化方式里。# 常见的初始化方式,但这里有个隐患torch.distributed.init_process_group(backend='nccl'