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生态系统(Python新手入门指导)
Dec 11 Python
python 3.5下xadmin的使用及修复源码bug
May 10 Python
使用python生成目录树
Mar 29 Python
Flask框架WTForm表单用法示例
Jul 20 Python
python Django中models进行模糊查询的示例
Jul 18 Python
提升Python效率之使用循环机制代替递归函数
Jul 23 Python
Python yield的用法实例分析
Mar 06 Python
Selenium自动化测试工具使用方法汇总
Jun 12 Python
浅析Python 字符编码与文件处理
Sep 24 Python
Scrapy 配置动态代理IP的实现
Sep 28 Python
python文件路径操作方法总结
Dec 21 Python
matplotlib交互式数据光标mpldatacursor的实现
Feb 03 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实现更新中间关联表数据的两种方法
2014/09/01 PHP
Yii框架form表单用法实例
2014/12/04 PHP
图文详解phpstorm配置Xdebug进行调试PHP教程
2016/06/13 PHP
Zend Framework框架实现类似Google搜索分页效果
2016/11/25 PHP
PHP多进程编程实例详解
2017/07/19 PHP
jquery keypress,keyup,onpropertychange键盘事件
2010/06/25 Javascript
javascript中的3种继承实现方法
2016/01/27 Javascript
简单讲解AngularJS的Routing路由的定义与使用
2016/03/05 Javascript
轻松掌握JavaScript享元模式
2016/08/27 Javascript
基于Javascript实现文件实时加载进度的方法
2016/10/12 Javascript
Angular的$http的ajax的请求操作(推荐)
2017/01/10 Javascript
angularjs封装$http为factory的方法
2017/05/18 Javascript
jQuery Jsonp跨域模拟搜索引擎
2017/06/17 jQuery
Vue 多层组件嵌套二种实现方式(测试实例)
2017/09/08 Javascript
vue 项目打包通过命令修改 vue-router 模式 修改 API 接口前缀
2018/06/13 Javascript
vue表单自定义校验规则介绍
2018/08/28 Javascript
小程序获取当前位置加搜索附近热门小区及商区的方法
2019/04/08 Javascript
微信小程序实现语音识别转文字功能及遇到的坑
2019/08/02 Javascript
VUE项目初建和常见问题总结
2019/09/12 Javascript
JavaScript实现多文件下载方法解析
2020/08/07 Javascript
js前端对于大量数据的展示方式及处理方法
2020/12/02 Javascript
python随机生成指定长度密码的方法
2015/04/04 Python
举例讲解Python程序与系统shell交互的方式
2015/04/09 Python
python实现字符串和日期相互转换的方法
2015/05/13 Python
python爬虫之快速对js内容进行破解
2019/07/09 Python
python 画条形图(柱状图)实例
2020/04/24 Python
耐克中国官方商城:Nike中国
2018/10/18 全球购物
美国购买体育赛事门票网站:TicketCity
2019/03/06 全球购物
英国蛋糕装饰用品一站式商店:Craft Company
2019/03/18 全球购物
个人自我鉴定
2013/11/07 职场文书
12岁生日感言
2014/01/21 职场文书
赢在中国观后感
2015/06/02 职场文书
教你怎么用PyCharm为同一服务器配置多个python解释器
2021/05/31 Python
mybatis中注解与xml配置的对应关系和对比分析
2021/08/04 Java/Android
如何在python中实现ECDSA你知道吗
2021/11/23 Python
SpringBoot Http远程调用的方法
2022/08/14 Java/Android