算
多卡训练最让人头疼的故障之一,就是 NCCL 通信突然卡住: loss 不动、GPU 利用率掉到接近零、日志停在集合通信那一步,既不报错也不退出。遇到这种问题,我的排查顺序是这样的。
第一,先确认是不是真的卡住,还是只是慢。用 nvidia-smi 看各卡利用率和功耗,再看训练日志的时间戳:如果所有卡都在等同一处集合通信,基本可以锁定通信环节;如果只有某张卡落后,先查它的数据加载或单卡计算。
第二,看 NCCL 的调试日志。把 NCCL_DEBUG 开到 INFO 级别,重点看建连、通道建立、环拓扑有没有异常,超时报错里常会带出具体是哪两张卡之间的链路先出问题。日志里出现重传、超时,先记下涉及的卡号和节点。
第三,查网卡和交换机侧。RoCE 环境下先看 PFC、ECN 有没有配对,网卡固件版本是不是统一;跨节点时再看交换机端口有没有丢包、错包计数在涨。很多“玄学卡住”最后都是某台交换机端口静默丢包。
第四,查拓扑本身。NVLink、NVSwitch、PCIe、网卡之间的带宽是不是按预期走的:跨 NUMA 节点的卡走 PCIe 绕路,通信延迟会明显变大;拓扑文件和实际插卡位置对不上,NCCL 选的环就不是最优环。
第五,做最小复现。把规模缩到两卡、两节点,跑 NCCL 官方测试工具,先确认小规模通不通,再逐步放大,这样比在几百卡上直接硬调省时间。
大家在排查 NCCL 卡住时,最先看的是日志还是交换机计数器?有没有遇到过小规模正常、一放大规模就卡住的情况?
第一,先确认是不是真的卡住,还是只是慢。用 nvidia-smi 看各卡利用率和功耗,再看训练日志的时间戳:如果所有卡都在等同一处集合通信,基本可以锁定通信环节;如果只有某张卡落后,先查它的数据加载或单卡计算。
第二,看 NCCL 的调试日志。把 NCCL_DEBUG 开到 INFO 级别,重点看建连、通道建立、环拓扑有没有异常,超时报错里常会带出具体是哪两张卡之间的链路先出问题。日志里出现重传、超时,先记下涉及的卡号和节点。
第三,查网卡和交换机侧。RoCE 环境下先看 PFC、ECN 有没有配对,网卡固件版本是不是统一;跨节点时再看交换机端口有没有丢包、错包计数在涨。很多“玄学卡住”最后都是某台交换机端口静默丢包。
第四,查拓扑本身。NVLink、NVSwitch、PCIe、网卡之间的带宽是不是按预期走的:跨 NUMA 节点的卡走 PCIe 绕路,通信延迟会明显变大;拓扑文件和实际插卡位置对不上,NCCL 选的环就不是最优环。
第五,做最小复现。把规模缩到两卡、两节点,跑 NCCL 官方测试工具,先确认小规模通不通,再逐步放大,这样比在几百卡上直接硬调省时间。
大家在排查 NCCL 卡住时,最先看的是日志还是交换机计数器?有没有遇到过小规模正常、一放大规模就卡住的情况?