Pytorch数据结构:GPU加速

文章目录

    • 一、GPU加速
      • 1. 检查GPU可用性:
      • 2. GPU不可用需要具体查看问题
      • 3. 指定设备
      • 4.将张量和模型转移到GPU
      • 5.执行计算:
      • 6.将结果转移回CPU
    • 二、转移原理
      • 1. 数据和模型的存储
      • 2. 数据传输
      • 3. 计算执行
      • 4. 设备管理
      • 5.小结
    • 三、to方法的参数类型

一、GPU加速

  • .to(device)方法:
    • device是指定的设备,如果'cpu''cuda'等。使用字符串'cpu'torch.device('cpu')对象在功能上是等价的
    • .to()方法可以将数据传输到指定设备的存储空间中,如CPU内存:主存,GPU内存:显存。之后计算则会在对应设备上计算。这个数据
    • .to()方法是Pytorch中张量tensor或模型继承自torch.nn.Module的类等中实现的方法,但是基本Python数据类型没有该方法。
    • 它的参数允许你指定目标设备、数据类型,以及其他几个选项,以适应不同的需求。

  GPU加速是在深度学习和其他高性能计算任务中非常重要的技术。GPU(图形处理器)具有并行处理能力,能够同时处理成千上万的计算任务,这使得它们非常适合于执行深度学习模型的训练和推理过程,因为这些过程往往涉及到大量的矩阵和向量运算。

  在PyTorch中,使用GPU加速可以显著提高张量运算的速度。这是通过将张量和模型从CPU传输到GPU来实现的。使用GPU加速,特别是在处理大型深度学习模型和数据集时,可以显著减少训练和推理时间。不过,值得注意的是,这需要你有一个支持CUDA的NVIDIA GPU。此外,与CPU相比,GPU上的内存(通常称为显存)可能更少,这可能限制你一次能处理的数据量大小。因此,在设计模型和选择批量大小时,需要考虑到显存的限制。

以下是一些基本步骤,展示了如何在PyTorch中使用GPU加速:

1. 检查GPU可用性:

首先,你需要检查GPU是否可用。

  • torch.cuda.is_available()函数来检查系统是否有可用的CUDA支持的GPU
  • torch.cuda.device_count()函数来检查系统有多少个可用GPU设备
import torch
# 检测系统中是否有可用的GPU
print("检测系统中是否有可用的GPU:",torch.cuda.is_available())if torch.cuda.is_available():# 输出可用的GPU设备数量print(f"GPU可用,可用的GPU设备数量:{torch.cuda.device_count()}")# 输出每个可用GPU设备的名称for i in range(torch.cuda.device_count()):print(f"GPU设备{i}: {torch.cuda.get_device_name(i)}")

在这里插入图片描述

2. GPU不可用需要具体查看问题

如果没有安装gpu版本的torch,则需要安装,并且在安装时,注意cuda的版本:命令行中输入nvidia-smi,可以查看可以安装的最高cuda版本。
在这里插入图片描述

torch+cuda安装教程
下载NVIDIA驱动程序教程。
如果你已经安装了Pytorch等,在执行命令行下载时,建议新建虚拟环境并可以添加--force-reinstall选项来强制重新安装PyTorch及其相关库:

pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117 --force-reinstall --user

用以下命令查看是否可用,以及torch版本是否正确

print("检测系统中是否有可用的GPU:",torch.cuda.is_available())
print(torch.__version__)

在这里插入图片描述

3. 指定设备

一旦确认GPU可用,你可以定义一个设备对象,用于后续将张量和模型转移到GPU。例如,device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")。这里"cuda:0"表示使用第一个CUDA支持的GPU,如果GPU不可用,则回退到CPU。

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

4.将张量和模型转移到GPU

你可以使用.to(device)方法将张量和模型转移到指定的设备(GPU或CPU)。例如,tensor_gpu = tensor.to(device)model.to(device)。这样,张量和模型的所有计算都将在GPU上进行,从而利用其并行计算能力加速运算。其中tensor和model分别是torch中定义的张量和模型。

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
x=torch.tensor([1,1,2,3]).to(device)
x=torch.tensor([1,1,2,3]).to(torch.device("cpu"))
x=torch.tensor([1,1,2,3]).to('cuda')#直接转移至GPU

如果没有GPU还要转移到GPU上,会产生如下报错:AssertionError: Torch not compiled with CUDA enabled
在这里插入图片描述

5.执行计算:

在张量和模型转移到GPU后,你可以正常执行计算。计算会自动在GPU上进行,利用其高性能加速计算过程。

6.将结果转移回CPU

如果需要将结果转回CPU,可以使用.to('cpu')方法。例如,result_cpu = result_gpu.to('cpu')

device=torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
x=torch.tensor([11,2,5,6]).to(device)
result=x*2
#以上tensor计算都在GPU上#将结果转入cpu,以后处理在CPU上
result=result.to('cpu')
result=result*2

二、转移原理

将张量或模型转移到GPU以及将结果转回CPU,是深度学习中常见的做法,用于利用GPU进行高速计算的同时,确保与其他不支持GPU计算的操作或数据兼容。这一过程的背后原理涉及数据在不同硬件设备之间的传输,以及计算设备的管理。

1. 数据和模型的存储

首先,了解CPU和GPU 有各自独立的内存空间 是很重要的:

  • CPU内存:通常称为主内存,由RAM(随机存取存储器)构成,用于存储程序运行中需要的数据和指令。也就是说计算机的内存是用CPU处理的,并且内存到磁盘的转移也需要用CPU协调。
  • GPU内存:也称为显存,是专门为GPU设计的,用于存储GPU处理的数据,比如渲染图形的纹理数据或进行科学计算的矩阵。

2. 数据传输

当你将一个张量或模型“转移到GPU”时,实际上是将数据从CPU内存复制到GPU内存。相应地,从GPU“转回”数据到CPU也涉及到一个从GPU内存到CPU内存的复制过程。这些操作通常通过PCI Express (PCIe)总线完成,PCIe是一种高速串行计算机扩展总线标准,用于连接主板和外部设备,比如GPU。

3. 计算执行

  • 在GPU上执行计算:将数据或模型转移到GPU后,CUDA或其他GPU加速库可以利用GPU的并行计算能力执行复杂的数学运算,如矩阵乘法、卷积等操作,这些操作是深度学习中的基本构件。
  • 处理结果:计算完成后,通常需要将结果数据从GPU内存复制回CPU内存,以便进行进一步的处理或分析,因为某些操作可能只能在CPU上执行,或者你需要将数据保存到磁盘,这通常是通过CPU来完成的。

4. 设备管理

在PyTorch等深度学习框架中,通过特定的API(应用程序接口,比如一些函数,我们只会使用,不会其实现原理这就是一种接口)调用来管理数据在设备之间的移动。例如,使用.to(device)方法指定数据或模型应该在哪个设备上运算。这种灵活性允许开发者编写设备无关的代码,框架负责在后台处理数据的移动和计算设备的选择。

5.小结

  • 转移至GPU:是一个数据从CPU内存复制到GPU内存的过程,旨在利用GPU的并行计算能力加速运算。
  • 转回至CPU:是将数据从GPU内存复制回CPU内存的过程,以便进行非GPU加速的操作或持久化存储。

这一过程核心在于,不同的计算任务根据其特性和所需的计算资源,可以在最适合的硬件上执行,从而优化整体的计算效率和性能。如果需要快速计算,那么计算时,将计算的数据放入GPU内存用GPU处理,计算完如果需要进入内存,存入磁盘等操作,那么就再把数据放入CPU内存(主存),然后在处理。

三、to方法的参数类型

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/596922.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PyCharm使用指南(个性化设置、开发必备插件、常用快捷键)

🥇作者简介:CSDN内容合伙人、新星计划第三季Python赛道Top1 🔥本文已收录于Python系列专栏: 零基础学Python 💬订阅专栏后可私信博主进入Python学习交流群,进群可领取Python视频教程以及Python相关电子书合…

【话题】程序员35岁会失业吗?

大家好,我是全栈小5,欢迎阅读小5的系列文章,这是《话题》系列文章 目录 背景招聘分析一、技术更新换代的挑战二、经验与技术的双重优势三、职业发展的多元化选择四、个人成长与职业规划的平衡五、结语文章推荐 背景 35岁被认为是程序员职业生…

#{} 和 ${}区别

1、参数是Integer类型时候没区别(#是预编译SQL,$是即时SQL) 2、当参数是String类型时,就会出错了 (1)这是$的报错信息,因为我们的参数admin并没有加引号所以不满足字符串条件 (2)正确的SQL &am…

Python实现获取某手视频评论【自动生成did】

今天在获取某手视频评论的时候,总是会出发风控导致web_did失效,就算登录了也没用,还会导致账号被风控,app端抓包和逆向难度又大,那么有没有一种不需要登录而且不会出发风控的方法来获取评论列表呢?当然有&a…

Dev c++ C语言实现第一个 dll 动态链接库 创建与调用

代码来源: 极简版 C 动态链接库(DLL)创建与调用 - 知乎 (zhihu.com) 现在移植到Devc 里 首先创建DLL 项目,如果不创建,直接粘贴代码编译不通过,应该是项目里指定了链接类型。 如图: 然后选择…

重磅!天途推出平安校园管理平台

天途平安校园管理平台,是围绕校园安全事件开发的一款智能监控与巡逻系统。系统通过大疆机场、无人机和校园内的监控硬件等多端传输的视频和图片信息,经过 AI分析处理后形成告警信息并及时通知学校安保人员。 天途平安校园管理平台 平安校园管理平台优势 …

【动态规划】【01背包】Leetcode 416. 分割等和子集

【动态规划】【01背包】Leetcode 416. 分割等和子集 ---------------🎈🎈416. 分割等和子集 题目链接🎈🎈------------------- 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集&#xff0…

第一次在msf控制台中运行search命令提示Module database cache not built yet问题解决

0x00 问题描述 在新装的kali虚拟机中使用msfconsole执行search命令时提示Module database cache not built yet问题,显然,是我们相关的数据库缓存存在问题。 故障现象: 0x01 启动数据库服务 msf中的search功能是基于postgresql来实现的&am…

各类系统业务功能架构图整理

一、前言 很多软件系统一直经久不衰,主要这些系统都是一些生产工作经营不可或缺的系统。比如财务系统,商城系统,支付系统,供应链系统,人力资源管理系统,ERP系统等等。这些系统不管大公司还是小公司往往都需…

HTML5.Canvas简介

1. Canvas.getContext getContext(“2d”)是Canvas元素的方法,用于获取一个用于绘制2D图形的绘图上下文对象。在给定的代码中,首先通过getElementById方法获取id为"myCanvas"的Canvas元素,然后使用getContext(“2d”)方法获取该Ca…

信号处理之(文件批处理+小波分解+波形图的生成)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、前期准备工作之数据自动读取二、前期准备工作之信号分解(小波分解)三、前期准备工作之数据可视化(波形图展示&#xff0…