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 with的用法
Aug 22 Python
在Python中使用pngquant压缩png图片的教程
Apr 09 Python
Python实现提取文章摘要的方法
Apr 21 Python
Python实现堆排序的方法详解
May 03 Python
python定向爬取淘宝商品价格
Feb 27 Python
Python实现的绘制三维双螺旋线图形功能示例
Jun 23 Python
pyhanlp安装介绍和简单应用
Feb 22 Python
PyTorch之图像和Tensor填充的实例
Aug 18 Python
python输出带颜色字体实例方法
Sep 01 Python
python多进程并行代码实例
Sep 30 Python
python statsmodel的使用
Dec 21 Python
pytorch 运行一段时间后出现GPU OOM的问题
Jun 02 Python
使用Django实现商城验证码模块的方法
Jun 01 #Python
pytorch通过训练结果的复现设置随机种子
Jun 01 #Python
matplotlib画混淆矩阵与正确率曲线的实例代码
Jun 01 #Python
详细介绍python类及类的用法
教你怎么用PyCharm为同一服务器配置多个python解释器
用python批量解压带密码的压缩包
May 31 #Python
变长双向rnn的正确使用姿势教学
You might like
Thinkphp中volist标签mod控制一定记录的换行BUG解决方法
2014/11/04 PHP
Zend Framework路由器用法实例详解
2016/12/11 PHP
thinkphp5+layui实现的分页样式示例
2019/10/08 PHP
ExtJS TabPanel beforeremove beforeclose使用说明
2010/03/31 Javascript
JQuery 自定义CircleAnimation,Animate方法学习笔记
2011/07/10 Javascript
window.parent与window.openner区别介绍
2012/04/12 Javascript
JavaScript 布尔操作符解析  && || !
2012/08/10 Javascript
Js中获取frames中的元素示例代码
2013/07/30 Javascript
js style动态设置table高度
2014/10/21 Javascript
JavaScript中Number.MIN_VALUE属性的使用示例
2015/06/04 Javascript
JS正则截取两个字符串之间及字符串前后内容的方法
2017/01/06 Javascript
使用nvm管理不同版本的node与npm的方法
2017/10/31 Javascript
JavaScript解析机制与闭包原理实例详解
2019/03/08 Javascript
详解关于JSON.parse()和JSON.stringify()的性能小测试
2019/03/14 Javascript
H5实现手机拍照和选择上传功能
2019/12/18 Javascript
Python求解平方根的方法
2015/03/11 Python
使用python实现tcp自动重连
2017/07/02 Python
Python使用zip合并相邻列表项的方法示例
2018/03/17 Python
详谈python在windows中的文件路径问题
2018/04/28 Python
opencv python 傅里叶变换的使用
2018/07/21 Python
matplotlib给子图添加图例的方法
2018/08/03 Python
使用python实现滑动验证码功能
2019/08/05 Python
使用Django实现把两个模型类的数据聚合在一起
2020/03/28 Python
某/etc/fstab文件中的某行如下: /dev/had5 /mnt/dosdata msdos defaults,usrquota 1 2 请解释其含义
2013/09/18 面试题
学前教育毕业生自荐信范文
2013/12/24 职场文书
通信工程专业毕业生推荐信
2013/12/25 职场文书
中国好声音华少广告词
2014/03/17 职场文书
电子商务专业毕业生求职信
2014/06/12 职场文书
大学计划书范文800字
2014/08/14 职场文书
小城镇建设汇报材料
2014/08/16 职场文书
区域销售经理岗位职责
2015/04/02 职场文书
上市公司财务总监岗位职责
2015/04/03 职场文书
稽核岗位职责范本
2015/04/13 职场文书
关于车尾的标语大全
2015/08/11 职场文书
2016年教师节贺卡寄语
2015/12/04 职场文书
Anaconda安装pytorch及配置PyCharm 2021环境
2021/06/04 Python