多卡训练torch.distributed.run出现很多无占用率的进程

多卡训练,为什么每张卡上会有四个进程?
命令是这样的
CUDA_VISIBLE_DEVICES=0,1,2,3 python -m torch.distributed.run --nproc_per_node=4 train.py --weight '' --cfg ./models/yolov5s.yaml --data ./data/zwl.yaml --batch-size 16

img

在使用 torch.distributed.run 进行多卡训练时,每张卡上有四个进程的情况通常是由于使用了混合精度训练(Mixed Precision Training)和分布式训练(Distributed Training)所导致的。

混合精度训练使用了浮点16位(half precision)进行计算,以提高训练的速度和效率。而在分布式训练中,通常会使用一个主进程(master process)和多个工作进程(worker process)来对模型进行分布式训练。

具体来说,在您的命令中,torch.distributed.run 启动了四个进程,每个进程都被分配到一个 GPU 上进行训练。这四个进程分别是:

主进程(master process):主要负责协调和监控其他进程的工作,例如启动训练、同步参数等功能。

数据加载进程(data loading process):用于并行加载数据,并将加载后的数据传输到 GPU。

模型初始化进程(model initialization process):负责在每个 GPU 上初始化模型的副本。

训练进程(training process):每个进程在各自的 GPU 上执行训练操作,对模型进行前向传播、反向传播和参数更新。

这样设计的目的是为了充分利用多张 GPU 进行分布式训练,并提高训练速度和性能。

在任务完成后,这些进程会自动退出。如果您观察到某些进程没有被充分利用或存在无占用率的情况,可能是由于数据加载、模型初始化或训练过程中的某些瓶颈导致的。您可以通过调整数据加载、模型结构、训练参数等来优化训练过程,以提高 GPU 利用率和训练效果。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^