分布式训练 -GPU训练

起初为调用大规模的模型训练,单卡GPU是不够使用的,需要借用服务器的多GPU使用。就会涉及到单机多卡,多机多卡的使用。在这里记录一下使用的方式和踩过的一些坑。文中若有不足,请多多指正。

由于分布式的内容较多,笔者准备分几篇来讲一次下深度学习的分布式训练,深度学习的框架使用的是Pytorch框架。

----1.分布式训练的理论基础

----2.GPU训练

----3.单机多卡的使用 DP,DDP

----4.多机多卡的使用 DDP

首先第一个问题:我们为什么要用GPU训练? GPU 训练有哪些好处?
不急不急,让我们带着问题慢慢来看这篇文章。
大家有时间的话可以看看这个视频,Nvidia发布的一个关于GPU和CPU对比的视频,看完后会有一丝丝的感受。
还有一个自身的感受,在做一些实验的时候,刚开始为了跑一下,在自己实验室电脑上(没有装GPU)跑一轮花费20分钟。当时的心情直接崩溃,后来转到实验室的工作站上,显卡是3090。一轮只需要20秒,恩,你没有看错,得确实20秒。差距不是一般的大。

很简单的理解:GPU的出现就是加速计算,节约时间。

有很多博主详细的讨论了CPU和GPU的区别,有想要看的小伙伴可以点解下面的链接:

CPU和GPU跑深度学习差别有多大

今天我们详细来讨论一下Pytorch中如何使用GPU来训练我们自己的神经网络:

理论

在这里插入图片描述
在这里插入图片描述
Pytorch中想要进行张量的计算,就必须都在CPU或者都在GPU上,不可以一个在GPU,一个在CPU上,这样会直接报错!!!

那么Pytorch是如何解决数据是在CPU合适GPU上这个问题的呢?

to 函数:

在这里插入图片描述
注意,to函数的对象要么是你的数据Tensor,要么是你的模型Module

举个例子:

在这里插入图片描述
第1个例子:to函数用来转换数据的类型。第3个例子:to函数用来转换模型的数据类型。

第2个例子:to函数把数据x迁移到GPU上。第4个例子:to函数把模型迁移到GPU上。

区别:张量不执行inplace(执行之后重新构建一个新的张量),模型执行inplace(执行之后不重新构建一个新的张量)。

例1:Tensor cuda 的使用

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

# ========================== tensor to cuda
# flag = 0
flag = 1
if flag:
    x_cpu = torch.ones((3, 3))
    print("x_cpu:\ndevice: {} is_cuda: {} id: {}".format(x_cpu.device, x_cpu.is_cuda, id(x_cpu)))

    x_gpu = x_cpu.to(device)
    print("x_gpu:\ndevice: {} is_cuda: {} id: {}".format(x_gpu.device, x_gpu.is_cuda, id(x_gpu)))

结果:
在这里插入图片描述

这段代码首先创建一个张量x,先放在CPU里面,之后再把它迁移到GPU里面,我们打印一些信息看看。注意,两次的结果id不一样,正好说明了代码重新构建了一个新的张量x。
注意这里有个值得说明的地方是你可能还听说过x_gpu = x_cpu.cuda()这个指令,但这是PyTorch 0.x的用法,所以弃用了。

例2:Module cuda 的使用

flag = 1
if flag:
    net = nn.Sequential(nn.Linear(3, 3))

    print("\nid:{} is_cuda: {}".format(id(net), next(net.parameters()).is_cuda))

    net.to(device)
    print("\nid:{} is_cuda: {}".format(id(net), next(net.parameters()).is_cuda))

结果:
在这里插入图片描述

这段代码首先创建一个Module,先放在CPU里面,之后再把它迁移到GPU里面,我们打印一些信息看看。注意,两次的结果id一样,正好说明了代码不重新构建了一个新的张量x。

例3:数据模型全进GPU

flag = 1
if flag:
    output 
  • 7
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值