仅分配第一个 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 可见)的主要内容,如果未能解决你的问题,请参考以下文章