当前位置: 首页 > article >正文

Python打卡训练营学习记录Day34

知识点回归:

  1. CPU性能的查看:看架构代际、核心数、线程数
  2. GPU性能的查看:看显存、看级别、看架构代际
  3. GPU训练的方法:数据和模型移动到GPU device上
  4. 类的call方法:为什么定义前向传播时可以直接写作self.fc1(x)

    CPU性能的查看

    上述是在cpu的情况下训练,(即使安装了cuda,但是没有使用cuda),我们借这个机会简单介绍下cpu的性能差异。

  5. # pip install wmi -i https://pypi.tuna.tsinghua.edu.cn/simple
    # 这是Windows专用的库,Linux和MacOS不支持,其他系统自行询问大模型
    # 我想查看一下CPU的型号和核心数
    import wmic = wmi.WMI()
    processors = c.Win32_Processor()for processor in processors:print(f"CPU 型号: {processor.Name}")print(f"核心数: {processor.NumberOfCores}")print(f"线程数: {processor.NumberOfLogicalProcessors}")

 

GPU训练

要让模型在 GPU 上训练,主要是将模型和数据迁移到 GPU 设备上。

在 PyTorch 里,.to(device) 方法的作用是把张量或者模型转移到指定的计算设备(像 CPU 或者 GPU)上。

  • 对于张量(Tensor):调用 .to(device) 之后,会返回一个在新设备上的新张量。
  • 对于模型(nn.Module):调用 .to(device) 会直接对模型进行修改,让其所有参数和缓冲区都移到新设备上。

 在进行计算时,所有输入张量和模型必须处于同一个设备。要是它们不在同一设备上,就会引发运行时错误。并非所有 PyTorch 对象都有 .to(device) 方法,只有继承自 torch.nn.Module 的模型以及 torch.Tensor 对象才有此方法。

RuntimeError: Tensor for argument #1 'input' is on CPU, but expected it to be on GPU

这个常见错误就是输入张量和模型处于不同的设备。

如何衡量GPU的性能好坏呢?

以RTX 3090 Ti, RTX 3080, RTX 3070 Ti, RTX 3070, RTX 4070等为例

通过“代” 前两位数字代表“代”: 40xx (第40代), 30xx (第30代), 20xx (第20代)。“代”通常指的是其底层的架构 (Architecture)。每一代新架构的发布,通常会带来工艺制程的进步和其他改进。也就是新一代架构的目标是在能效比和绝对性能上超越前一代同型号的产品。

通过级别 后面的数字代表“级别”,

xx90: 通常是该代的消费级旗舰或次旗舰,性能最强,显存最大 (如 RTX 4090, RTX 3090)。
xx80: 高端型号,性能强劲,显存较多 (如 RTX 4080, RTX 3080)。
xx70: 中高端,甜点级,性能和价格平衡较好 (如 RTX 4070, RTX 3070)。
xx60: 主流中端,性价比较高,适合入门或预算有限 (如 RTX 4060, RTX 3060)。
xx50: 入门级,深度学习能力有限。
通过后缀 Ti 通常是同型号的增强版,性能介于原型号和更高一级型号之间 (如 RTX 4070 Ti 强于 RTX 4070,小于4080)。

通过显存容量 VRAM (最重要!!) 他是GPU 自身的独立高速内存,用于存储模型参数、激活值、输入数据批次等。单位通常是 GB(例如 8GB, 12GB, 24GB, 48GB)。如果显存不足,可能无法加载模型,或者被迫使用很小的批量大小,从而影响训练速度和效果

训练阶段:小批量梯度是对真实梯度的一个有噪声的估计。批量越小,梯度的方差越大(噪声越大)。显存小只能够使用小批量梯度。
推理阶段:有些模型本身就非常庞大(例如大型语言模型、高分辨率图像的复杂 CNN 网络)。即使你将批量大小减到 1,模型参数本身占用的显存可能就已经超出了你的 GPU 显存上限。

import torch# 检查CUDA是否可用
if torch.cuda.is_available():print("CUDA可用!")# 获取可用的CUDA设备数量device_count = torch.cuda.device_count()print(f"可用的CUDA设备数量: {device_count}")# 获取当前使用的CUDA设备索引current_device = torch.cuda.current_device()print(f"当前使用的CUDA设备索引: {current_device}")# 获取当前CUDA设备的名称device_name = torch.cuda.get_device_name(current_device)print(f"当前CUDA设备的名称: {device_name}")# 获取CUDA版本cuda_version = torch.version.cudaprint(f"CUDA版本: {cuda_version}")# 查看cuDNN版本(如果可用)print("cuDNN版本:", torch.backends.cudnn.version())else:print("CUDA不可用。")
CUDA可用!
可用的CUDA设备数量: 1
当前使用的CUDA设备索引: 0
当前CUDA设备的名称: NVIDIA GeForce RTX 2060 SUPER
CUDA版本: 12.1
cuDNN版本: 90100

@浙大疏锦行 

 

 

 

http://www.lryc.cn/news/2384739.html

相关文章:

  • 动手学习深度学习V1.1 chapter2 (2.1-2.2)
  • 数据结构(6)线性表-队列
  • NumPy 2.x 完全指南【十七】转置操作
  • 【数据架构04】数据湖架构篇
  • 使用OpenSSL生成根证书并自签署证书
  • uniapp-商城-62-后台 商品列表(分类展示商品的布局)
  • 初识C++:模版
  • 【Elasticsearch】给所索引创建多个别名
  • Linux入门(九)任务调度
  • 突破认知边界:神经符号AI的未来与元认知挑战
  • Java 处理地理信息数据[DEM TIF文件数据获取高程]
  • 谈谈对dubbo的广播机制的理解
  • 对接钉钉消息样例:DING消息、机器人
  • 003-类和对象(二)
  • 使用Rancher在CentOS 环境上部署和管理多Kubernetes集群
  • Java常用数据结构底层实现原理及应用场景
  • 利用朴素贝叶斯对UCI 的 mushroom 数据集进行分类
  • Linux火墙管理及优化
  • Visual Studio 制作msi文件环境搭建
  • (Java基础笔记vlog)Java中常见的几种设计模式详解
  • C++ vector 深度解析:从原理到实战的全方位指南
  • 鸿蒙进阶——Framework之Want 隐式匹配机制概述
  • antv/g6 图谱封装配置(二)
  • OpenCV CUDA模块图像过滤------用于创建一个最小值盒式滤波器(Minimum Box Filter)函数createBoxMinFilter()
  • 网络抓包命令tcpdump及分析工具wireshark使用
  • linux strace调式定位系统问题
  • femap许可与云计算集成
  • 车载诊断架构 --- 车载诊断有那些内容(上)
  • 【Hadoop】大数据技术之 HDFS
  • 聊一下CSS中的标准流,浮动流,文本流,文档流