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 pickle类库介绍(对象序列化和反序列化)
Nov 21 Python
Python实现进程同步和通信的方法
Jan 02 Python
hmac模块生成加入了密钥的消息摘要详解
Jan 11 Python
Python logging模块用法示例
Aug 28 Python
Python 互换字典的键值对实例
Feb 12 Python
使用python绘制二元函数图像的实例
Feb 12 Python
python实现简单五子棋游戏
Jun 18 Python
PyQt5 窗口切换与自定义对话框的实例
Jun 20 Python
python全栈知识点总结
Jul 01 Python
Django中的用户身份验证示例详解
Aug 07 Python
Python如何读取、写入JSON数据
Jul 28 Python
Python中Permission denied的解决方案
Apr 02 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+xml实现在线英文词典之添加词条的方法
2015/01/23 PHP
php实现兼容2038年后Unix时间戳转换函数
2015/03/18 PHP
php源码分析之DZX1.5字符串截断函数cutstr用法
2015/06/17 PHP
php错误日志简单配置方法
2016/07/11 PHP
解决form中action属性后面?传递参数 获取不到的问题
2017/07/21 PHP
document.all还是document.getElementsByName?
2006/07/21 Javascript
简单的js分页脚本
2009/05/21 Javascript
jQuery选择头像并实时显示的代码
2010/06/27 Javascript
Json对象替换字符串占位符实现代码
2010/11/17 Javascript
jquery 之 $().hover(func1, funct2)使用方法
2012/06/14 Javascript
滚动图片效果 jquery实现回旋滚动效果
2013/01/08 Javascript
jQuery+css实现图片滚动效果(附源码)
2013/03/18 Javascript
基于javascript实现的搜索时自动提示功能
2014/12/26 Javascript
JavaScript中用于生成随机数的Math.random()方法
2015/06/15 Javascript
jQuery的Scrollify插件实现滑动到页面下一节点
2015/07/05 Javascript
JS设置下拉列表框当前所选值的方法
2015/12/22 Javascript
使用jQuery监听DOM元素大小变化
2016/02/24 Javascript
浅谈angularJS中的事件
2016/07/12 Javascript
浅谈关于.vue文件中style的scoped属性
2017/08/19 Javascript
关于vue项目中搜索节流的实现代码
2019/09/17 Javascript
element-ui table组件如何使用render属性的实现
2019/11/04 Javascript
Vue的v-model的几种修饰符.lazy,.number和.trim的用法说明
2020/08/05 Javascript
Python中关于Sequence切片的下标问题详解
2017/06/15 Python
Python使用win32com模块实现数据库表结构自动生成word表格的方法
2018/07/17 Python
flask中的wtforms使用方法
2018/07/21 Python
python验证身份证信息实例代码
2019/05/06 Python
用openCV和Python 实现图片对比,并标识出不同点的方式
2019/12/19 Python
500行python代码实现飞机大战
2020/04/24 Python
W Concept美国:精选全球独立设计师
2017/02/22 全球购物
全神贯注教学反思
2014/02/03 职场文书
党风廉设责任书
2014/04/16 职场文书
学生期末评语大全
2014/04/30 职场文书
英语课前三分钟演讲稿
2014/08/19 职场文书
2014年班级工作总结
2014/11/14 职场文书
会议欢迎词
2015/01/23 职场文书
零基础学java之带参数以及返回值的方法
2022/04/10 Java/Android