这个坑值得记一笔。四卡训练启动后停在 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。

容易忽略的是,遇到卡住不要直接等默认的十分钟超时,先把超时压到两分钟,能更快拿到失败堆栈,排查效率完全不同。这类问题最好一次改到位,反复小改反而容易把原因搅混。

作者 9823189