动手学深度学习17 使用和购买gpu

动手学深度学习16 Pytorch神经网络基础)

  • 5. GPU
  • colab
  • NVIDIA GPU
  • QA
    • 显存

5. GPU

课件: https://zh-v2.d2l.ai/chapter_deep-learning-computation/use-gpu.html

有GPU+装cuda。

把模型参数放到指定设备上。

# 5.6. GPU
# !nvidia-smi  
# 在命令行中,感叹号(!)通常用于执行系统命令或外部程序。在这个上下文中,
# `!nvidia-smi`表示你正在执行一个名为`nvidia-smi`的系统命令,它通常用于显示关于NVIDIA GPU的信息,比如当前使用情况、显存占用等。
# 能查看cuda版本。

# 5.6.1. 计算设备 查看设备
import torch
from torch import nn
# cuda:0和cuda是等价的
print(torch.device('cpu'), torch.device('cuda'), torch.device('cuda:1'))
print(torch.cuda.device('cuda'))
# cpu cuda cuda:1
# torch.device('cpu'), torch.device('cuda'), torch.device('cuda:1')
# (device(type='cpu'), device(type='cuda'), device(type='cuda', index=1))
# 查询可用gpu的数量  nvidia-smi 查看  编号从0开始
print(torch.cuda.device_count()) # 1

def try_gpu(i=0):
  """如果存在,则返回gpu(i),否则返回cpu()"""
  if torch.cuda.device_count() >= i+1:
    return torch.device(f'cuda:{i}')
  return torch.device('cpu')

def try_all_gpus():
  """返回所有可用的GPU,如果没有GPU,则返回[cpu(),]"""
  devices = [torch.device(f'cuda:{i}') for i in range(torch.cuda.device_count())]
  return devices if devices else [torch.device('cpu')]

print(try_gpu(), try_gpu(10), try_all_gpus()) # cpu cpu [device(type='cpu')]
# try_gpu(), try_gpu(10), try_all_gpus()
# (device(type='cpu'), device(type='cpu'), [device(type='cpu')])

# 5.6.2. 张量与GPU
x = torch.tensor([1, 2, 3])
print(x.device)  # cpu 默认情况下,张量是在CPU上创建的 
# device(type='cpu')
# 无论何时我们要对多个项进行操作, 它们都必须在同一个设备上。 
# 例如,如果我们对两个张量求和, 我们需要确保两个张量都位于同一个设备上, 
# 否则框架将不知道在哪里存储结果,甚至不知道在哪里执行计算

# 5.6.2.1. 存储在GPU上
X = torch.ones(2, 3, device=try_gpu())
print(X)
# X
# tensor([[1., 1., 1.],
#     [1., 1., 1.]], device='cuda:0')

Y = torch.rand(2, 3, device=try_gpu(1)) # 只有1张卡 所以传1的话if判断不成立 所以用的是cpu
print(Y)
# tensor([[0.7767, 0.8478, 0.6001],
#     [0.4728, 0.8607, 0.5628]])

# 5.6.2.2. 复制
# print(X+Y) # RuntimeError: Expected all tensors to be on the same device, but found at least two devices, cuda:0 and cpu!
Z = Y.cuda(0)
print(Y)
# tensor([[0.7767, 0.8478, 0.6001],
#     [0.4728, 0.8607, 0.5628]])
print(Z)
# tensor([[0.7767, 0.8478, 0.6001],
#     [0.4728, 0.8607, 0.5628]], device='cuda:0')
print(X+Z) # X+Y 会发生在XY所在的device中
# tensor([[1.7767, 1.8478, 1.6001],
#     [1.4728, 1.8607, 1.5628]], device='cuda:0')
# 假设变量Z已经存在于第二个GPU上。 如果我们还是调用Z.cuda(1)会发生什么? 它将返回Z,而不会复制并分配新内存。不会自己再copy一份自己。
print(Z.cuda(0) is Z) # True

# 在CPU和GPU之间传数据是很慢的事情。

# 5.6.3. 神经网络与GPU
net = nn.Sequential(nn.Linear(3,1))
# net.to(device) 挪到指定device上
net = net.to(device=try_gpu())
print(net(X))
# tensor([[0.5205],
#     [0.5205]], device='cuda:0', grad_fn=<AddmmBackward0>)
# 确认模型参数存储和模型、输入数据都在同一个GPU上。
print(net[0].weight.data.device) # cuda:0
# device(type='cuda', index=0)
cpu cuda cuda:1
1
cuda:0 cpu [device(type='cuda', index=0)]
cpu
tensor([[1., 1., 1.],
        [1., 1., 1.]], device='cuda:0')
tensor([[0.3054, 0.6903, 0.9338],
        [0.3610, 0.6394, 0.2725]])
tensor([[0.3054, 0.6903, 0.9338],
        [0.3610, 0.6394, 0.2725]])
tensor([[0.3054, 0.6903, 0.9338],
        [0.3610, 0.6394, 0.2725]], device='cuda:0')
tensor([[1.3054, 1.6903, 1.9338],
        [1.3610, 1.6394, 1.2725]], device='cuda:0')
True
tensor([[0.2109],
        [0.2109]], device='cuda:0', grad_fn=<AddmmBackward0>)
cuda:0

colab

免费GPU资源,每月限时。
在这里插入图片描述

NVIDIA GPU

云GPU比真实GPU贵5-6倍。
买新的不买旧的。8G内存就可以了。内存很贵。内存对深度学习不是那么有用。
找GPU。

QA

1: 显存比cpu内存要贵,越大越好,但越大越贵
2:gpu存在性能的上限,通过不断加核的数量突破摩尔定律。
3: 跑训练的时候显存不够用,但是把batchsize调小,cuda占用又变小, 可以把模型调小一点。
4:长时间满负荷对显卡没有影响,但是要注意显卡的温度,不要长时间高于80°。
5:有显卡,但是torch.cuda.device_count()=0 ,可能原因:1是可能cuda没装好,可以看下显卡信息nvidia-smi。2可能是装的cpu版本的pytorch,需要装成gpu版本的pytorch。
6:一般在net() work之前,把数据data放到设备上to gpu。数据格式的变化和读取可能不一定gpu设备上计算快。
7:to(device) 是model的组件 net().to(device), 是把模型或数据copy到gpu device 上。
8:gpu推理,就是inference,不在gpu上forward,不做训练–算梯度-。
9:GPU使用率69%-70%,使用率还可以。GPU速度不明显可以看看网络或者机器本身性能问题。
10:nvidia训练的模型,不建议在其他GPU上跑。
11:apple M1 gpu和cpu共用内存,都在一个芯片里面, 主要看内存带宽。
12: cuda 编译cuda的编译器。
13:GPU上的推理通常比训练好一些,不是内存的关键,可以把batchsize设置大一些。
14:自定义的网络结构,每次创建一个实例是会创建新的参数,不把同一个实例放在不同位置,是不会共享参数的。

显存

显存是指显卡上的内存,用于存储图形数据、纹理、帧缓冲区等信息。它在计算机图形处理和深度学习等领域中扮演着重要角色。以下是关于显存的具体介绍:

  1. 作用

    • 存储图像和视频数据:显存可以存储屏幕上显示的图像、视频和其他图形数据。
    • 加速图形处理:显存中存储了图形处理单元(GPU)需要的数据,可以加速图形渲染和处理过程。
    • 支持多显示器:显存可以同时存储多个显示器所需的图像数据,支持多显示器配置。
    • 训练深度学习模型:在深度学习中,显存用于存储模型参数、中间计算结果等,支持大规模模型的训练和推理。
  2. 类型

    • GDDR(Graphics Double Data Rate):主要用于显卡的显存,具有较高的带宽和传输速度,适合处理图形数据和计算任务。
    • HBM(High Bandwidth Memory):高带宽内存,提供更高的带宽和能效,常用于高性能计算和深度学习加速器。
  3. 容量

    • 显存容量通常以GB(Gigabyte)为单位,不同显卡型号的显存容量会有所不同,从几GB到数十GB不等。
    • 大容量显存适合处理大规模数据和复杂图形任务,如高分辨率图像处理、大规模模型训练等。
  4. 使用场景

    • 游戏:显存对于游戏性能至关重要,足够的显存可以存储大量的纹理、模型和渲染数据,提供流畅的游戏体验。
    • 深度学习:在深度学习中,显存用于存储神经网络的参数、中间结果和计算图,支持大规模模型的训练和推理。
    • 科学计算:对于需要大量计算和数据处理的科学计算任务,显存可以加速计算过程并提高计算效率。

总的来说,显存在图形处理、深度学习和高性能计算等领域都起着重要作用,其容量和性能直接影响着相关任务的执行效率和效果。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

VictoriaMetrics

概念 介绍 VictoriaMetrics&#xff0c;是一个快速高效、经济并且可扩展的监控解决方案和时序数据库 本文均用VM简称VictoriaMetric 作用 用于作为prometheus的长期储存方案&#xff0c;代替prometheus存储监控采集的数据 优点 远程存储&#xff1a;可作为单一或多个Pro…

matlab使用1-基础

matlab使用1-基础 文章目录 matlab使用1-基础1. 界面介绍2. matlab变量3. matlab数据类型4. matlab矩阵操作5. matlab程序结构5.1 顺序结构5.2 循环结构5.3 分支结构 1. 界面介绍 命令行窗口输入&#xff1a;clc 可清除命令行窗口command window的内容 clc命令行窗口输入&…

C++ 多态性

一 多态性的分类 编译时的多态 函数重载 运算符重载 运行时的多态 虚函数 1 运算符重载的引入 使用C编写程序时&#xff0c;我们不仅要使用基本数据类型&#xff0c;还要设计新的数据类型-------类类型。 一般情况下&#xff0c;基本数据类型的运算都是运算符来表达&#x…

10G UDP协议栈 IP层设计-(6)IP TX模块

一、模块功能 1、上层数据封装IP报文头部 2、计算首部校验和 二、首部校验和计算方法 在发送方&#xff0c;先把IP数据报首部划分为许多16位字的序列&#xff0c;并把检验和字段置零。用反码算术运算把所有16位字相加后&#xff0c;将得到的和的反码写入检验和字段。接收方收…

Docker安装Redis,并在 Visual Studio Code 中使用它

Docker安装Redis 查找Redis docker search Redis完整结果 PS C:\Users\cheng> docker search Redis NAME DESCRIPTION STARS OFFICIAL redis Redis is an open …

【强化学习-Mode-Free DRL】深度强化学习如何选择合适的算法?DQN、DDPG、A3C等经典算法Mode-Free DRL算法的四个核心改进方向

【强化学习-DRL】深度强化学习如何选择合适的算法&#xff1f; 引言&#xff1a;本文第一节先对DRL的脉络进行简要介绍&#xff0c;引出Mode-Free DRL。第二节对Mode-Free DRL的两种分类进行简要介绍&#xff0c;并对三种经典的DQL算法给出其交叉分类情况&#xff1b;第三节对…

Excel如何设置密码保护【图文详情】

文章目录 前言一、Excel如何设置密码保护&#xff1f;二、Excel如何取消密码保护&#xff1f;总结 前言 在软件项目开发过程中&#xff0c;会输出很多技术文档&#xff0c;其中也包括保密级别很高的服务器账号Excel文档。为了确保服务器账号相关的Excel文档的安全性&#xff0…

超级简单的地图操作工具开发可疑应急,地图画点,画线,画区域,获取地图经纬度等

使用echars的地图画点,画线,画区域,获取地图经纬度等 解压密码:10086007 地图也是用临时的bmap.js和china.js纯离线二选一 一共就这么多文件 画点,画线,画区域 点击地图获取经纬度-打印到控制台,这样就能渲染航迹,多变形,结合其他算法算圆等等操作 下载资源:https://download…

C# OpenCvSharp DNN 黑白老照片上色

C# OpenCvSharp DNN 黑白老照片上色 目录 效果 项目 代码 下载 参考 效果 项目 代码 using OpenCvSharp; using OpenCvSharp.Extensions; using System; using System.Diagnostics; using System.Drawing; using System.Drawing.Imaging; using System.Runtime.InteropS…

CVPR2022人脸识别Partial FC论文及代码学习笔记

论文链接&#xff1a;https://openaccess.thecvf.com/content/CVPR2022/papers/An_Killing_Two_Birds_With_One_Stone_Efficient_and_Robust_Training_CVPR_2022_paper.pdf 代码链接&#xff1a;insightface/recognition/arcface_torch at master deepinsight/insightface G…

leetcode——链表的中间节点

876. 链表的中间结点 - 力扣&#xff08;LeetCode&#xff09; 链表的中间节点是一个简单的链表OJ。我们要返回中间节点有两种情况&#xff1a;节点数为奇数和节点数是偶数。如果是奇数则直接返回中间节点&#xff0c;如果是偶数则返回第二个中间节点。 这道题的解题思路是&a…

【JS面试题】this

this取什么值&#xff0c;是在函数执行的时候确定的&#xff0c;不是在函数定义的时候确定的&#xff01; this的6种使用场景&#xff1a; ① 在普通函数中使用&#xff1a;返回window对象 ② 使用call apply bind 调用&#xff1a;绑定的是哪个对象就返回哪个对象 ③ 在对象…

LeetCode2390从字符串中移除星号

题目描述 给你一个包含若干星号 * 的字符串 s 。在一步操作中&#xff0c;你可以&#xff1a;选中 s 中的一个星号。移除星号 左侧 最近的那个 非星号 字符&#xff0c;并移除该星号自身。返回移除 所有 星号之后的字符串。注意&#xff1a;生成的输入保证总是可以执行题面中描…

电子邮箱是什么?怎么申请一个电子邮箱?

电子邮箱是我们沟通的工具&#xff0c;细分为免费版电子邮箱和付费版电子邮箱。怎么申请一个属于自己的电子邮箱&#xff1f;今天小编就分享一下电子邮箱注册教程&#xff0c;手把手教您注册一个电子邮箱。 一、电子邮箱的定义 电子邮箱&#xff0c;简称邮箱&#xff0c;是一…

【Java基础】权限修饰符

一个java文件中只能有一个被public修饰的类&#xff0c;且该类名与java文件的名字一样 同一个类同一个包不同包有继承不同包无继承private✔❌❌❌默认✔✔❌❌protected✔✔✔❌public✔✔✔✔

景源畅信数字:抖音热门赛道有哪些?

抖音&#xff0c;作为当下流行的短视频平台&#xff0c;吸引了无数用户和创作者。热门赛道&#xff0c;即平台上受关注度高、活跃用户多的内容领域&#xff0c;是许多内容创作者关注的焦点。这些赛道不仅反映了用户的兴趣偏好&#xff0c;也指引着创作的方向。 一、美食制作与分…

产品新说:应急定界 | 如何在运维/技术支持领域中应对突发故障?

一、简介 应急定界的方案旨在帮助运维人员以业务故障驱动为起点&#xff0c;第一时间的快速恢复业务。该场景的条件基础是通过构建一体化监控告警平台&#xff0c;纳管应用与基础组件&#xff0c;提供业务系统监测、及时告警、排查分析能。通过告警、指标、日志、链路等重要运…

C语言中数组与指针的区别

一. 简介 本文学习了 C语言中数组与指针的区别。这样的话&#xff0c;可以在编写C代码时规避掉出错的问题。 二. C语言中数组与指针的区别 1. 数组 定义字符串数组时&#xff0c;必须让编译器知道需要多少空间。 一种方法是用足够空间的数组存储字符串。例如如下&#xf…

多表查询练习题

1、创建好数据库 create database text use text --学生表 (students) CREATE TABLE students ( student_id INT PRIMARY KEY, name VARCHAR(50), age INT, major VARCHAR(50) );--课程表 (courses) CREATE TABLE courses ( course_id INT PRIMARY KEY, course_name V…

Linux基础之进程-进程状态

目录 一、进程状态 1.1 什么是进程状态 1.2 运行状态 1.2 阻塞状态 1.3 挂起状态 二、Linux操作系统上具体的进程状态 2.1 状态 2.2 R 和 S 状态的查看 2.3 后台进程和前台进程 2.4 休眠状态和深度休眠状态 一、进程状态 1.1 什么是进程状态 首先我们知道我们的操作系…