第 93 题:如何诊断网络拥塞导致的训练卡顿?iftop、nicstat?
题目
如何诊断网络拥塞导致的训练卡顿?iftop、nicstat?
完整讲解
一、现象与原因
训练卡顿(如 step 时间突增、周期性变慢)可能来自 网络拥塞:多机 all-reduce 或大量点对点流量打满某条链路,导致排队与重传,NCCL collective 变慢。需区分是「计算慢」还是「通信慢」,再针对通信做诊断。
二、工具与用法
- iftop / nethogs:看实时流量与占用带宽的进程/连接;可看到某网卡或某 IP 对是否持续高占用,判断是否有多机流量打满。
- nicstat / sar -n:看网卡利用率、包数、错误与丢包;若某 NIC 持续高 util 或 errors/drop 上升,可能是拥塞或硬件问题。
- NCCL_DEBUG=INFO / TIMING:看 collective 的耗时与 transport;若某次 all-reduce 明显变长,对应时间点再结合 iftop/nicstat 看是否网络尖峰。
- torch.profiler:看 timeline 上 NCCL kernel 的时长与间隔;若通信段明显拉长且呈周期性,可怀疑网络或某节点慢。
三、排查思路
- 先确认「卡顿」是通信:profile 看 NCCL 占比、或关掉部分 DP 看是否缓解。
- 再用 iftop/nicstat 看拥塞点:哪条链路、哪个节点在高峰;结合拓扑看是否跨架、单链路过载。
- 优化:调 NCCL 拓扑(NCCL_TOPO_FILE)、减少同时通信、或增加带宽/换路径;梯度压缩减通信量。
面试要点
- 卡顿可能来自网络拥塞;先 profile 确认是通信慢,再用 iftop/nicstat 看流量与网卡。
- iftop 看实时流量与连接;nicstat/sar 看网卡利用率与丢包。
- NCCL_DEBUG + profiler 看 collective 耗时;结合拓扑与流量找拥塞点。
记忆要点
- 先区分计算 vs 通信(profile);再 iftop/nicstat 看流量与 NIC。
- 拥塞 = 某链路或某 NIC 持续高占用/丢包。
- 优化 = 拓扑、减通信量、梯度压缩。