【python深度学习】Day34 GPU训练及类的call方法
查看CPU性能:架构代际、核心数、线程数
提前安装一个库
# 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}")
解读cpu配置
Intel 第 12 代酷睿(Alder Lake 架构,2021 年发布)
K:支持超频(解锁倍频)
F:无内置核显(需搭配独立显卡使用)
核心架构:
性能核(P-Core):8 核(支持超线程,共 16 线程),擅长单线程高性能任务(如游戏、视频剪辑)
能效核(E-Core):8 核(不支持超线程,共 8 线程),优化多线程能效比(如后台任务、虚拟机)。
查看GPU性能:显存、级别、架构代际
以RTX 3090 Ti, RTX 3080, RTX 3070 Ti, RTX 3070, RTX 4070等为例
(1)前两位数字代表“代”:
40xx (第40代),
30xx (第30代),
20xx (第20代)。
“代”通常指的是其底层的架构 (Architecture)。每一代新架构的发布,通常会带来工艺制程的进步和其他改进。也就是新一代架构的目标是在能效比和绝对性能上超越前一代同型号的产品。
(2)后面的数字代表“级别”,
xx90: 通常是该代的消费级旗舰或次旗舰,性能最强,显存最大 (如 RTX 4090, RTX 3090)。
xx80: 高端型号,性能强劲,显存较多 (如 RTX 4080, RTX 3080)。
xx70: 中高端,甜点级,性能和价格平衡较好 (如 RTX 4070, RTX 3070)。
xx60: 主流中端,性价比较高,适合入门或预算有限 (如 RTX 4060, RTX 3060)。
xx50: 入门级,深度学习能力有限。
(3)后缀Ti : 通常是同型号的增强版,性能介于原型号和更高一级型号之间 (如 RTX 4070 Ti 强于 RTX 4070,小于4080)。
(4)显存容量 VRAM (最重要!!)
GPU 自身的独立高速内存,单位是 GB(例如 8GB, 12GB, 24GB, 48GB)。用于存储模型参数、激活值、输入数据批次等。如果显存不足,可能无法加载模型,或者被迫使用很小的批量大小,从而影响训练速度和效果
GPU训练对比CPU训练
相较于cpu,使用GPU计算多了3个时间上的开销
1. 数据传输开销 (CPU 内存 <-> GPU 显存)
2. 核心启动开销 (GPU 核心启动时间)
3. 性能浪费:计算量和数据批次
类的call方法:为什么定义前向传播时可以直接写作self.fc1(x)
__call__ 方法是一个特殊的魔术方法(双下划线方法),它允许类的实例像函数一样被调用。
# 不带参数的call方法
class Counter:def __init__(self):self.count = 0def __call__(self):self.count += 1return self.count# 使用示例
counter = Counter()
print(counter()) # 输出: 1
print(counter()) # 输出: 2
print(counter.count) # 输出: 2
# 带参数的call方法
class Adder:def __call__(self, a, b):print("唱跳篮球rap")return a + badder = Adder()
print(adder(3, 5)) # 输出: 8
通过观察上述代码,定义一个类后,没有实例化,直接调用该类,像调用函数一样