Pytorch如何切换 cpu和gpu的使用详解
前言,在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内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
相关推荐
-
pytorch中 gpu与gpu、gpu与cpu 在load时相互转化操作
问题描述 有时在加载已训练好的模型时,会出现 out of memory 的错误提示,但仔细检测使用的GPU卡并没有再用且内存也没有超出. 经查阅发现原来是训练模型时使用的GPU卡和加载时使用的GPU卡不一样导致的.个人感觉,因为pytorch的模型中是会记录有GPU信息的,所以有时使用不同的GPU加载时会报错. 解决方法 gpu之间的相互转换.即,将训练时的gpu卡转换为加载时的gpu卡. torch.load('modelparameters.pth', map_location={'cud
-
pytorch 实现张量tensor,图片,CPU,GPU,数组等的转换
1, 创建pytorch 的Tensor张量: torch.rand((3,224,224)) #创建随机值的三维张量,大小为(3,224,224) torch.Tensor([3,2]) #创建张量,[3,2] 2, cpu上的tensor和GPU即pytorch创建的tensor的相互转化 b = a.cpu() # GPU → CPU a = b.cuda() #CPU → GPU 3, tensor和numpy的转化 b = a.numpy() # tensor转化为 numpy数组 a
-
将Pytorch模型从CPU转换成GPU的实现方法
最近将Pytorch程序迁移到GPU上去的一些工作和思考 环境:Ubuntu 16.04.3 Python版本:3.5.2 Pytorch版本:0.4.0 0. 序言 大家知道,在深度学习中使用GPU来对模型进行训练是可以通过并行化其计算来提高运行效率,这里就不多谈了. 最近申请到了实验室的服务器来跑程序,成功将我简陋的程序改成了"高大上"GPU版本. 看到网上总体来说少了很多介绍,这里决定将我的一些思考和工作记录下来. 1. 如何进行迁移 由于我使用的是Pytorch写的模型,网上给
-
Pytorch如何切换 cpu和gpu的使用详解
前言,在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 很多贴子中说
-
Pytorch 多块GPU的使用详解
注:本文针对单个服务器上多块GPU的使用,不是多服务器多GPU的使用. 在一些实验中,由于Batch_size的限制或者希望提高训练速度等原因,我们需要使用多块GPU.本文针对Pytorch中多块GPU的使用进行说明. 1. 设置需要使用的GPU编号 import os os.environ["CUDA_VISIBLE_DEVICES"] = "0,4" ids = [0,1] 比如我们需要使用第0和第4块GPU,只用上述三行代码即可. 其中第二行指程序只能看到第1
-
基于Pytorch版yolov5的滑块验证码破解思路详解
前言 本文将使用pytorch框架的目标识别技术实现滑块验证码的破解.我们这里选择了yolov5算法 例:输入图像 输出图像 可以看到经过检测之后,我们能很准确的定位到缺口的位置,并且能得到缺口的坐标,这样一来我们就能很轻松的实现滑动验证码的破解. 一.前期工作 yolov系列是常用的目标检测算法,yolov5不仅配置简单,而且在速度上也有不小的提升,我们很容易就能训练我们自己的数据集. YOLOV5 Pytorch版本GIthub网址感谢这位作者的代码. 下载之后,是这样的格式 ---data
-
Pytorch自定义CNN网络实现猫狗分类详解过程
目录 前言 一. 数据预处理 二. 定义网络 三. 训练模型 前言 数据集下载地址: 链接: https://pan.baidu.com/s/17aglKyKFvMvcug0xrOqJdQ?pwd=6i7m Dogs vs. Cats(猫狗大战)来源Kaggle上的一个竞赛题,任务为给定一个数据集,设计一种算法中的猫狗图片进行判别. 数据集包括25000张带标签的训练集图片,猫和狗各125000张,标签都是以cat or dog命名的.图像为RGB格式jpg图片,size不一样.截图如下: 一.
-
PyTorch: 梯度下降及反向传播的实例详解
线性模型 线性模型介绍 线性模型是很常见的机器学习模型,通常通过线性的公式来拟合训练数据集.训练集包括(x,y),x为特征,y为目标.如下图: 将真实值和预测值用于构建损失函数,训练的目标是最小化这个函数,从而更新w.当损失函数达到最小时(理想上,实际情况可能会陷入局部最优),此时的模型为最优模型,线性模型常见的的损失函数: 线性模型例子 下面通过一个例子可以观察不同权重(w)对模型损失函数的影响. #author:yuquanle #data:2018.2.5 #Study of Linear
-
pytorch中tensor.expand()和tensor.expand_as()函数详解
tensor.expend()函数 >>> import torch >>> a=torch.tensor([[2],[3],[4]]) >>> print(a.size()) torch.Size([3, 1]) >>> a.expand(3,2) tensor([[2, 2], [3, 3], [4, 4]]) >>> a tensor([[2], [3], [4]]) 可以看出expand()函数括号里面为变形
-
PyTorch中clone()、detach()及相关扩展详解
clone() 与 detach() 对比 Torch 为了提高速度,向量或是矩阵的赋值是指向同一内存的,这不同于 Matlab.如果需要保存旧的tensor即需要开辟新的存储地址而不是引用,可以用 clone() 进行深拷贝, 首先我们来打印出来clone()操作后的数据类型定义变化: (1). 简单打印类型 import torch a = torch.tensor(1.0, requires_grad=True) b = a.clone() c = a.detach() a.data *=
-
Python机器学习pytorch模型选择及欠拟合和过拟合详解
目录 训练误差和泛化误差 模型复杂性 模型选择 验证集 K折交叉验证 欠拟合还是过拟合? 模型复杂性 数据集大小 训练误差和泛化误差 训练误差是指,我们的模型在训练数据集上计算得到的误差. 泛化误差是指,我们将模型应用在同样从原始样本的分布中抽取的无限多的数据样本时,我们模型误差的期望. 在实际中,我们只能通过将模型应用于一个独立的测试集来估计泛化误差,该测试集由随机选取的.未曾在训练集中出现的数据样本构成. 模型复杂性 在本节中将重点介绍几个倾向于影响模型泛化的因素: 可调整参数的数量.当可调
-
支持PyTorch的einops张量操作神器用法示例详解
目录 基础用法 高级用法 今天做visual transformer研究的时候,发现了einops这么个神兵利器,决定大肆安利一波. 先看链接:https://github.com/arogozhnikov/einops 安装: pip install einops 基础用法 einops的强项是把张量的维度操作具象化,让开发者"想出即写出".举个例子: from einops import rearrange # rearrange elements according to the
-
docker 使用GPU的过程详解
目录 下载tf-gpu 基于拉的tf-gpu镜像构建自己的镜像 启动镜像检查GPU是否可用 以TensorFlow2.0为例 下载tf-gpu 在docker hub里选择要下载的tf版本(注意选带GPU和py3的) https://hub.docker.com/r/tensorflow/tensorflow/ 如: docker pull tensorflow/tensorflow:2.0.3-gpu-py3 如果上述下载超时,可以配置清华源. 或者通过如下命令下载: docker pull
随机推荐
- 如何在ASP里建立表格?
- iOS实现自定义日期选择器示例
- Oracle PL/SQL入门慨述
- .Net WInform开发笔记(三)谈谈自制控件(自定义控件)
- PHP下获取上个月、下个月、本月的日期(strtotime,date)
- Thinkphp搭建包括JS多语言的多语言项目实现方法
- php制作中间带自己定义图片二维码的方法
- ThinkPHP后台首页index使用frameset时的注意事项分析
- Android 中构建快速可靠的 UI 测试
- 深入浅析Nginx实现AJAX跨域请求问题
- js+xml生成级联下拉框代码
- 实例讲解jquery中mouseleave和mouseout的区别
- js随机密码产生函数
- sql server自动生成拼音首字母的函数
- Hibernate管理Session和批量操作分析
- 为jQuery添加Webkit的触摸的方法分享
- jQuery实现页面倒计时并刷新效果
- Android 两种启动模式的实例详解
- 解析DHCP
- IntelliJ Idea SpringBoot 数据库增删改查实例详解