PyTorch分布式训练
分布式训练已经成为如今训练深度学习模型的一个必备工具,但pytorch默认使用单个GPU进行训练,如果想用使用多个GPU乃至多个含有多块GPU的节点进行分布式训练的时候,需要在代码当中进行修改,这里总结一下几种使用pytorch进行分布式训练的方式。
环境
本文使用的环境为:
- python =3.7
- pytorch = 1.0
- CUDA = 8.0
使用单个GPU
pytorch中pytorch.cuda
用于设置和运行CUDA
操作,它会跟踪当前选定的GPU,并且您分配的所有CUDA张量将默认在该设备上创建。所选设备可以使用 torch.cuda.device
环境管理器进行更改。
pytorch中想要使用GPU进行模型训练非常简单,首先需要使用代码torch.cuda.is_available()
判断当前环境是否可以使用GPU,如果返回False
那么证明GPU不可用,需要检查软件包或驱动等是否安装正确。
当GPU可用时,可以使用torch.device()
创建一个torch.device
对象,例如torch.device('cuda')
或使用torch.device('cuda:0')
指定GPU,该对象可以将张量移动至GPU上。假设有一个张量x
,我们可以使用x.cuda()
或x.to(device)
的方式将其移动至GPU上,这两种方式可以视作是等价的,并没有太大的区别,Variable与模型同理,也可以使用这样的方式进行移动。接下来按照征程的操作即可以进行训练。
单机使用多个GPU
单机使用多个GPU有两种方式,torch.nn.DataParallel()
与torch.nn.parallel.DistributedDataParallel
其中torch.nn.DataParallel()
只能实现在单机多卡中进行分布式训练,而torch.nn.parallel.DistributedDataParallel
则是新方法,在单机多卡和多机多卡都可以训练。官方建议使用最新的torch.nn.parallel.DistributedDataParallel
,因为即使在单机多卡上,新的方法在效率上也要比旧的表现好。
torch.nn.DataParallel()
使用该方法的方式很简单,假设我们已经构建了一个模型NET
&#x