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抓取网页中图片并保存到本地
Dec 01 Python
编写Python爬虫抓取暴走漫画上gif图片的实例分享
Apr 20 Python
python获取程序执行文件路径的方法(推荐)
Apr 26 Python
Python操作mongodb的9个步骤
Jun 04 Python
朴素贝叶斯分类算法原理与Python实现与使用方法案例
Jun 26 Python
Python爬虫爬取新浪微博内容示例【基于代理IP】
Aug 03 Python
pycharm配置pyqt5-tools开发环境的方法步骤
Feb 11 Python
python调用matlab的m自定义函数方法
Feb 18 Python
Django 限制访问频率的思路详解
Dec 24 Python
python实现xlwt xlrd 指定条件给excel行添加颜色
Jul 14 Python
python抢购软件/插件/脚本附完整源码
Mar 04 Python
只需要100行Python代码就可以实现的贪吃蛇小游戏
May 27 Python
使用Django实现商城验证码模块的方法
Jun 01 #Python
pytorch通过训练结果的复现设置随机种子
Jun 01 #Python
matplotlib画混淆矩阵与正确率曲线的实例代码
Jun 01 #Python
详细介绍python类及类的用法
教你怎么用PyCharm为同一服务器配置多个python解释器
用python批量解压带密码的压缩包
May 31 #Python
变长双向rnn的正确使用姿势教学
You might like
我的论坛源代码(五)
2006/10/09 PHP
php smarty模版引擎中的缓存应用
2009/12/11 PHP
php中使用getimagesize获取图片、flash等文件的尺寸信息实例
2014/04/29 PHP
2款PHP无限级分类实例代码
2015/11/11 PHP
PHP实现发送邮件的方法(基于简单邮件发送类)
2015/12/17 PHP
PHP中header用法小结
2016/05/23 PHP
phpmailer绑定邮箱的实现方法
2016/12/01 PHP
PHP FileSystem 文件系统常用api整理总结
2019/07/12 PHP
javascript 定义初始化数组函数
2009/09/07 Javascript
基于Jquery的简单图片切换效果
2011/01/06 Javascript
js新闻滚动 js如何实现新闻滚动效果
2013/01/07 Javascript
jQuery通过点击行来删除HTML表格行的实现示例
2014/09/10 Javascript
JavaScript实现基于Cookie的存储类实例
2015/04/10 Javascript
JavaScript使用encodeURI()和decodeURI()获取字符串值的方法
2015/08/04 Javascript
详解Document.Cookie
2015/12/25 Javascript
Bootstrap table分页问题汇总
2016/05/30 Javascript
全面了解javascript中的错误处理机制
2016/07/18 Javascript
微信小程序  modal弹框组件详解
2016/10/27 Javascript
JavaScript & jQuery完美判断图片是否加载完毕
2017/01/08 Javascript
Nodejs高扩展性的模板引擎 functmpl简介
2017/02/13 NodeJs
原生JS京东轮播图代码
2017/03/22 Javascript
uploader秒传图片到服务器完整代码
2017/04/22 Javascript
EL表达式截取字符串的函数说明
2017/09/22 Javascript
jQuery简单实现对数组去重及排序操作实例
2017/10/31 jQuery
JS实现读取xml内容并输出到div中的方法示例
2018/04/19 Javascript
使用Promise封装小程序wx.request的实现方法
2019/11/13 Javascript
Array.filter中如何正确使用Async
2020/11/04 Javascript
[03:43]2014DOTA2西雅图国际邀请赛 newbee战队巡礼
2014/07/07 DOTA
python动态参数用法实例分析
2015/05/25 Python
python输出结果刷新及进度条的实现操作
2020/07/13 Python
python 实现ping测试延迟的两种方法
2020/12/10 Python
CSS3 网页下拉菜单代码解释 中文翻译
2010/02/27 HTML / CSS
绩效管理实施方案
2014/03/19 职场文书
初中生庆国庆演讲稿范文2014
2014/09/25 职场文书
2014流动人口计划生育工作总结
2014/12/20 职场文书
python字典进行运算原理及实例分享
2021/08/02 Python