AI算力与应用

分布式训练通信卡顿怎么查?先区分网络延迟与同步等待

分布式训练变慢,不一定是网络带宽不足。先对齐各训练进程的集合通信耗时,再检查网络链路、慢进程和数据准备环节,才能确定优化方向。

同一轮训练里,有的进程已经进入集合通信,另一些进程还在准备数据或计算,先到的进程就会等待;若进程几乎同时发起通信,但操作仍耗时很久,才更像网络或通信库问题。排查分布式训练通信瓶颈优化,应先分清这两种情况,而不是一看到通信耗时就加带宽。

先看等待发生在通信之前还是之中

同步操作需要多个进程共同参与,整体进度往往受最慢进程影响。单看某个进程的通信时间不够,应该把同一训练步中各进程的时间线并排比较,关注通信开始时刻、结束时刻,以及等待区间。

  • 开始时刻相差明显:先检查慢进程的计算、数据读取和进程调度。通信可能只是暴露了前序环节的差异。
  • 开始时刻接近、结束时刻都偏晚:检查集合通信耗时、网络拥塞、通信库配置和设备间链路。
  • 偶尔出现单个长尾:比较多轮训练的中位数与高分位耗时,并记录异常发生时的网络计数器;不要只凭一次峰值下结论。

可先排除预热阶段,连续观察约20至50个训练步。这个范围只是便于比较的采样办法,不是性能标准;模型大小、批次和集群负载都会影响结果。

按顺序检查,避免把慢进程误判成慢网络

  1. 固定比较条件。确认参与进程数、输入批次和训练配置没有变化。逐个记录每个进程的计算结束、通信开始和通信结束时间,找出最慢进程及其差值。
  2. 核对数据准备与计算。检查数据读取是否有间歇性停顿、各进程工作量是否一致,以及主机是否出现调度或内存压力。若某进程每步都较晚进入集合通信,先处理该进程,不要急着改网络参数。
  3. 检查链路状态。在每台机器上查看对应网卡的收发速率、丢包、错误和重传计数,并核实接口速率、MTU及交换机端口配置是否一致。吞吐长期偏低可能提示链路没有按预期工作;瞬时高吞吐也不能证明没有拥塞。
  4. 单独测集合通信。在相同机器与进程规模下,用 NVIDIA NCCL 测试工具 nccl-tests 比较集合通信基准结果;若训练运行在其他后端,应使用对应后端的测试方式。基准正常而训练慢,通常要回头查数据、计算或同步等待。
  5. 检查后端与拓扑。NCCL面向NVIDIA设备间的集合通信;Gloo则常用于CPU集合通信,也可用于其他受支持场景。先确认实际采用的后端、网卡选择和进程映射,再评估是否需要调整。盲目更换后端可能不适配当前设备。

根据症状选择优化方向

网络延迟或拥塞更可疑

若各进程几乎同时进入通信,但集合通信耗时仍高,同时网卡出现丢包、重传或速率异常,应优先检查物理链路、交换机端口、接口配置及并发流量。若链路指标正常,再比较不同消息规模下的测试结果:小消息更受延迟影响,大消息更容易受可用带宽影响。此时的分布式训练通信瓶颈优化,应以定位具体链路或通信配置为目标,而不是笼统追求更高峰值带宽。

同步等待或负载不均更可疑

若通信开始时间差异大,而通信本身耗时与基准接近,应检查慢进程的输入长度、数据加载、计算量和进程绑定。对可变长度样本,可采用合理的分桶或均衡分配;数据管线有停顿时,则改善预取与缓存。若通信与计算存在可重叠空间,可检查框架是否支持通信计算重叠,以及数据依赖是否允许开启。优化后仍要逐进程复测,确认等待没有转移到下一处。

常见问题

网络 ping 延迟低,为什么训练仍然卡?

ping主要反映小型报文的往返情况,不能代替多进程集合通信测试。拥塞、消息规模、同步时机和通信后端都可能让训练表现不同。

只看所有进程的平均耗时可以吗?

不够。平均值会掩盖最慢进程,建议同时比较逐进程时间线及中位数、高分位耗时。

分布式训练通信卡顿怎么查?先区分网络延迟与同步等待

什么时候优先优化网络?

各进程进入集合通信的时刻接近、通信耗时持续偏高,且链路或基准测试有异常时,网络排查优先级更高。

先定位等待发生在哪个阶段,再用链路指标和集合通信基准交叉验证。这样做,分布式训练通信瓶颈优化才能针对真实原因,避免把数据或负载问题当成网络故障。