pytorch 如何用cuda处理数据

1 设置GPU的一些操作

设置在os端哪些GPU可见,如果不可见,那肯定是不能够调用的~

import os
GPU = '0,1,2'
os.environ['CUDA_VISIBLE_DEVICES'] =GPU

torch.cuda.is_available()查看cuda是否可用。

if torch.cuda.is_available():
         torch.backends.cudnn.benchmark = True
        '''
        如果网络的输入数据维度或类型上变化不大,设置 torch.backends.cudnn.benchmark = true
        可以增加运行效率;
  如果网络的输入数据在每次 iteration 都变化的话,会导致 cnDNN 每次都会去寻找一遍最优配置,
  这样反而会降低运行效率。
  这下就清晰明了很多了。

        Benchmark模式会提升计算速度,但是由于计算中有随机性,每次网络前馈结果略有差异。
   torch.backends.cudnn.benchmark = True
     如果想要避免这种结果波动,设置:
  torch.backends.cudnn.deterministic = True
        '''

这句话也很常见,设置默认的device,优先gpu。

device = 'cuda' if torch.cuda.is_available() else 'cpu'

cpu挪到gpu

# 也可以是 device = torch.device('cuda:0')
device = torch.device('cuda')
a = torch.tensor([1,2,3])
b = a.to(device )
print(a)
print(b)

out:

tensor([1, 2, 3])

tensor([1, 2, 3], device='cuda:0')

判断变量是否基于GPU。

a.is_cuda

查看有几个可用GPU。

torch.cuda.device_count()

查看GPU算力

# 返回gpu最大和最小计算能力,是一个tuple
torch.cuda.get_device_capability()

设置默认哪一个GPU运算。

# 里面输入int类型的数字
torch.cuda.set_device()

抓取指定gpu的全名。

if torch.cuda.is_available():
    device = torch.device('cuda')
    print('Using GPU: ', torch.cuda.get_device_name(0))

out:

'GeForce GTX 1050'

2 直接在gpu创建

方法一:

a = torch.ones(3,4,device="cuda")
print(a)

out:

tensor([[1., 1., 1., 1.],
        [1., 1., 1., 1.],
        [1., 1., 1., 1.]], device='cuda:0')

方法二:

a = torch.cuda.FloatTensor(3, 4)
print(a)

out:

tensor([[-1., -1., -1., -1.],
        [-1., -1., -1., -1.],
        [-1., -1., -1., -1.]], device='cuda:0')

3 从cpu转移到gpu

方法一:tensor.to()

a = torch.ones(3,4)
b = a.to("cuda")
print(a)
print(b)

out:

tensor([[1., 1., 1., 1.],
        [1., 1., 1., 1.],
        [1., 1., 1., 1.]])
tensor([[1., 1., 1., 1.],
        [1., 1., 1., 1.],
        [1., 1., 1., 1.]], device='cuda:0')

注意:.to()不仅可以转移device,还可以修改数据类型,比如:a.to(torch.double)

方法二:tensor.cuda()

a = torch.tensor([1., 2.]).cuda()

方法三:tensor.type()

dtype = torch.cuda.FloatTensor
x = torch.rand(2,2).type(dtype)

方法四:torch.from_numpy(np_labels).cuda()

wm_labels = torch.from_numpy(np_labels).cuda()

4 在cuda中训练模型

在默认情况下,模型参数的优化(即训练)是在cpu上进行的,如果想要挪到GPU,得做如下修改:

import torch.nn as nn
#假设前面已经定义好了模型
#创建模型
Hidnet = UnetGenerator_mnist()
#把模型放入GPU
Hidnet = nn.DataParallel(Hidnet.cuda())
#查看模型参数
list(Hidnet.parameters())[0]

out:

Parameter containing:
tensor([[[[ 0.1315,  0.0562,  0.1186],
          [-0.1158,  0.1394, -0.0399],
          [ 0.1728,  0.1051, -0.1034]],

[[ 0.1702, -0.1208, -0.1134],
          [-0.1449,  0.1912,  0.1727],
          [ 0.1562,  0.1601,  0.1055]],

[[ 0.1031, -0.0062, -0.0068],
          [-0.0453,  0.1150,  0.0366],
          [ 0.0680, -0.1234, -0.0988]]]], device='cuda:0', requires_grad=True)

可以看到 device=‘cuda:0' 啦

pytorch 查看cuda 版本

由于pytorch的whl 安装包名字都一样,所以我们很难区分到底是基于cuda 的哪个版本。

有一条指令可以查看

import torch
print(torch.version.cuda)

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • pytorch中.to(device) 和.cuda()的区别说明

    原理 .to(device) 可以指定CPU 或者GPU device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") # 单GPU或者CPU model.to(device) #如果是多GPU if torch.cuda.device_count() > 1: model = nn.DataParallel(model,device_ids=[0,1,2]) model.to(

  • 将pytorch的网络等转移到cuda

    神经网络一般用GPU来跑,我们的神经网络框架一般也都安装的GPU版本,本文就简单记录一下GPU使用的编写. GPU的设置不在model,而是在Train的初始化上. 第一步是查看是否可以使用GPU self.GPU_IN_USE = torch.cuda.is_available() 就是返回这个可不可以用GPU的函数,当你的pytorch是cpu版本的时候,他就会返回False. 然后是: self.device = torch.device('cuda' if self.GPU_IN_USE

  • pytorch model.cuda()花费时间很长的解决

    解决方法之一: 如果pytorch在进行model.cuda()操作需要花费的时间很长,长到你怀疑GPU的速度了,那就是不正常的. 如果你用的pytorch版本是0.3.0,升级到0.3.1就好了! .cuda()加载时间很长的其他解决方法 方法一: pip install --upgrade --force-reinstall http://download.pytorch.org/whl/cu80/torch-0.2.0.post3-cp27-cp27mu-manylinux1_x86_64

  • PyTorch CUDA环境配置及安装的步骤(图文教程)

    Pytorch版本介绍 torch:1.6 CUDA:10.2 cuDNN:8.1.0 ✨安装 NVIDIA 显卡驱动程序 一般 电脑出厂/装完系统 会自动安装显卡驱动 如果有 可直接进行下一步 下载链接 http://www.nvidia.cn/Download/index.aspx?lang=cn 选择和自己显卡相匹配的显卡驱动 下载安装 ✨确认项目所需torch版本 # pip install -r requirements.txt # base ---------------------

  • Linux安装Pytorch1.8GPU(CUDA11.1)的实现

    先说下自己之前的环境(都是Linux系统,差别不大): Centos7.6 NVIDIA Driver Version 440.33.01(等会需要更新驱动) CUDA10.1 Pytorch1.6/1.7 提示,如果想要保留之前的PyTorch1.6或1.7的环境,请不要卸载CUDA环境,可以通过Anaconda管理不同的环境,互不影响.但是需要注意你的NVIDIA驱动版本是否匹配. 在这里能够看到官方给的对应CUDA版本所需使用驱动版本. 通过上表可以发现,如果要使用CUDA11.1,那么需

  • pytorch 如何用cuda处理数据

    1 设置GPU的一些操作 设置在os端哪些GPU可见,如果不可见,那肯定是不能够调用的~ import os GPU = '0,1,2' os.environ['CUDA_VISIBLE_DEVICES'] =GPU torch.cuda.is_available()查看cuda是否可用. if torch.cuda.is_available(): torch.backends.cudnn.benchmark = True ''' 如果网络的输入数据维度或类型上变化不大,设置 torch.bac

  • PyTorch中的CUDA的操作方法

    目录 前言 一.常见CPU和GPU操作命令 二.CPU和GPU设备上的Tensor 1.Tensor从CPU拷贝到GPU上 2.直接在GPU上创建Tensor 3.CUDA Streams 三.固定缓冲区 四.自动设备感知 1.适配CPU和GPU设备 2.模型迁移到GPU设备 前言 CUDA(Compute Unified Device Architecture)是NVIDIA推出的异构计算平台,PyTorch中有专门的模块torch.cuda来设置和运行CUDA相关操作.本地安装环境为Wind

  • pytorch 调整某一维度数据顺序的方法

    在pytorch中,Tensor是以引用的形式存在的,故而并不能直接像python交换数据那样 a = torch.Tensor(3,4) a[0],a[1] = a[1],a[0] # 这会导致a的结果为a=(a[1],a[1],a[2]) # 而非预期的(a[1],a[0],a[2]) 这是因为引用赋值导致的,在交换过程,如下所示,当b的值赋值与a的时候,因为tmp指针与a是同一变量的不同名,故而tmp的内容也会变为b. # 交换a,b a,b = b,a # 等价于 tmp = a a =

  • pytorch制作自己的LMDB数据操作示例

    本文实例讲述了pytorch制作自己的LMDB数据操作.分享给大家供大家参考,具体如下: 前言 记录下pytorch里如何使用lmdb的code,自用 制作部分的Code code就是ASTER里数据制作部分的代码改了点,aster_train.txt里面就算图片的完整路径每行一个,图片同目录下有同名的txt,里面记着jpg的标签 import os import lmdb # install lmdb by "pip install lmdb" import cv2 import n

  • pytorch 批次遍历数据集打印数据的例子

    我就废话不多说了,直接上代码吧! from os import listdir import os from time import time import torch.utils.data as data import torchvision.transforms as transforms from torch.utils.data import DataLoader def printProgressBar(iteration, total, prefix='', suffix='', d

  • pytorch 数据处理:定义自己的数据集合实例

    数据处理 版本1 #数据处理 import os import torch from torch.utils import data from PIL import Image import numpy as np #定义自己的数据集合 class DogCat(data.Dataset): def __init__(self,root): #所有图片的绝对路径 imgs=os.listdir(root) self.imgs=[os.path.join(root,k) for k in imgs

  • pytorch判断是否cuda 判断变量类型方式

    我就废话不多说了,那就直接看代码吧~ inputs = Variable(torch.randn(2,2)) inputs.is_cuda # will return false inputs = Variable(torch.randn(2,2).cuda()) inputs.is_cuda # returns true 判断: torch.is_tensor() #如果是pytorch的tensor类型返回true torch.is_storage() # 如果是pytorch的storag

  • Pytorch用Tensorboard来观察数据

    目录 1.Tensorboard 1.使用add_scalar()输入代码 2.使用add_image()输入代码 上一章讲数据的处理,这一章讲数据处理之后呈现的结果,即你有可能看到Loss的走向等,这样方便我们调试代码. 1.Tensorboard 有两个常用的方法: 一个是add_scalar()显:示曲线 一个是add_image()显示图像 首先安装Tensorboard 在你的编译环境(conda activate XXX)中输入命令 pip install tensorboard 1

  • PyTorch device与cuda.device用法

    1 查看当前的device 输入情况: import torch print("Default Device : {}".format(torch.Tensor([4, 5, 6]).device)) 输出情况: Default Device : cpu 2 cpu设备可以使用“cpu:0”来指定 输入情况 device = torch.Tensor([1, 2, 3], device="cpu:0").device print("Device Type:

  • PyTorch 使用torchvision进行图片数据增广

    目录 使用torchvision来进行图片的数据增广 1. 读取图片 2. 图片增广 2.1 图片水平翻转 2.2 图片上下翻转 2.3 图片旋转 2.4 中心裁切 2.5 随机裁切 2.6 随机裁切并修改尺寸 2. 7 修改图片颜色 3. 训练数据集加载 使用torchvision来进行图片的数据增广 数据增强就是增强一个已有数据集,使得有更多的多样性.对于图片数据来说,就是改变图片的颜色和形状等等.比如常见的: 左右翻转,对于大多数数据集都可以使用:上下翻转:部分数据集不适合使用:图片切割:

随机推荐