news 2026/7/16 1:24:03

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/7/14 21:35:39

练题100天——DAY29:岛屿的周长+寻找两个正序数组的中位数

今天的两道题都是有点硬的骨头,勉勉强强能做出来,但是想不到特定的解决方法,算法难度★★★★。深度优先算法和二分查找以为自己会,遇到这两道题算是给了我当头两棒:根本不知道何时用、怎么用深度优先算法,…

作者头像 李华
网站建设 2026/7/16 14:07:38

EtherCAT 转 Modbus RTU 网关:实现倍福 PLC 与宇电 AI-516 温控器协同联动

一、项目背景 某精密机械制造企业的数控加工生产线面临异构设备通信难题:生产线核心控制采用倍福 CX5140 PLC(支持 EtherCAT 协议),负责主轴运转、工序联动及整体流程控制,而现场 18 台数控加工机床的温度调控依赖宇电…

作者头像 李华
网站建设 2026/7/14 11:40:12

平台生态:生成式AI的差异化规则与适配策略

主流AI平台的生态特征不同生成式AI平台基于其训练数据、技术架构和商业策略,形成了各具特色的“生态偏好”。理解这些差异是制定有效GEO策略的前提。OpenAI的ChatGPT表现出对权威来源和近期内容的明显偏好。研究显示,ChatGPT在回答事实性问题时&#xff…

作者头像 李华
网站建设 2026/7/13 2:21:37

8.SpringTask

8.1 定时任务定时任务即系统在特定时间执行一段代码,它的场景应用非常广泛:购买游戏的月卡会员后,系统每天给会员发放游戏资源。管理系统定时生成报表。定时清理系统垃圾。定时任务的实现主要有以下几种方式:Java自带的java.util.…

作者头像 李华
网站建设 2026/7/15 12:31:55

BIOS VS UEFI

目录标题一、整体结论先给出(给决策用)二、启动链路:这是两者本质区别1️⃣ Legacy BIOS 启动链路(你现在这台)关键工程特征2️⃣ UEFI 启动链路(现代标准)关键工程特征三、磁盘与分区模型&…

作者头像 李华
网站建设 2026/7/16 15:28:42

Flink源码阅读:状态管理

前面我们介绍了 Flink 状态的分类和应用。今天从源码层面再看一下 Flink 是如何管理状态的。State 概述 关于 State 的详细介绍可以参考 Flink学习笔记:状态类型和应用 和 Flink学习笔记:状态后端这两篇文章,为了方面阅读,这里我…

作者头像 李华