这个坑值得记一笔。四卡训练启动后停在 init_process_group 十分钟不动,最后抛出超时错误,中间没有任何有用的日志。
刚开始盯着「显卡被其他进程占用,卡在设备初始化」,折腾了半个多小时,排掉了。
把日志和配置对完,能解释这个现象的基本就这几处。某个 rank 启动失败,其余进程在等待;主节点地址不可达,握手一直没有完成;默认超时时间太长,掩盖了真实问题。
上来先把超时改短以便快速失败
$env:NCCL_TIMEOUT='120'; torchrun --nproc_per_node 4 train.py
接着打开详细日志看各 rank 卡在哪一步
$env:NCCL_DEBUG='INFO'; torchrun --nproc_per_node 4 train.py
然后确认所有卡空闲且可见
nvidia-smi --query-gpu=index,memory.used --format=csv
剩下的就是用两卡验证通信是否正常
torchrun --nproc_per_node 2 --master_port 29510 train.py
怎么算真的好了,看的是同一批现象。初始化在几十秒内完成,日志里各 rank 依次打印就绪信息,训练开始输出 step。
容易忽略的是,遇到卡住不要直接等默认的十分钟超时,先把超时压到两分钟,能更快拿到失败堆栈,排查效率完全不同。这类问题最好一次改到位,反复小改反而容易把原因搅混。