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实现的用于搜索文件并进行内容替换的类实例
Jun 28 Python
Python实现八大排序算法
Aug 13 Python
Python字典中的键映射多个值的方法(列表或者集合)
Oct 17 Python
关于Django ForeignKey 反向查询中filter和_set的效率对比详解
Dec 15 Python
Python并发:多线程与多进程的详解
Jan 24 Python
完美解决Python matplotlib绘图时汉字显示不正常的问题
Jan 29 Python
Python面向对象程序设计构造函数和析构函数用法分析
Apr 12 Python
python的pytest框架之命令行参数详解(下)
Jun 27 Python
python实现网站微信登录的示例代码
Sep 18 Python
Python常用数据分析模块原理解析
Jul 20 Python
如何用python 操作zookeeper
Dec 28 Python
基于Python实现对比Exce的工具
Apr 07 Python
使用Django实现商城验证码模块的方法
Jun 01 #Python
pytorch通过训练结果的复现设置随机种子
Jun 01 #Python
matplotlib画混淆矩阵与正确率曲线的实例代码
Jun 01 #Python
详细介绍python类及类的用法
教你怎么用PyCharm为同一服务器配置多个python解释器
用python批量解压带密码的压缩包
May 31 #Python
变长双向rnn的正确使用姿势教学
You might like
php 无限级缓存的类的扩展
2009/03/16 PHP
PHP之COOKIE支持详解
2010/09/20 PHP
CentOS 6.2使用yum安装LAMP以及phpMyadmin详解
2013/06/17 PHP
PHP将HTML转换成文本的实现代码
2015/01/21 PHP
php实现模拟post请求用法实例
2015/07/11 PHP
php获取服务器操作系统相关信息的方法
2016/10/08 PHP
实例分析PHP中PHPMailer发邮件
2017/12/13 PHP
javascript面向对象编程(一) 实例代码
2010/06/25 Javascript
JQuery 选择和过滤方法代码总结
2010/11/19 Javascript
实测jquery data()如何存值
2013/08/18 Javascript
js的alert样式如何更改如背景颜色
2014/01/22 Javascript
node.js中的http.response.write方法使用说明
2014/12/14 Javascript
基于jquery实现的仿优酷图片轮播特效代码
2016/01/13 Javascript
JavaScript入门教程之引用类型
2016/05/04 Javascript
JavaScript暂停和继续定时器的实现方法
2016/07/18 Javascript
分享十三个最佳JavaScript数据网格库
2017/04/07 Javascript
Vue实现动态响应数据变化
2017/04/28 Javascript
使用Require.js封装原生js轮播图的实现代码
2017/06/15 Javascript
从零开始搭建webpack+react开发环境的详细步骤
2018/05/18 Javascript
JS实现面向对象继承的5种方式分析
2018/07/21 Javascript
seajs和requirejs模块化简单案例分析
2019/08/26 Javascript
Chrome插件开发系列一:弹窗终结者开发实战
2020/10/02 Javascript
python获取一组汉字拼音首字母的方法
2015/07/01 Python
使用Anaconda3建立虚拟独立的python2.7环境方法
2018/06/11 Python
python绘制漏斗图步骤详解
2019/03/04 Python
Python OpenCV实现视频分帧
2019/06/01 Python
Django自定义用户登录认证示例代码
2019/06/30 Python
python mysql 字段与关键字冲突的解决方式
2020/03/02 Python
利用Python脚本批量生成SQL语句
2020/03/04 Python
如何利用Python给自己的头像加一个小国旗(小月饼)
2020/10/02 Python
详解win10下pytorch-gpu安装以及CUDA详细安装过程
2021/01/28 Python
编写html5时调试发现脚本php等网页js、css等失效
2013/12/31 HTML / CSS
党员评议表自我评价范文
2014/10/20 职场文书
品质保证书格式
2015/02/28 职场文书
SpringCloud Alibaba项目实战之nacos-server服务搭建过程
2021/06/21 Java/Android
nginx location 带斜杠【 / 】与不带的区别
2022/04/13 Servers