news 2026/5/10 19:17:49

pythonstudy Day38

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
pythonstudy Day38

GPU训练及类的call方法

@疏锦行


  1. “剩余时长(ETA)”本身就很难和记录次数线性对应

多数训练脚本的 ETA 计算方式是类似:

用最近若干 step 的平均耗时(滑动平均 / 指数平滑)

或用从 epoch 开始到现在的平均 step 耗时

然后 ETA = avg_step_time * remaining_steps

这种估计会把你“偶尔发生的额外开销”(比如每 N step 做一次 .item()、print、写日志、评估)平均摊薄。
当总 epoch=20000,而你记录次数只有 10/20/100/200 这种量级时,单次记录的开销如果是毫秒级~几十毫秒级,摊到每 step 上可能非常小,最后 ETA 的差异就会被平滑/抹掉,呈现出“差不多都 10 秒”。

  1. .loss.item() / tensor.item() 的同步是“结账式”的:频率越低,不一定越省时

你已经抓到关键:.item() 会把 GPU 上的标量拷回 CPU,而这会 强制同步(CPU 必须等 GPU 把当前队列里的 kernel 都跑完,才能拿到结果)。

但很多人忽略了:同步等待时间不是一个固定常数,而是取决于你同步那一刻 GPU 队列里“欠了多少账”。

记录很频繁(间隔小):你更频繁地“结账”,每次等的可能较短;

记录很不频繁(间隔大):GPU 可以异步跑很久,你以为“没同步所以更快”,但到你下一次 .item() 时,CPU 可能要一次性等更久(把之前积压的队列都跑完)。

所以同步的耗时分布会变成 少量大尖峰 vs 大量小尖峰。
而你记录的“剩余时长”往往是平滑后的平均值,它看到的是:尖峰被摊薄后差不多,自然就“不线性”。

  1. 你的训练瓶颈可能根本不在“记录”上(被其它项主导)

即使 .item() 有同步,整体耗时也常被这些主导:

DataLoader(CPU 解码/增强/IO/num_workers 不够、pin_memory 设置等)

GPU 计算本身(模型/输入大)

CUDA 内存分配/缓存、偶发 GC、日志写盘

进度条刷新(tqdm)、print flush、TensorBoard 写 event

当主耗时项远大于日志开销时,你把记录次数改 10 倍,ETA 也只会轻微波动,看起来“不成比例”。

  1. 你现在这组数差异很小,也可能是测量方式被“异步”骗了

如果你用 time.time() 直接包住训练 step,但 没在合适位置 torch.cuda.synchronize(),那么你测到的“step 用时”可能只是 CPU 发射 kernel 的时间,而不是 GPU 真正执行完的时间。
此时 ETA 的波动会更多来自同步点(比如 .item())的位置与平滑方式,而不是你以为的线性累积。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 3:46:19

EtherCAT转ModbusRTU网关:实现汇川PLC与BMS储能系统协同

一、项目背景某新能源企业在西北某100MW光伏储能电站项目中,面临异构设备通信适配难题:电站核心控制采用汇川H3U-XP系列PLC(支持EtherCAT协议),负责光伏板功率调节、储能系统充放电调度及电网并网协同;现场…

作者头像 李华
网站建设 2026/4/30 18:49:07

DeepSeek-Coder:开源代码大模型的架构演进与技术突破

本文由「大千AI助手」原创发布,专注用真话讲AI,回归技术本质。拒绝神话或妖魔化。搜索「大千AI助手」关注我,一起撕掉过度包装,学习真实的AI技术! 引言 在人工智能驱动软件工程(AI4SE)的时代浪…

作者头像 李华
网站建设 2026/5/8 20:26:27

基于单片机的防火防盗报警系统设计

摘 要 随着社会和经济的发展,防火工作越来越重要,但是目前国内的许多研发都侧重于大型场所的火灾报警。因此,我们就有必要研制一种结构简单、经济实用的家庭烟雾报警器以适应市场的需求。基于供家庭使用的烟雾报警器应该具备的基本要求和功能…

作者头像 李华
网站建设 2026/5/7 9:02:51

基于STM32无刷直流电机调速蓝牙APP无线监测控制系统

(一)系统功能设计 STM32单片机无刷直流电机调速蓝牙APP控制118 本系统由STM32F103C8T6单片机核心板、按键电路、蓝牙模块、 电调模块及电机部分组成。 通过按键可以驱动无刷直流电机停止、加速、减速;中间按键为加速按键, 上电后按…

作者头像 李华