pytorch多gpu并行训练
-
单机多卡并行训练
单机多卡并行训练的目的是,实现大batch训练模型,设置模型参数放置到多个GPU上。
在pytorch1.0之后的版本中,多GPU运行变得十分方便,
API : torch.nn.DataParallel
流程:
- 使用os.environ['CUDA_VISIBLE_DEVICES']来限制使用的GPU个数,注意该限制必须放在所有使用GPU的命令之前,否则会失效 ,见碰见问题第一条。
os.environ['CUDA_VISIBLE_DEVICES'] = '4,5'
- 若加载的是网络模型, 执行下述代码
##设定多GPU
model_mulit = nn.DataParallel(FTDNN(24)) ####FTDNN改成你自己的模型
model_mulit = model_mulit.cuda()
-
若加载的是训练数据,执行下属代码:
inputs = inputs.cuda()
labels = labels.cuda()
- 以上为博主采用的设置,也可采用pytorch官网示例代码:
model = Model(input_size, output_size)
if torch.cuda.device_count() > 1:
print("Let's use", torch.cuda.device_count(), "GPUs!")
# dim = 0 [30, xxx] -> [10, ...], [10, ...], [10, ...] on 3 GPUs
model = nn.DataParallel(model)
model.to(device)
拓展:nn.DataParallel(model) 实现
class DataParallel(Module):
def __init__(self, module, device_ids=None, output_device=None, dim=0):
super(DataParallel, self).__init__()
if not torch.cuda.is_available():
self.module = module
self.device_ids = []
return
if device_ids is None:
device_ids = list(range(torch.cuda.device_count()))
if output_device is None:
output_device = device_ids[0]
-
多机多卡并行训练
待补充!
碰见问题:
- 设置 os.environ['CUDA_VISIBLE_DEVICES'] = '4,5' 无效
原因:这一行代码放置的位置不对
解决方法:错误代码如下
print(torch.cuda.is_available())
###使用多块GPU
GPUID ="4,5"
###设置对当前程序可见GPU
os.environ['CUDA_VISIBLE_DEVICES'] = GPUID
正确代码:一定要把os.environ['CUDA_VISIBLE_DEVICES']=‘1‘
放在所有访问GPU的代码之前。
###使用多块GPU
GPUID ="4,5"
###设置对当前程序可见GPU
os.environ['CUDA_VISIBLE_DEVICES'] = GPUID
print(torch.cuda.is_available())