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编程中运用闭包时所需要注意的一些地方
May 02 Python
Python读写unicode文件的方法
Jul 10 Python
Python开发之快速搭建自动回复微信公众号功能
Apr 22 Python
Python 出现错误TypeError: ‘NoneType’ object is not iterable解决办法
Jan 12 Python
理解python中生成器用法
Dec 20 Python
Django模型序列化返回自然主键值示例代码
Jun 12 Python
Python爬虫 urllib2的使用方法详解
Sep 23 Python
Python 音频生成器的实现示例
Dec 24 Python
Python 读取WAV音频文件 画频谱的实例
Mar 14 Python
Django实现前台上传并显示图片功能
May 29 Python
python文件读取失败怎么处理
Jun 23 Python
详解如何修改jupyter notebook的默认目录和默认浏览器
Jan 24 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分页显示制作详细讲解
2008/11/19 PHP
php获取网页上所有链接的方法
2015/04/03 PHP
在WordPress中使用PHP脚本来判断访客来自什么国家
2015/12/10 PHP
浅谈PHP中其他类型转化为Bool类型
2016/03/28 PHP
yii2.0整合阿里云oss删除单个文件的方法
2017/09/19 PHP
原生js做的手风琴效果的导航菜单
2013/11/08 Javascript
jquery下div 的resize事件示例代码
2014/03/09 Javascript
使用jquery实现以post打开新窗口
2014/03/19 Javascript
AngularJS入门教程之迭代器过滤详解
2016/08/18 Javascript
Jquery根据浏览器窗口改变调整大小的方法
2017/02/07 Javascript
移动端web滚动分页的实现方法
2017/05/05 Javascript
详解如何在Angular中快速定位DOM元素
2017/05/17 Javascript
javascript实现二叉树的代码
2017/06/08 Javascript
微信小程序的日期选择器的实例详解
2017/09/29 Javascript
Vue组件和Route的生命周期实例详解
2018/02/10 Javascript
微信小程序实现通过js操作wxml的wxss属性示例
2018/12/06 Javascript
关于angular引入ng-zorro的问题浅析
2020/09/09 Javascript
[03:18]DOTA2放量测试专访820:希望玩家加入国服大家庭
2013/08/25 DOTA
[00:05]ChinaJoy现场 DOTA2玩家高呼“CN DOTA BEST DOTA”
2019/08/04 DOTA
利用Python获取操作系统信息实例
2016/09/02 Python
一份python入门应该看的学习资料
2018/04/11 Python
使用pandas将numpy中的数组数据保存到csv文件的方法
2018/06/14 Python
python获取磁盘号下盘符步骤详解
2019/06/19 Python
使用Python opencv实现视频与图片的相互转换
2019/07/08 Python
python用线性回归预测股票价格的实现代码
2019/09/04 Python
解决torch.autograd.backward中的参数问题
2020/01/07 Python
matlab中imadjust函数的作用及应用举例
2020/02/27 Python
HTML5页面中尝试调起APP功能
2017/09/12 HTML / CSS
岗位职责定义及内容
2013/11/08 职场文书
办公自动化专业大学生职业规划书
2014/03/06 职场文书
道德演讲稿
2014/05/21 职场文书
新员工考核评语
2014/12/31 职场文书
博士给导师的自荐信
2015/03/06 职场文书
游戏开发中如何使用CocosCreator进行音效处理
2021/04/14 Javascript
MySQL 慢查询日志深入理解
2021/04/22 MySQL
如何使JavaScript休眠或等待
2021/04/27 Javascript