pytorch 两个GPU同时训练的解决方案


Posted in Python onJune 01, 2021

使用场景

我有两个GPU卡。我希望我两个GPU能并行运行两个网络模型。

代码

错误代码1:

#对于0号GPU
os.environ['CUDA_VISIBLE_DEVICES']='0,1'
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
#对于1号GPU
os.environ['CUDA_VISIBLE_DEVICES']='0,1'
device = torch.device("cuda:1" if torch.cuda.is_available() else "cpu")

0号GPU不报错,1号GPU报错。错误如下

RuntimeError: Expected tensor for argument #1 ‘input' to have the same device as tensor for argument #2 ‘weight'; but device 0 does not equal 1 (while checking arguments for cudnn_convolution)

错误代码2:

#对于0号GPU
os.environ['CUDA_VISIBLE_DEVICES']='0'
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
#对于1号GPU
os.environ['CUDA_VISIBLE_DEVICES']='1'
device = torch.device("cuda:1" if torch.cuda.is_available() else "cpu")

0号GPU不报错,1号GPU报错。错误如下

CUDA: invalid device ordinal

正确代码如下:

#对于0号GPU
os.environ['CUDA_VISIBLE_DEVICES']='0'
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
#对于1号GPU
os.environ['CUDA_VISIBLE_DEVICES']='1'
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")

pytorch 多个gpu遇到的问题

目前所在学校的计算机系自己搭建了个GPU Farm,设备是GTX 1080 Ti的,看起来还算ok,但其实细究起来还挺鸡肋的。但是总对于数据量巨大的项目,还是需要跑代码吧,将就着用了。因为资源有限,分配到超过1个gpu需要排队,所以从来没尝试过使用多个gpu。最近由于数据量变大,也急于取得进展,因此开始尝试分配多个gpu。使用的过程中出现的问题,在此做个记录。

首先,因为不同平台的GPU Farm搭建的规则不一样,如何分配到多个gpu在此就不做记录了。不得不说,学校的GPU Farm资源少的可怜,分配到2个gpu常常要排队半小时。

以下罗列遇到的问题。

torch.nn.DataParallel()

因为对pytorch的理解还不够深,因此为了提高速度,从官网上注意到DataParallel,据说最简单的方法是直接用

model = torch.nn.DataParallel(model)
model.cuda()

来实现,但是万万没想到它给我带来的时间浪费还真不是一星半点。

首先我分配到了2个gpu设备,之后在我的代码中只添加了如上的命令,而后便收到了如下报错

ValueError: only one element tensors can be converted to Python scalars

这个报错直指我的 loss.item(),通过debug我发现它的tensor dimension的确变成了2个elements。在做了更多无效debug和上网查阅之后,我鬼使神差地调整回了1个gpu想看看效果会不会不一样,然后居然顺利运行了。

稍微思考一下,感觉倒是很合理。假设两个gpu并行同时各自训练一个batch,那么得到的loss自然应该是2个elements,浅显地认为将其看做两个batch训练的loss结果就可以了。

目前手头有比较急于出结果的数据集和项目,因此暂时没有过多的时间去研究具体为什么会有这种情况的出现,不过这也证实了想要合理正确地运用多个gpu同时作业,显然不是那么简单地几行代码就能解决的。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现批量将word转html并将html内容发布至网站的方法
Jul 14 Python
Python使用SocketServer模块编写基本服务器程序的教程
Jul 12 Python
Python实现获取本地及远程图片大小的方法示例
Jul 21 Python
Python中按值来获取指定的键
Mar 04 Python
浅谈python的输入输出,注释,基本数据类型
Apr 02 Python
python批量下载抖音视频
Jun 17 Python
使用pyecharts生成Echarts网页的实例
Aug 12 Python
python sqlite的Row对象操作示例
Sep 11 Python
python3 tcp的粘包现象和解决办法解析
Dec 09 Python
Python-numpy实现灰度图像的分块和合并方式
Jan 09 Python
通过实例解析Python return运行原理
Mar 04 Python
Python 字符串池化的前提
Jul 03 Python
使用Django实现商城验证码模块的方法
Jun 01 #Python
pytorch通过训练结果的复现设置随机种子
Jun 01 #Python
matplotlib画混淆矩阵与正确率曲线的实例代码
Jun 01 #Python
详细介绍python类及类的用法
教你怎么用PyCharm为同一服务器配置多个python解释器
用python批量解压带密码的压缩包
May 31 #Python
变长双向rnn的正确使用姿势教学
You might like
一些星际专用术语解释
2020/03/04 星际争霸
PHP base64编码后解码乱码的解决办法
2014/06/19 PHP
PHP sdk实现在线打包代码示例
2020/12/09 PHP
clientX,pageX,offsetX,x,layerX,screenX,offsetLeft区别分析
2010/03/12 Javascript
jQuery powerFloat万能浮动层下拉层插件使用介绍
2010/12/27 Javascript
Javascript浅谈之this
2013/12/17 Javascript
javascript 闭包详解
2015/07/02 Javascript
Bootstrap每天必学之导航条
2015/11/27 Javascript
jQuery ajax分页插件实例代码
2016/01/27 Javascript
深入理解jQuery之防止冒泡事件
2016/05/24 Javascript
AngularJS 视图详解及示例代码
2016/08/17 Javascript
jquery实现下拉框多选方法介绍
2017/01/03 Javascript
node.js实现复制文本到剪切板的功能
2017/01/23 Javascript
简单的网页广告特效实例
2017/08/19 Javascript
Vue.js实现可配置的登录表单代码详解
2018/03/29 Javascript
一个Vue页面的内存泄露分析详解
2018/06/25 Javascript
nodejs遍历文件夹下并操作HTML/CSS/JS/PNG/JPG的方法
2018/11/01 NodeJs
微信小程序使用swiper组件实现层叠轮播图
2018/11/04 Javascript
JS中的算法与数据结构之队列(Queue)实例详解
2019/08/20 Javascript
json_decode 索引为数字时自动排序问题解决方法
2020/03/28 Javascript
node.js通过Sequelize 连接MySQL的方法
2020/12/28 Javascript
python显示天气预报
2014/03/02 Python
理解Python垃圾回收机制
2016/02/12 Python
python验证码识别实例代码
2018/02/03 Python
Django框架首页和登录页分离操作示例
2019/05/28 Python
python交互模式基础知识点学习
2020/06/18 Python
经验丰富程序员才知道的8种高级Python技巧
2020/07/27 Python
基于python tkinter的点名小程序功能的实例代码
2020/08/22 Python
python 从list中随机取值的方法
2020/11/16 Python
英国领先的野生鸟类食品供应商:GardenBird
2018/08/09 全球购物
医学专业毕业生个人求职信
2013/12/25 职场文书
保卫钓鱼岛口号
2014/06/20 职场文书
食品安全演讲稿
2014/09/01 职场文书
员工年终自我评价
2014/09/14 职场文书
2016自主招生校长推荐信范文
2015/03/23 职场文书
市语委办2016年第十九届“推普周”活动总结
2016/04/05 职场文书