DAY 34 超大力王爱学Python

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

ps:在训练过程中可以在命令行输入nvida-smi查看显存占用情况

import torch
import time# 模拟训练循环(去除无关同步操作)
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
X_train, y_train = torch.randn(120, 4).to(device), torch.randint(0, 3, (120,)).to(device)
model = torch.nn.Sequential(torch.nn.Linear(4, 3)).to(device)
optimizer = torch.optim.Adam(model.parameters())
criterion = torch.nn.CrossEntropyLoss()num_epochs = 20000
losses = []
start_time = time.time()for epoch in range(num_epochs):optimizer.zero_grad()outputs = model(X_train)loss = criterion(outputs, y_train)loss.backward()optimizer.step()# 仅在必要时记录(如间隔1000次),减少同步次数if (epoch + 1) % 1000 == 0:losses.append(loss.item())  # 同步操作,仅在间隔大时执行time_all = time.time() - start_time
print(f'Training time: {time_all:.2f} seconds')

问题分析:记录次数与剩余时长无线性关系的原因

1. 同步操作的本质(GPU-CPU 数据传输)
  • loss.item() 是同步操作:每次从 GPU 读取标量损失到 CPU,会阻塞 GPU 后续计算(需等待 CPU 完成)。但损失是标量(1 个值),数据传输开销极小(远小于张量传输),因此对总时间影响有限。
  • 小数据集的计算特性:鸢尾花数据特征少(4 维)、样本少(训练集 120 个),每个 epoch 的 GPU 计算时间极短(微秒级),而同步开销(纳秒级)占比低,导致记录次数变化对总时间的影响被 “淹没”。
2. GPU 计算的并行性与开销波动
  • 内核启动开销:GPU 执行张量运算时,每次内核启动(如矩阵乘法、激活函数)有固定开销。当记录间隔大(记录次数少),GPU 更连续执行内核(减少启动次数),可能略微提升效率;间隔小(记录次数多)时,频繁同步(虽开销小)但内核启动更分散,两者效率差异不明显,导致剩余时长变化小。
  • Python 循环的开销:训练循环中的for循环在 Python 中本身有开销(解释器执行),但在小 epoch 数(如 20000)下,这部分开销与 GPU 计算相比可忽略,进一步弱化记录次数的影响。
3. 实验数据的特殊性
  • 表格数据中的剩余时长波动小(~10%):说明记录操作的开销占总时间比例低(即使记录次数相差 20 倍,总时间变化仅约 10%)。这是因为:
  • 损失记录的开销本身极小(标量传输 + 列表 append,均为 CPU 轻量操作)。
  • GPU 计算主导总时间,而小数据集的 GPU 计算时间本身稳定(无明显波动),导致剩余时长(总时长 - 固定计算时长)变化不显著。
4. 对比实验的改进思路
  • 增大数据集 / 模型复杂度:若使用百万级样本或深层神经网络,GPU 计算时间占比提升,此时记录次数(同步开销)的影响会更明显(线性关系可能显现)。
  • 异步数据传输(非阻塞):在 PyTorch 中,可尝试先异步记录损失(如loss.detach().cpu(),但仍需同步item()),但本质上标量传输无法完全异步,效果有限。
  • profiling 分析 :使用torch.profiler或nvidia-smi监控 GPU 利用率,观察记录操作对 GPU idle 时间的影响,验证开销占比。

代码巩固:优化训练循环的性能(减少同步开销)

优化点:
  • 减少同步频率:仅在间隔较大时记录损失(如每 1000 epoch),降低 GPU-CPU 同步次数,提升 GPU 利用率。
  • 避免不必要的操作:训练时若无需实时监控损失,可完全移除记录(或仅在训练结束后记录最终损失),最大化 GPU 计算效率。

总结

记录次数与剩余时长无明显线性关系,本质是小数据集下同步开销占比极低,GPU 计算主导总时间,且同步操作(标量传输)本身开销可忽略。若需验证线性关系,需在大数据集 / 复杂模型上实验,此时同步开销(如频繁的张量传输、日志记录)会成为性能瓶颈,显现出与记录次数的线性关系。

@浙大疏锦行


http://www.hkcw.cn/article/QZgZCWmmoo.shtml

相关文章

BLIP-2

目录 摘要 Abstract BLIP-2 模型框架 预训练策略 模型优势 应用场景 实验 代码 总结 摘要 BLIP-2 是一种基于冻结的图像编码器和大型语言模型的高效视觉语言预训练模型,由 Salesforce 研究团队提出。它在 BLIP 的基础上进一步优化,通过轻量级…

通过WiFi无线连接小米手机摄像头到电脑的方法

通过WiFi无线连接小米手机摄像头到电脑的方法 以下是基于Scrcpy和DroidCam两种工具的无线连接方案,需提前完成开发者模式与USB调试的开启(参考原教程步骤): 方法一:Scrcpy无线投屏(无需手机端安装&#xf…

8088 单板机 NMI 中断程序示例 (脱离 DOS 环境)

求组DeepSeek给的将要进行的8088单板机NMI中断编程示例。 /* nmidemo.c - 8088 单板机 NMI 中断演示程序 */ /* 脱离 DOS 环境,直接运行在裸机上 */ /* 使用 Digital Mars C 编译器,TINY 模式编译 *//* 硬件配置假设:- 8088 CPU 4.77MHz- 8255 PPI (可…

详解鸿蒙开发如何上传三方库到ohpm仓库

前两天幽蓝君在ohpm仓库上传了自己的第一个三方库,完整体验了一下ohpm的上传流程,感觉还是比较繁琐的,所以把上传流程和一些注意事项分享给大家。 先介绍一下怎么开发一个三方库,在项目名称右键,新建Module&#xff0…

PHP与MYSQL结合中中的一些常用函数,HTTP协议定义,PHP进行文件编程,会话技术

MYSQL: 查询函数: 执行查询语句: 1.mysql_query("SQL语法"); 凡是执行操作希望拿到数据库返回的数据进行展示的(结果返回: 数据结果); 2.执行结果的处理:成功为结果集,失败为false; 成功返回结果:SQL指令没有错误,但是查询结果…

[Protobuf]常见数据类型以及使用注意事项

[Protobuf]常见数据类型以及使用注意事项 水墨不写bug 文章目录 一、基本数据类型1、字段2、字段的修饰规则 二、自定义数据类型1、message类型2、enum类型3、Any类型4、oneof类型5、map类型 三、小工具1.hexdump2.decode 四、注意事项 一、基本数据类型 protobuf 支持多种基础…

邂逅Webpack和打包过程

前端开发方向 目前国内的前端开发 主要使用Vue和React 一般你写个项目,过程就是:npm/yarn --> webpack架构 --> Vue/React框架 而针对Vue和React都有脚手架的,脚手架是基于webpack搭建的 你写.jsx或者ts之类的浏览器是不认识的&…

计算机网络第1章(下):网络性能指标与分层模型全面解析

目录 一、计算机网络的性能指标1.1 性能指标1:速率1.2 性能指标2:带宽1.3 性能指标3:吞吐量1.4 性能指标4:时延1.5 性能指标5:时延带宽积1.6 性能指标6:往返时延1.7 性能指标7:信道利用率 二、计…

多模态大语言模型arxiv论文略读(102)

Chat2Layout: Interactive 3D Furniture Layout with a Multimodal LLM ➡️ 论文标题:Chat2Layout: Interactive 3D Furniture Layout with a Multimodal LLM ➡️ 论文作者:Can Wang, Hongliang Zhong, Menglei Chai, Mingming He, Dongdong Chen, Ji…

python学习打卡day42

DAY 42 Grad-CAM与Hook函数 知识点回顾 回调函数lambda函数hook函数的模块钩子和张量钩子Grad-CAM的示例 作业:理解下今天的代码即可 1.回调函数 Hook本质是回调函数,所以我们先介绍一下回调函数 回调函数是作为参数传递给其他函数的函数&#xff0…

VeriFree:无需Verifier的通用RL框架

文章目录 前言1. 研究背景与挑战1.1 传统强化学习框架(RLVR)的领域局限性1.2 引入LLM作为验证器的新挑战1.3 研究目标的提出 2. VeriFree方法核心原理2.1 问题定义与形式化建模2.2 核心思想:隐式验证与概率最大化2.3 训练技术细节 3. 实验4. …

uniapp uni-id 如果是正式项目,需自行实现发送邮件的相关功能

(3) 使用云对象sendEmailCode 发送邮箱验证码,报错送邮箱验证码失败 Error: 已启动测试模式,直接使用:123456作为邮箱验证码即可。 如果是正式项目,需自行实现发送邮件的相关功能 - DCloud问答 uni-id 没有实现邮箱验证码逻辑&am…

HiEV独家 | 整合智能化战线,奇瑞辅助驾驶驶向何方?

作者 |德新 编辑 |王博 组织调整是战略变革的映射,而战略变革最终要在产品上体现。 5月30日,奇瑞汽车官宣整合旗下雄狮科技、大卓智能与研发总院相关业务,成立「智能化中心」。智能化中心下设有智能座舱、智能辅助驾驶、电子电气架构等子中…

什么是软件需求可视化?如何实际运用?

一、什么是软件需求可视化? 将软件需求可视化是一个有助于团队成员更好地理解项目需求、促进沟通和协作的重要过程。以下是几种常见的方法和技术,可以帮助你有效地实现这一目标: 用户故事地图:这是一种通过创建一个从用户角度出发…

腾讯:强化学习提高LLM机器翻译

📖标题:TAT-R1: Terminology-Aware Translation with Reinforcement Learning and Word Alignment 🌐来源:arXiv, 2505.21172 🌟摘要 最近,像DeepSeek-R1这样的深度推理大型语言模型(LLM&…

C++ IO流

目录 一、C语言的输入与输出 二、流 三、CIO流 3.1 C标准IO流 3.2 C文件IO流 3.3 stringstream字符串流 一、C语言的输入与输出 在 C 语言中,最常用的输入输出函数是 scanf() 和 printf()。它们分别用于从标准输入读取数据,以及将数据输出到标准输出…

linux文件管理(补充)

1、查看文件命令 1.1 cat 用于连接文件并打印到标准输出设备上,它的主要作用是用于查看和连接文件。 用法: cat 参数 文件名 参数: -n:显示行号,会在输出的每一行前加上行号。 -b:显示行号,…

Relational Algebra(数据库关系代数)

目录 What is an “Algebra” What is Relational Algebra? Core Relational Algebra Selection Projection Extended Projection Product(笛卡尔积) Theta-Join Natural Join Renaming Building Complex Expressions Sequences of Assignm…

操作系统:进程管理(王道+计算机操作系统)

第二章 进程与线程 2.1进程的概念、组成与特征 2.1.1 进程与程序的区别 ​ 1.程序:静态的,就是放在磁盘里的可执行文件,如:QQ.exe。 ​ 2.进程:动态的,是程序的一次执行过程,如:…

浅谈简历制作的四点注意事项

如大家所了解的,一份工作,往往是从制作一份简历开始。 对于新人来说,简历制作的注意事项,你又了解多少呢?下面一起来看看吧! 简历字数:一封合格的简历字数大概在 350 词 – 650 词之间&#xf…