Pytorch机器学习GPU使用(从CPU转换为GPU)

torch.cuda.is_available()的返回值判断GPU是否可用,返回True则具有能够使用的GPU。
torch.cuda.device_count()可以获得能够使用的GPU数量。
nvidia-smi 查看GPU配置信息。

把数据从内存转移到GPU,一般针对张量(我们需要的数据)和模型。 对张量(类型为FloatTensor或者是LongTensor等),一律直接使用方法.to(device)或.cuda()即可。
device = torch.device(“cuda:0” if torch.cuda.is_available() else “cpu”)
#或device = torch.device(“cuda:0”)
device1 = torch.device(“cuda:1”)
for batch_idx, (img, label) in enumerate(train_loader):
img=img.to(device)
label=label.to(device)

对于模型来说,也是同样的方式,使用.to(device)或.cuda来将网络放到GPU显存。
#实例化网络
model = Net()
model.to(device) #使用序号为0的GPU
#或model.to(device1) #使用序号为1的GPU

多GPU加速
这里我们介绍单主机多GPUs的情况,单机多GPUs主要采用的DataParallel函数,而不是DistributedParallel,后者一般用于多主机多GPUs,当然也可用于单机多GPU。
使用多卡训练的方式有很多,当然前提是我们的设备中存在两个及以上的GPU。
使用时直接用model传入torch.nn.DataParallel函数即可,如下代码:

#对模型 net = torch.nn.DataParallel(model)

这时,默认所有存在的显卡都会被使用。
如果你的电脑有很多显卡,但只想利用其中一部分,如只使用编号为0、1、3、4的四个GPU,那么可以采用以下方式:
#假设有4个GPU,其id设置如下
device_ids =[0,1,2,3]
#对数据
input_data=input_data.to(device=device_ids[0])
#对于模型
net = torch.nn.DataParallel(model)
net.to(device)

或者

os.environ["CUDA_VISIBLE_DEVICES"] = ','.join(map(str, [0,1,2,3])) net = torch.nn.DataParallel(model)

你可能感兴趣的:(Pytorch机器学习GPU使用(从CPU转换为GPU))