首页/AI/大模型部署与运维速查/多卡/多机通信挂起排查
运维监控与排障50 条

多卡/多机通信挂起排查

张量并行推理挂起常卡在初始化或某次集合通信:先开 NCCL 调试日志看卡在哪一步,再核对拓扑与网络,并配置通信超时让失败快速显形而不是无限等待。

挂起挂在哪一步

张量并行或流水并行的推理服务,挂起大多发生在初始化或某一次集合通信上:所有进程都在等一个不会来的对端。排查第一步是让通信库把过程打出来,看清卡在建立连接、选择链路还是某次集合通信;第二步是核对卡间拓扑与网络状态;同时给通信配上超时,让失败以报错形式暴露,而不是无限等待。

基本信息

适用平台Linux 下的单机多卡与多机部署
调试开关通信库的调试级别环境变量,如输出详细初始化信息
核对工具显卡拓扑查询、网卡与链路状态查询
常见配置项网卡选择、通信超时、设备可见性变量
恢复动作按预案整体重启全部进程,不要只重启一部分

典型使用场景

  • 启动即挂:核对各进程可见设备数是否一致
  • 跑到某一步才挂:多为负载相关,查拓扑与掉队的进程
  • 多机环境:先确认网卡与链路状态正常
  • 加超时:把无限等待变成可观测的失败,便于快速恢复
  • 复现记录:记下并发、输入长度与挂起前最后一条日志

调试与证据

调试与证据
NCCL_DEBUG=INFO <启动命令> 2>&1 | tee /tmp/nccl.log   # 仅排查窗口内开启
nvidia-smi topo -m                                     # 核对卡间互联方式
grep -i -E 'timeout|error|unhandled' /tmp/nccl.log | tail
env | grep CUDA_VISIBLE_DEVICES                        # 核对设备可见性

卡点分段

卡在哪常见原因核对方法
通信库初始化可见设备数不一致或端口冲突比对各进程的环境变量与日志时间戳
建立连接网卡选择错误、链路异常查网卡状态与链路错误计数
集合通信中拓扑不匹配或单个进程掉队核对拓扑矩阵与各进程进度
结束后不返回同步点缺失或应用层逻辑问题结合应用日志与抓栈确认
详细调试日志量大且有性能开销,只用于排查窗口,结束后关掉。
给集合通信设置超时:长时间无进展时框架能主动报错退出,恢复动作才有可能做成自动化。

易错点

  • 无限等待当常态:没有超时机制的挂起会长期占卡,等价于持续停机
  • 把调试开关常开:日志膨胀、性能下降,还会把真正的时间线淹没
  • 只查一侧节点:多机挂起要同时看两侧的网卡与日志,单侧结论不可靠
  • 挂起后直接重启全部节点:先抓一次栈与日志,否则下次还会挂

数据来源与参考

  • NVIDIA NCCL 官方文档:Troubleshooting(docs.nvidia.com/deeplearning/nccl)
  • PyTorch 官方文档:torch.distributed(通信初始化)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌