Pytorch实现 多GPU深度学习训练

目录

前言

一、Pytorch多GPU并行训练的两种方式

1、DataParallel(DP)

2、DistributedDataParallel(DDP)

二、查看显卡资源&将数据放入GPU中

1.查看显卡资源

2、将数据放到GPU上

三、 使用DataParallel进行多GPU训练

1、导入库

2、声明GPU

3、定义网络

4、定义网络参数

最重要的!!!在这里把模型放到GPU里!!! 

总结


前言

        随着人工智能的发展,大数据时代到来。面对大型的数据和模型训练时,我们不可避免的需要使用多GPU进行训练,接下来我将简单介绍pytorch中如何使用多GPU进行并行训练。pytorch中有两种方式进行多卡训练:

你将学习到在PyTorch中如何使用多GPU进行并行训练。在PyTorch中使用多GPU训练神经网络模型是非常简单的,PyTorch已经为我们封装好一个 nn.DataParallel 类来进行多GPU训练。


一、Pytorch多GPU并行训练的两种方式

1、DataParallel(DP)

DataParallel实现较为简单,但所有的loss都在主卡上计算,负载不均衡的问题比较严重。

2、DistributedDataParallel(DDP)

DistributedDataParallel可以支持一机多卡训练也可以支持多机多卡训练,官方也建议使用新的DistributedDataParallel,但是实现相对较为复杂。

以后有时间可以再详细讲一下如何用这种分布式的并行方法进行训练。本文主要讲解如何使用DataParallel进行GPU并行。

二、查看显卡资源&将数据放入GPU中

1.查看显卡资源

 通过输入nvidia-smi命令查看显卡的编号和使用情况

nvidia-smi

2、将数据放到GPU上

import os
os.environ['CUDA_VISIBLE_DEVICES'] = '4,5' #指定GPU编号
device = torch.device("cuda") #创建单GPU对象
net.to(device=device) #将网络放到GPU
x_train = Variable(train,requires_grad=True).to(device=device,dtype=torch.float32) #把训练变量放到GPU


三、 使用DataParallel进行多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

import os
os.environ['CUDA_VISIBLE_DEVICES'] = '4,5' #指定编号为4,5的GPU参与训练

3、定义网络

以下定义网络作为示例: 

class DNN(nn.Module):
    def __init__(self,layers):
        super().__init__()       
        'Initialise neural network as a list using nn.Modulelist'  
        self.linears = nn.ModuleList([nn.Linear(layers[i], layers[i+1]) for i in range(len(layers)-1)]) 
        self.elu = nn.ELU()     
        
    def forward(self,d):#d就是整个网络的输入
        if torch.is_tensor(d) != True:         
            d = torch.from_numpy(d)
        a = d.float()
        for i in range(len(layers)-2):
            z = self.linears[i](a) 
            a = self.elu(z)    
        a = self.linears[-1](a)
        return a

4、定义网络参数

最重要的!!!在这里把模型放到GPU里!!! 

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

#一些基本参数变量的确定以及数据格式的转换
device = torch.device("cuda") 
epochs = 1000              #迭代次数
initial_lr1 = 0.0005       #学习率
layers = [4,50,50,50,50,50,50,50,50,50,1]  #网络每一层的神经元个数
net = DNN(layers)
net = nn.DataParallel(net)
net.to(device=device)
optimizer = torch.optim.Adam(net.parameters(), lr=initial_lr1) #优化器
mseloss = nn.MSELoss(reduction='mean')     #损失函数,这里选用的是MSE。

 训练过程不需要再改变,保持自己原来的代码就OK。


总结

利用DataParallel进行多GPU训练还是很简单的,只需要在一开始导入库的时候分配好使用几块GPU,然后把模型用DataParallel进行包装就可以完成。

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
mmdetection是一个用于目标检测的开源框架。在进行多卡GPU训练时,可以使用tools/dist_train.sh中的python -m torch.distributed.launch命令。根据引用中的描述,可以通过在0号和1号显卡上挂两组实验,在2号和3号显卡上挂两组实验来进行并行训练。这是因为显存有限,无法同时在四张卡上并行四个实验。 根据引用中的描述,有时指定双卡并行时,会出现每次都只会使用0号和1号卡的情况。为了解决这个问题,可以尝试设置gpu_ids、devices或者local_rank参数来指定使用的卡号。通过网上搜索和询问同学,可以找到解决方法。 总结起来,mmdetection多卡GPU训练可以使用tools/dist_train.sh中的python -m torch.distributed.launch命令,并根据具体情况设置相关参数来指定使用的卡号。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [mmdetection使用指定的显卡号并行分布式训练](https://blog.csdn.net/qq_42897796/article/details/128106204)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [mmdetection/mmdetection3d多机多卡训练](https://blog.csdn.net/Mao_Jonah/article/details/126129362)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小薛薛snow

如果对您有帮助,请多多鼓励

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

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

打赏作者

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

抵扣说明:

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

余额充值