【深度之眼】【Pytorch打卡第17天】:GPU的使用

任务

任务简介

学习使用GPU进行加速运算;学习常见报错信息,方便调试代码。

详细说明

学习如何使用GPU进行加速模型运算,介绍Tensor和Module的to函数使用以及它们之间的差异,同时学习多GPU运算的分发并行机制。


知识点

CPU与GPU

CPU(Central Processing Unit,中央处理器):主要包括控制器运算器
GPU(Graphics Processing Unit,图形处理器):处理统一的,无依赖的大规模数据运算

二者的结构图如下,可以看到绿色部分(计算单元)GPU明显要比CPU要多。

GPU的ALU(算术运算单元)比CPU多,而CPU中的缓存区多,用于加速程序的运行,两者适用于不同的任务,计算密集型的程序和易于并行的程序通常在GPU上完成。

数据迁移至GPU

.to()函数:转换数据类型设备

x=torch.ones((3,3))#定义一个张量
x=x.to(torch.float64)#把默认的float32转换为float64
x=torch.ones(3,3)#定义一个张量
x=x.to("cuda")#迁移到GPU

linear=nn.Linear(2,2)#定义一个module
linear.to(torch.double)#把module中所有的参数从默认的float32转换为float64(double就是float64)

gpu1=torch.device("cuda")#定义设备
linear.to(gpu1)#迁移到gpu

可以看到上面两个例子中,tensor是需要用等号进行赋值的,而module是直接执行to函数即可。

Pytorch中提供了.to()方法,用于数据在CPU和GPU之间的来回切换,这里的数据通常之两类:Tensor和Module

  1. tensor.to(*args, **kwargs)
  2. module.to(*args, **kwargs)

区别:张量不执行inplace,模型执行inplace

# -*- coding: utf-8 -*-
"""
# @brief      : 数据迁移至cuda的方法
"""
import torch
import torch.nn as nn

device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")

# ========================== tensor to cuda
# flag = 0
flag = 1
if flag:
    x_cpu = torch.ones((3, 3))
    # 打印is_cuda属性, id(x_cpu)内存地址
    print("x_cpu:\ndevice: {} is_cuda: {} id: {}".format(x_cpu.device, x_cpu.is_cuda, id(x_cpu)))
	
	# 转移到GPU,然后再打印相应信息,device要看第10处,先进行判断
    x_gpu = x_cpu.to(device)
    print("x_gpu:\ndevice: {} is_cuda: {} id: {}".format(x_gpu.device, x_gpu.is_cuda, id(x_gpu)))

# 弃用
# x_gpu = x_cpu.cuda()

# ========================== module to cuda
# flag = 0
flag = 1
if flag:
    net = nn.Sequential(nn.Linear(3, 3))

    print("\nid:{} is_cuda: {}".format(id(net), next(net.parameters()).is_cuda))

    net.to(device)
    print("\nid:{} is_cuda: {}".format(id(net), next(net.parameters()).is_cuda))
# ========================== forward in cuda
# flag = 0
flag 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值