Pytorch如何切换 cpu和gpu的使用详解


Posted in Python onMarch 01, 2021

前言,在pytorch中,当服务器上的gpu被占用时,很多时候我们想先用cpu调试下代码,那么就需要进行gpu和cpu的切换。

方法1:x.to(device)

把 device 作为一个可变参数,推荐使用argparse进行加载:

使用gpu时:

device='cuda'
x.to(device) # x是一个tensor,传到cuda上去

使用cpu时:

device='cpu'
x.to(device)

方法2:使用x.cuda()+CUDA_VISIBLE_DEVICES

很多贴子中说,使用x.cuda() 和x.to('cuda') 虽然是等效的,但是x.cuda() 的缺点是无法动态切换cpu。然而,其实配合命令行参数CUDA_VISIBLE_DEVICES 是可以进行切换的。

在服务器上创建一个python脚本 t.py:

import torch
print(torch.cuda.device_count()) # 可用gpu数量
print(torch.cuda.is_available()) # 是否可用gpu

首先先看一下,正常运行的情况:

  • 执行命令:python t.py
  • 输出结果:因为服务器上有两个gpu,所以是我们想要的结果。

2
True

如果想要只使用某一块gpu,只需要在执行前加一个参数:

  • CUDA_VISIBLE_DEVICES=0 python t.py,例如,我们要使用gpu 0
  • 接下来看看输出什么:是的!程序中确实只可见了一块gpu~

1
True

下面,如果我们想使用cpu呢?

  • CUDA_VISIBLE_DEVICES="" python t.py
  • 输出结果:可以看到,虽然服务器上有2块cpu,通过我们设置执行参数,程序中也成功看不到了!

0
False

因此,回归正题,当我们使用x.cuda()进行分配gpu时,只需要使用torch.cuda.is_available()加一个判断即可,当想使用cpu的时候在执行程序的命令行参数进行控制:

if torch.cuda.is_available():
  x= x.cuda()

到此这篇关于Pytorch如何切换 cpu和gpu的使用详解的文章就介绍到这了,更多相关Pytorch切换cpu和gpu内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python使用metaclass实现Singleton模式的方法
May 05 Python
在Python程序中操作文件之isatty()方法的使用教程
May 24 Python
Python中的zipfile模块使用详解
Jun 25 Python
如何用itertools解决无序排列组合的问题
May 18 Python
python函数式编程学习之yield表达式形式详解
Mar 25 Python
Python基于递归实现电话号码映射功能示例
Apr 13 Python
python对list中的每个元素进行某种操作的方法
Jun 29 Python
Python PIL读取的图像发生自动旋转的实现方法
Jul 05 Python
Python实现数值积分方式
Nov 20 Python
Python时间差中seconds和total_seconds的区别详解
Dec 26 Python
python中有函数重载吗
May 28 Python
python的json包位置及用法总结
Jun 21 Python
python爬取股票最新数据并用excel绘制树状图的示例
Mar 01 #Python
python中openpyxl和xlsxwriter对Excel的操作方法
Mar 01 #Python
python中random模块详解
Mar 01 #Python
利用python实现汉诺塔游戏
Mar 01 #Python
python绘制汉诺塔
Mar 01 #Python
彻底解决pip下载pytorch慢的问题方法
Mar 01 #Python
Python 里最强的地图绘制神器
Mar 01 #Python
You might like
社区(php&&mysql)六
2006/10/09 PHP
PHP开发负载均衡指南
2010/07/17 PHP
PHP7实现和CryptoJS的AES加密方式互通示例【AES-128-ECB加密】
2019/06/08 PHP
thinkphp5+layui实现的分页样式示例
2019/10/08 PHP
js类中的公有变量和私有变量
2008/07/24 Javascript
JavaScript类库D
2010/10/24 Javascript
基于jquery的15款幻灯片插件
2011/04/10 Javascript
js 金额文本框实现代码
2012/02/14 Javascript
今天是星期几的4种JS代码写法
2013/09/17 Javascript
学习javascript面向对象 掌握创建对象的9种方式
2016/01/04 Javascript
基于bootstrap的选择框插件icheck
2016/12/23 Javascript
JavaScript获取中英文混合字符串长度的方法示例
2017/02/04 Javascript
vue-router 学习快速入门
2017/03/01 Javascript
vue.js开发环境安装教程
2017/03/17 Javascript
ionic实现底部分享功能
2017/05/11 Javascript
详谈js原型继承的一些问题
2017/09/06 Javascript
基于jquery trigger函数无法触发a标签的两种解决方法
2018/01/06 jQuery
Vue项目中使用Vux的安装过程
2018/05/01 Javascript
jQuery中each和js中forEach的区别分析
2019/02/27 jQuery
使用Three.js实现太阳系八大行星的自转公转示例代码
2019/04/09 Javascript
[01:35]辉夜杯战队访谈宣传片—LGD
2015/12/25 DOTA
在Python中使用模块的教程
2015/04/27 Python
Python读大数据txt
2016/03/28 Python
打包发布Python模块的方法详解
2016/09/18 Python
python2.x实现人民币转大写人民币
2018/06/20 Python
深入浅析Python中list的复制及深拷贝与浅拷贝
2018/09/03 Python
解决c++调用python中文乱码问题
2020/07/29 Python
查找适用于matplotlib的中文字体名称与实际文件名对应关系的方法
2021/01/05 Python
HTML5 Canvas绘制五星红旗
2016/05/04 HTML / CSS
德国婴儿服装和婴儿用品购买网站:Baby Sweets
2019/12/08 全球购物
物业管理个人自我评价
2013/11/08 职场文书
商场消防演习方案
2014/02/12 职场文书
党性教育心得体会
2014/09/03 职场文书
2014年质量工作总结
2014/11/22 职场文书
2015年音乐教研组工作总结
2015/07/22 职场文书
解决golang在import自己的包报错的问题
2021/04/29 Golang