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

TensorFlow训练1.5k轮后predict/train骤降速 内存占用高

问题描述

我是TensorFlow新手,正在尝试训练强化学习(RL)模型实现pygame游戏自动游玩,参考公开的深度强化学习教程完成了适配自身游戏场景的代码开发。
训练执行逻辑为:先在环境中完成1步交互,随后调用batch size设为128的model.predict与model.fit接口,从历史交互样本中随机采样完成模型参数更新。
训练初期运行状态完全正常,但在完成约1.5k次迭代(累计耗时约5小时)后,训练速度突发性大幅下降,Python进程RAM占用达到约9.5GB,即便闲置超过1天也无法恢复到初始训练速度,异常阶段的运行日志如下:

...
4/4 [==============================] - 0s 2ms/step
4/4 [==============================] - 0s 2ms/step
1/1 [==============================] - 0s 9ms/step
4/4 [==============================] - 0s 2ms/step
4/4 [==============================] - 0s 2ms/step
episode 1387/5000 reward:    -1833.2535652225936
1/1 [==============================] - 0s 9ms/step
4/4 [==============================] - 0s 2ms/step
4/4 [==============================] - 0s 2ms/step
4/4 [==============================] - 0s 2ms/step
4/4 [==============================] - 0s 2ms/step
...
4/4 [==============================] - 0s 2ms/step
4/4 [==============================] - 0s 2ms/step
4/4 [==============================] - 0s 2ms/step
4/4 [==============================] - 0s 2ms/step
4/4 [==============================] - 347s 116s/step
4/4 [==============================] - 347s 116s/step
4/4 [==============================] - 1641s 321s/step
4/4 [==============================] - 1352s 333s/step
4/4 [==============================] - 224s 48s/step
4/4 [==============================] - 224s 48s/step
4/4 [==============================] - 3951s 672s/step
4/4 [==============================] - 3942s 981s/step

我当前在搭载M1系列芯片的Mac设备上开展训练,已安装tensorflow-metal插件,通过以下执行输出确认GPU加速已正常启用:

>>> tf.config.list_physical_devices('GPU')
[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]

除内存占用过高外,未观测到CPU、GPU存在其他资源瓶颈。我推测高内存占用是触发降速的核心原因,但始终未定位到异常内存增长的来源(不存在未关闭文件句柄这类常规内存泄漏场景),也无法解释降速为何呈现无征兆的突发性特征。

调试补充信息

通过调试模式运行代码逐语句定位慢执行位置,发现在model.predict逻辑中(推测model.fit存在同类问题),keras/engine/data_adapter.py内的DataHandler类是核心性能瓶颈:哪怕是属性读取操作都存在极高延迟,例如执行original_spe = self._steps_per_execution.numpy().item()语句耗时约30秒——仅读取self._steps_per_execution属性、不执行后续方法调用时也存在同等延迟,yield self._current_step语句也存在完全相同的延迟问题。

已尝试优化方案

参考StackOverflow上的TensorFlow训练性能优化通用建议做了调整:考虑到keras.backend.clear_session()本身执行耗时较高,仅每100个episode执行一次该操作清理会话;另外了解到pygame完成初始化后长时间不调用事件接口可能引发异常,因此已经移除了代码中的pygame依赖。

运行环境配置
System:
Device: MacBook Pro (14-inch, 2021)
Chip: Apple M1 Max
Memory: 32 GB
OS: macOS Monterey 12.3.1

Python:
3.10.3

Tensorflow:
tensorflow-macos==2.9.2
tensorflow-metal==0.5.0
keras==2.9.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 10:06:21