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

打卡第35天:GPU训练以及类的Call方法

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

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

作业:

在GPU训练过程中,记录次数和训练时长非线性相关的原因可能涉及多个技术因素。以下是一些关键点:


硬件资源调度与并行效率

GPU的并行计算能力受限于任务分配和资源调度。例如,频繁的记录操作(如日志、检查点保存)可能触发同步点(synchronization),导致GPU计算流中断。此时,显存访问延迟或I/O瓶颈(如磁盘写入速度)可能成为主要耗时因素,而非训练本身的计算量。

# 示例:记录操作可能引入同步
torch.save(model.state_dict(), "checkpoint.pt")  # 同步写入磁盘


计算与I/O重叠程度

现代深度学习框架(如PyTorch)会异步处理计算和I/O。若记录操作未充分异步化,I/O等待时间可能无法被计算任务掩盖。例如,日志记录频率过高时,I/O队列饱和,导致训练线程阻塞。

# 异步日志示例(需配合多线程/异步库)
logger.async_log(loss.item())  # 假设存在异步接口


显存管理与中间状态

记录中间变量(如梯度、激活值)可能触发显存回收或扩容。显存分配/释放操作(如CUDA cudaMalloc)的耗时不稳定,尤其在显存碎片化严重时,额外开销可能非线性增长。

# 显存监控工具示例
nvidia-smi -l 1  # 实时观察显存波动


框架内部优化差异

框架的底层实现(如PyTorch的自动微分、TensorFlow的图优化)可能因记录需求调整计算图结构。例如,开启梯度检查点(Gradient Checkpointing)会减少显存占用但增加重计算时间,导致训练时长与记录次数呈现阶梯式变化。

# 梯度检查点示例
from torch.utils.checkpoint import checkpoint
def forward_pass(x):return checkpoint(model, x)  # 牺牲时间换显存


其他潜在因素

  • 数据吞吐量:数据加载器(DataLoader)的批次预处理速度可能受记录操作影响。
  • 分布式训练:多GPU通信(如AllReduce)与记录操作竞争带宽。
  • 操作系统调度:后台进程(如杀毒软件)可能随机抢占资源。

诊断建议

  1. 使用性能分析工具(如PyTorch Profiler)定位耗时操作。
  2. 调整记录频率,观察是否出现阈值效应。
  3. 对比不同硬件(如NVMe SSD vs HDD)下的训练时长差异。
# PyTorch性能分析示例
with torch.profiler.profile(activities=[torch.profiler.Activity.CUDA]) as prof:train_step()
print(prof.key_averages())

@浙大疏锦行

http://www.lqws.cn/news/87877.html

相关文章:

  • 使用Composer创建公共类库
  • 工厂模式与多态结合
  • Rhino插件大全下载指南:解锁犀牛潜能,提升设计效率
  • llama.cpp:纯 C/C++ 实现的大语言模型推理引擎详解一
  • Spring AOP:面向切面编程 详解代理模式
  • JavaSec | SpringAOP 链学习分析
  • 【 java 集合知识 第一篇 】
  • 网络攻防技术七:计算机木马
  • git管理
  • Linux 环境下高效视频切帧的实用指南
  • ES6 Promise 状态机
  • 在linux系统上搭建git服务器(ssh协议)
  • k8s的出现解决了java并发编程胡问题了
  • sudo docker exec -it backend bash 以交互方式(interactive)进入正在运行的 Docker 容器的命令行环境
  • 【leetcode】20. 有效的括号
  • 代码训练LeetCode(19)轮转数组
  • Axure-元件流程图
  • python,shell,linux,bash概念的不同和对比联系
  • 运行shell脚本时报错/bin/bash^M: 解释器错误: 没有那个文件或目录
  • 当 “欧洲版 Cursor” 遇上安全危机
  • Python趣学篇:从零打造智能AI井字棋游戏(Python + Tkinter + Minimax算法)
  • K8S上使用helm部署 Prometheus + Grafana
  • 高考数学易错考点01 | 临阵磨枪
  • Go Gin框架深度解析:高性能Web开发实践
  • react native webview加载本地HTML,解决iOS无法加载成功问题
  • 如何轻松地将数据从 iPhone传输到iPhone 16
  • React Native图片预加载:让你的应用图片预览像德芙一样丝滑
  • vue3学习
  • dvwa7——SQL Injection
  • TypeScript中class的两种继承方式extends和implements的对比