Pytorch 多GPU训练

Pytorch 多GPU训练



1 导入库

import torch#深度学习的pytoch平台
import torch.nn as nn
from torch.autograd import Variable
from torch.utils.data import DataLoader
from torch.utils.data import TensorDataset

 


2 指定GPU

2.1 单GPU声明

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

2.2 多GPU声明

import os
os.environ['CUDA_VISIBLE_DEVICES'] = '0,1,2,3,4,5' #指定GPU编号
device = torch.device("cuda") #创建GPU对象

 

3 数据放到GPU

x_train = Variable(train,requires_grad=True).to(device=device,dtype=torch.float32) #把训练变量放到GPU

 


4 把模型网络放到GPU 【重要】

net = DNN(layers)
net = nn.DataParallel(net)
net.to(device=device)

重要:nn.DataParallel

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

  1. 使用 nn.DataParallel 打包模型
  2. 然后用 nn.DataParallel 的 model.to(device) 把模型传送到多块GPU中进行运算

torch.nn.DataParallel(DP)

DataParallel(DP)中的参数:

  • module即表示你定义的模型
  • device_ids表示你训练时用到的gpu device
  • output_device这个参数表示输出结果的device,默认就是在第一块卡上,因此第一块卡的显存会占用的比其他卡要更多一些。

当调用nn.DataParallel的时候,input数据是并行的,但是output loss却不是这样的,每次都会在output_device上相加计算
===> 这就造成了第一块GPU的负载远远大于剩余其他的显卡。

DP的优势是实现简单,不涉及多进程,核心在于使用nn.DataParallel将模型wrap一下,代码其他地方不需要做任何更改。

例子:
在这里插入图片描述


 

5 其他:多GPU并行

加个判断:

 if torch.cuda.device_count() > 1:
        model = torch.nn.DataParallel(model)
model = Model(input_size, output_size)  # 实例化模型对象
if torch.cuda.device_count() > 1:  # 检查电脑是否有多块GPU
    print(f"Let's use {torch.cuda.device_count()} GPUs!")
    model = nn.DataParallel(model)  # 将模型对象转变为多GPU并行运算的模型

model.to(device)  # 把并行的模型移动到GPU上
  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HHHTTY-

你的鼓励将是我创作的最大动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值