仅分配第一个 gpu(尽管我在 pytorch cuda 框架中使其他 gpu 可见)

Posted

技术标签:

【中文标题】仅分配第一个 gpu(尽管我在 pytorch cuda 框架中使其他 gpu 可见)【英文标题】:only first gpu is allocated (eventhough I make other gpus visible, in pytorch cuda framework) 【发布时间】:2021-07-25 14:57:06 【问题描述】:

我在具有多个 cuda 设备的 linux 服务器中的 pytorch framwework 中使用 cuda。

问题是 尽管我指定了某些可以显示的 gpus, 程序继续只使用第一个 gpu。

(但其他程序运行良好,其他指定的 gpu 分配良好。 因此,我认为这不是 nvidia 或系统问题。 nvidia-smi 可以很好地显示所有 gpus 并且没有问题。 我之前用以下代码分配 gpus 没有问题(系统不工作时除外) )

os.environ["CUDA_DEVICE_ORDER"]="PCI_BUS_ID"
os.environ["CUDA_VISIBILE_DEVICES"] = str(args.gpu)

我是在运行 main 函数之前写的。 它适用于同一系统中的其他程序。

我打印了那个 args.gpu 变量,并且可以看到该值不是“0”。

【问题讨论】:

【参考方案1】:

你尝试过这样的事情吗?

device = torch.device("cuda:0,1" if torch.cuda.is_available() else "cpu") ## specify the GPU id's, GPU id's start from 0.

model = CreateModel()

model= nn.DataParallel(model,device_ids = [0, 1])
model.to(device)  

告诉我这个

【讨论】:

感谢您的回答!是的,它有效。但你知道有什么区别吗?我通常使用该代码(os.environ),并且在将其分配给指定的 gpu 时使用 [object].cuda() 没有问题。我不知道是什么让它工作而不工作。 os.environ["CUDA_VISIBILE_DEVICES"] = str(args.gpu) 适用于基于 tensorflow 和 keras 的代码,但在 pytorch 中略有不同 我明白了......所以答案是......它在 pytorch 框架中效果不佳。它在 pytorch 框架中的其他许多其他程序中运行良好。哈哈,我想知道是什么让它起作用而不起作用。但是,是的,谢谢您回答这个问题!好的,我想将其标记为正确答案是投票?我做到了 我想说的是,在 pytoch 中,os.environ["CUDA_VISIBILE_DEVICES"] = str(args.gpu) 这仅适用于单 gpu,不适用于多 gpu 哦,真的吗?我仍然很好奇,因为它可以很好地与多 gpu 工具一起使用,例如 os.environ["CUDA_VISIBLE_DEVICES"]="4,5,6,7" 但我真的很感谢您回答问题!

以上是关于仅分配第一个 gpu(尽管我在 pytorch cuda 框架中使其他 gpu 可见)的主要内容,如果未能解决你的问题,请参考以下文章

如何告诉 PyTorch 不使用 GPU?

如何告诉 PyTorch 不使用 GPU?

pytorch使用horovod多gpu训练

pytorch 单机多gpu运行

Pytorch 训练技巧

PyTorch-4 nn.DataParallel 数据并行详解