系统学习 AI 学习路径:从 GPU 运行时到推理、微调与 RAG 评估

distributed-training-troubleshooting

分布式训练排障:从挂起、NCCL 报错、OOM 到 straggler 的定位顺序

补充说明

分布式训练失败通常不是单一原因:进程组没建起来、NCCL 选错网卡、共享内存不足、某个 rank OOM、数据读取卡住、checkpoint 写爆磁盘,都会表现成“训练挂了”或“loss 不动”。排障顺序应该是:先确认单机能跑,再扩到 2 卡,最后上多机;先排除环境/网络,再怀疑算法。

常见症状:启动即报 NCCL error、训练几分钟后 hang、某个 rank OOM、GPU 利用率周期性掉零、loss 突然 NaN、checkpoint 保存失败。每一类都有对应的日志和工具,不要一上来就改 batch size 或重启。

常用示例

# 单机 8 卡最小复现
torchrun --standalone --nproc_per_node=8 train.py

# 打开分布式与 NCCL 调试日志
NCCL_DEBUG=INFO NCCL_DEBUG_SUBSYS=ALL \
TORCH_DISTRIBUTED_DEBUG=DETAIL \
torchrun --standalone --nproc_per_node=8 train.py

# 先验证多卡通信本身
./build/all_reduce_perf -b 8 -e 1G -f 2 -g 8
# 卡住时抓取进程栈(Python)
py-spy dump --pid <PID>

# 查看 GPU、进程和共享内存
nvidia-smi
df -h /dev/shm
ipcs -m
ulimit -a

# 查看内核 OOM/网络错误
dmesg -T | tail -50
journalctl -k --since '30 min ago' | grep -i -E 'oom|nvrm|xid|ib|mlx'

多机时先确认所有节点能互相解析、时间同步、MTU 一致、IB/RoCE 网卡可见,再检查 MASTER_ADDR/PORT 和防火墙。

易错点与排错

相关命令

参考链接

读完自测

合上页面,先回答,再展开对照。

  1. 分布式训练挂起时,第一步应该做什么?
  2. NCCL_DEBUG=INFO 主要能帮助定位什么?
  3. 容器里训练卡住,为什么要检查 /dev/shm?
答案
  1. 先缩小规模:单机单卡、单机多卡、双机逐步复现;同时收集所有 rank 的日志和进程栈,区分环境问题和代码问题。
  2. 它输出 NCCL 选择的网卡、拓扑、算法和通信初始化过程,能定位网卡选错、IB/RoCE 不可用、进程组建立失败等问题。
  3. 多进程 DataLoader 和 PyTorch 共享内存会用 /dev/shm,容器默认可能只有 64MB,容易导致卡住或 Bus error;要增大共享内存或减少 workers。
微信小程序码:扫码打开命令速查小程序

小程序版

微信扫码,随时查命令