如何在pytorch中使用多个GPU?

jjhzyzn0  于 2022-12-04  发布在  其他
关注(0)|答案(6)|浏览(253)

我使用这个命令来使用GPU。

device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")

但是,我想在Jupyter中使用两个GPU,如下所示:

device = torch.device("cuda:0,1" if torch.cuda.is_available() else "cpu")
yvt65v4c

yvt65v4c1#

假设您希望将数据分布在可用的GPU上(如果您的批处理大小为16,并且有2个GPU,您可能需要为每个GPU提供8个样本),而不是将模型的各个部分真正分布在不同的GPU上。

如果要使用所有可用的GPU:

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

model = CreateModel()

model= nn.DataParallel(model)
model.to(device)

如果您要使用特定的GPU:(例如,使用4个GPU中的2个)

device = torch.device("cuda:1,3" 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 = [1, 3])
model.to(device)

通过设置操作系统环境变量来使用特定GPU:

在执行程序之前,按如下方式设置变量CUDA_VISIBLE_DEVICES
export CUDA_VISIBLE_DEVICES=1,3(假设您要选择第2个和第4个GPU)
然后,在程序中,您可以使用DataParallel(),就像您想使用所有GPU一样(类似于第一种情况)。这里,程序可用的GPU受操作系统环境变量的限制。

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

model = CreateModel()

model= nn.DataParallel(model)
model.to(device)

在所有这些情况下,数据都必须Map到设备。
如果Xy是数据:

X.to(device)
y.to(device)
ivqmmu1c

ivqmmu1c2#

使用多GPU就像在DataParallel中 Package 模型并增加批处理大小一样简单。

wfveoks0

wfveoks03#

另一个选择是为PyTorch使用一些辅助库:

PyTorch Ignite库分布式GPU培训

there中,有一个 * 上下文管理器 * 的概念,用于在以下位置进行分布式配置:

  • nccl -多个GPU上的torch原生分布式配置
  • xla-tpu -TPU分布式配置

PyTorch lightning 多GPU训练

This可能是在CPU/GPU/TPU上训练的最佳选择,而不会改变你原来的PyTorch代码。
值得检查Catalyst以获得类似的分布式GPU选项。

wpx232ag

wpx232ag4#

当我运行naiveinception_googlenet时,上面的方法对我不起作用。下面的方法解决了我的问题。

import os
os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"
os.environ["CUDA_VISIBLE_DEVICES"] = "0,3"  # specify which GPU(s) to be used
jdgnovmf

jdgnovmf5#

如果您希望仅在特定GPU上运行代码(例如,仅在GPU id 2和3上),则可以在从终端触发python代码时使用CUDA_VISIBLE_DEVICES= 2,3变量指定。

CUDA_VISIBLE_DEVICES=2,3 python lstm_demo_example.py --epochs=30 --lr=0.001

在代码中,将其保留为:

device = torch.device("cuda" if torch.cuda.is_available() else 'cpu')
model = LSTMModel()
model = nn.DataParallel(model)
model = model.to(device)

来源:https://glassboxmedicine.com/2020/03/04/multi-gpu-training-in-pytorch-data-and-model-parallelism/

wd2eg0qa

wd2eg0qa6#

2022年,PyTorch说:
建议使用DistributedDataParallel而不是此类来进行多GPU培训,即使只有一个节点也是如此。请参见:请使用nn.parallel.DistributedDataParallel,而不要使用多重行程或nn.DataParallel和分散式数据平行。
中https://pytorch.org/docs/stable/generated/torch.nn.DataParallel.html#torch.nn.DataParallel
因此,似乎我们应该使用DistributedDataParallel,而不是DataParallel

相关问题