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 相关文章推荐
Python3实现连接SQLite数据库的方法
Aug 23 Python
python统计文本文件内单词数量的方法
May 30 Python
简单解析Django框架中的表单验证
Jul 17 Python
Python通过DOM和SAX方式解析XML的应用实例分享
Nov 16 Python
python编程通过蒙特卡洛法计算定积分详解
Dec 13 Python
python利用OpenCV2实现人脸检测
Apr 16 Python
python深度优先搜索和广度优先搜索
Feb 07 Python
windows下python和pip安装教程
May 25 Python
django 自定义过滤器的实现
Feb 26 Python
python实现Dijkstra算法的最短路径问题
Jun 21 Python
Django中密码的加密、验密、解密操作
Dec 19 Python
anaconda python3.8安装后降级
Jun 11 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
一个可以删除字符串中HTML标记的PHP函数
2006/10/09 PHP
php你的验证码安全码?
2007/01/02 PHP
php下关于Cannot use a scalar value as an array的解决办法
2010/08/08 PHP
一个简洁的PHP可逆加密函数(分享)
2013/06/06 PHP
PHP7之Mongodb API使用详解
2015/12/26 PHP
PHP使用strrev翻转中文乱码问题的解决方法
2017/01/13 PHP
Laravel 中使用简单的方法跟踪用户是否在线(推荐)
2019/10/30 PHP
UserData用法总结 lanyu出品
2010/07/01 Javascript
Grid得到选择行数据的方法总结
2011/01/17 Javascript
javascript实现日期格式转换
2014/12/16 Javascript
jquery按回车键实现表单提交的简单实例
2016/05/25 Javascript
jQuery EasyUI基础教程之EasyUI常用组件(推荐)
2016/07/15 Javascript
AngularJS实践之使用NgModelController进行数据绑定
2016/10/08 Javascript
javascript对浅拷贝和深拷贝的详解
2016/10/14 Javascript
BootStrap Table后台分页时前台删除最后一页所有数据refresh刷新后无数据问题
2016/12/28 Javascript
详解如何在vue项目中引入elementUI组件
2018/02/11 Javascript
详解vue填坑之解决部分浏览器不支持pushState方法
2018/07/12 Javascript
js中的闭包实例展示
2018/11/01 Javascript
vue  directive定义全局和局部指令及指令简写
2018/11/20 Javascript
Jquery高级应用Deferred对象原理及使用实例
2020/05/28 jQuery
vue3自定义dialog、modal组件的方法
2021/01/04 Vue.js
[01:21]辉夜杯战队访谈宣传片—CDEC
2015/12/25 DOTA
python模块之sys模块和序列化模块(实例讲解)
2017/09/13 Python
python+django+sql学生信息管理后台开发
2018/01/11 Python
用Python实现筛选文件脚本的方法
2018/10/27 Python
python 实现创建文件夹和创建日志文件的方法
2019/07/07 Python
Django 创建后台,配置sqlite3教程
2019/11/18 Python
python创建学生管理系统
2019/11/22 Python
基于PyQT实现区分左键双击和单击
2020/05/19 Python
css3实现超炫风车特效
2014/11/12 HTML / CSS
HTML5新增加标签和功能概述
2016/09/05 HTML / CSS
优秀毕业生自我鉴定
2014/01/19 职场文书
单位委托书
2014/10/15 职场文书
美德少年事迹材料(2016推荐版)
2016/02/25 职场文书
CocosCreator如何实现划过的位置显示纹理
2021/04/14 Javascript
Python开发五子棋小游戏
2022/04/28 Python