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与js)两种实现
Feb 21 Python
Python 命令行非阻塞输入的小例子
Sep 27 Python
Python3基础之条件与循环控制实例解析
Aug 13 Python
Mac下Supervisor进程监控管理工具的安装与配置
Dec 16 Python
在win和Linux系统中python命令行运行的不同
Jul 03 Python
pyQt4实现俄罗斯方块游戏
Jun 26 Python
对python 读取线的shp文件实例详解
Dec 22 Python
python脚本开机自启的实现方法
Jun 28 Python
python爬虫 execjs安装配置及使用
Jul 30 Python
Python从列表推导到zip()函数的5种技巧总结
Oct 23 Python
python 对象真假值的实例(哪些视为False)
Dec 11 Python
用Python自动清理系统垃圾的实现
Jan 18 Python
使用Django实现商城验证码模块的方法
Jun 01 #Python
pytorch通过训练结果的复现设置随机种子
Jun 01 #Python
matplotlib画混淆矩阵与正确率曲线的实例代码
Jun 01 #Python
详细介绍python类及类的用法
教你怎么用PyCharm为同一服务器配置多个python解释器
用python批量解压带密码的压缩包
May 31 #Python
变长双向rnn的正确使用姿势教学
You might like
xml+php动态载入与分页
2006/10/09 PHP
PHP脚本的10个技巧(2)
2006/10/09 PHP
php字符串截取问题
2006/11/28 PHP
PHP 网络开发详解之远程文件包含漏洞
2010/04/25 PHP
php设置允许大文件上传示例代码
2014/03/10 PHP
PHP与服务器文件系统的简单交互
2016/10/21 PHP
JS(jQuery)实现聊天接收到消息语言自动提醒功能详解【提示“您有新的消息请注意查收”】
2019/04/16 PHP
tp5框架无刷新分页实现方法分析
2019/09/26 PHP
让你的CSS像Jquery一样做筛选的实现方法
2011/07/10 Javascript
jquery命令汇总,方便使用jquery的朋友
2012/06/26 Javascript
页面元素绑定jquery toggle后元素隐藏的解决方法
2014/03/27 Javascript
JavaScript中数据结构与算法(二):队列
2015/06/19 Javascript
只要1K 纯JS脚本送你一朵3D红色玫瑰
2016/08/09 Javascript
canvas实现动态小球重叠效果
2017/02/06 Javascript
简述vue中的config配置
2018/01/23 Javascript
vue脚手架搭建项目的兼容性配置详解
2018/07/17 Javascript
JS判断字符串是否为整数的方法--简单的正则判断
2018/07/23 Javascript
JS实现简单的文字无缝上下滚动功能示例
2019/06/22 Javascript
nodejs实现的http、https 请求封装操作示例
2020/02/06 NodeJs
Vue 实现v-for循环的时候更改 class的样式名称
2020/07/17 Javascript
vuex Module将 store 分割成模块的操作
2020/12/07 Vue.js
Python使用urllib2获取网络资源实例讲解
2013/12/02 Python
Python常用随机数与随机字符串方法实例
2015/04/09 Python
python实现逆波兰计算表达式实例详解
2015/05/06 Python
python中csv文件的若干读写方法小结
2018/07/04 Python
Python玩转Excel的读写改实例
2019/02/22 Python
Python openpyxl读取单元格字体颜色过程解析
2019/09/03 Python
python对接ihuyi实现短信验证码发送
2020/05/10 Python
什么是python的id函数
2020/06/11 Python
浅谈html5与APP混合开发遇到的问题总结
2018/03/20 HTML / CSS
美国最大的电子宠物训练产品制造商:PetSafe
2018/10/12 全球购物
团拜会策划方案
2014/06/07 职场文书
素质教育标语
2014/06/27 职场文书
教师个人自我剖析材料
2014/09/29 职场文书
2016新年问候语大全
2015/11/11 职场文书
小学六一儿童节活动开幕词
2016/03/04 职场文书