当前位置: 首页 > 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())

@浙大疏锦行

相关文章:

  • 阿姆达尔定律的演进:古斯塔夫森定律
  • HertzBeat的告警规则如何配置?
  • 如何做接口测试?
  • GPIO的内部结构与功能解析
  • Python趣学篇:Pygame重现《黑客帝国》数字雨
  • 八股学习-JS的闭包
  • Express 集成Sequelize+Sqlite3 默认开启WAL 进程间通信 Conf 打包成可执行 exe 文件
  • 全面解析 Windows CE 定制流程:从内核到设备部署
  • 垂起固定翼无人机应用及技术分析
  • 嵌入式系统:从技术原理到未来趋势(驱动程序篇)
  • 动态规划十大经典题型状态转移、模版等整理(包括leetcode、洛谷题号)
  • Oracle、PostgreSQL 与 MySQL 数据库对比分析与实践指南
  • 公司存储文件用什么比较好?
  • Git 使用规范指南
  • JavaWeb是什么?总结一下JavaWeb的体系
  • 宝塔面板安装nodejs后,通过node -v获取不到版本号,报错node: command not found
  • 安装和配置 Nginx 和 Mysql —— 一步一步配置 Ubuntu Server 的 NodeJS 服务器详细实录6
  • 原子操作与非原子操作
  • ollama的安装及加速下载技巧
  • 【计算机系统结构】知识点总结