我的系统中有 3 个 GPU。
我想在最后一个上运行,即 2。因此,我在配置文件中将 gpu_id
设置为 2,并将 CUDA_VISIBLE_DEVICES=2
设置为 2。但在我的程序中,以下行始终分配第 0 个 GPU。
local_rank = torch.distributed.get_rank()
torch.cuda.set_device(local_rank)
如何解决这个问题?
最佳答案
设置CUDA_VISIBLE_DEVICES=2
时,您告诉操作系统仅将第三个GPU暴露给您的进程。也就是说,就 PyTorch 而言,只有一个 GPU。因此torch.distributed.get_world_size()
返回1
(而不是3)。
在您的进程中,该 GPU 的等级将为 0 - 因为没有其他 GPU 可用于该进程。但就操作系统而言 - 所有处理都在分配给该作业的第三个 GPU 上完成。
关于pytorch - 为什么即使我将可见 CUDA 设置为 2,DDP 中的 `local_rank` 仍为零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73678882/