You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何time.process_time()测量model.fit()性能时结果异常(远超系统时间)

问题

我使用以下代码片段测量并输出模型拟合过程中消耗的时间:

import time

perf_counter_train_begin = time.perf_counter()
process_time_train_begin = time.process_time()

model.fit(data, ...)

perf_counter_train = time.perf_counter() - perf_counter_train_begin
process_time_train = time.process_time() - process_time_train_begin

print(f"System Time: {perf_counter_train}; Process Time: {process_time_train}")

原本预期,由于系统调用、进程调度等因素,通过time.perf_counter()获取的系统时间可能远大于time.process_time()获取的进程时间。但运行神经网络训练脚本时,得到如下结果:

System Time: 51.13854772000013; Process Time: 115.725974476

根据时钟判断系统时间测量正确,但进程时间结果异常,请问我哪里操作出错了?

分析与解决

你没操作错,这是完全正常的现象,核心原因是两个函数的统计逻辑不同:

  • time.process_time()统计的是当前进程下所有线程的CPU时间总和,不是单线程的CPU耗时。而神经网络训练框架(比如TensorFlow、PyTorch)默认会开启多线程/多设备并行计算,多个线程同时占用CPU资源,累加后的总CPU时间自然会超过实际流逝的物理时间(也就是perf_counter()统计的时间)。
  • 举个直观的例子:如果训练同时跑了4个线程,每个线程实际占用CPU 30秒,那么process_time()会返回120秒,但实际流逝的物理时间只有30秒左右,和你得到的结果逻辑完全匹配。
  • 要是你想验证这个结论,可以手动限制训练框架的线程数:比如TensorFlow用tf.config.threading.set_intra_op_parallelism_threads(1),PyTorch用torch.set_num_threads(1),之后再运行代码,就能看到process_time()的结果会和perf_counter()的结果接近。

内容的提问来源于stack exchange,提问作者user3366592

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 08:12:24