问题出现得很突然,日志倒是留得挺全。torchrun 启动四卡训练,日志停在初始化完成后不再前进,GPU 利用率一直是 0,CPU 也没有明显负载。

刚开始盯着「共享内存不足,worker 无法创建」,折腾了半个多小时,排掉了。

排查方向其实有限,先把可能性排一排。num_workers 大于 0 且子进程在 fork 后初始化了 CUDA。还有一种是每个 rank 都去下载同一份数据集,卡在锁上。

不容易想到的是,分布式采样器的种子或分片配置不一致。

上来先把 worker 设为 0 验证是否与数据加载有关

python train.py --num-workers 0

多卡时用 spawn 启动并限制 worker 数量

torchrun --nproc_per_node 4 train.py --num-workers 2

只让主进程下载数据,其余 rank 等待

if rank == 0: download(); dist.barrier()

末了检查共享内存与文件句柄是否够用

ulimit -n

改完先别撤,确认这几项。训练能顺利进入第一个 step,GPU 利用率上升到正常水平,日志开始输出 loss。

卡住且没有报错通常不是代码逻辑问题而是进程间等待,先把 worker 归零排除数据管线,能省掉大量排查时间。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。

作者 9823189