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

TensorFlow-GPU运行数小时后出现数组MemoryError问题求助

TensorFlow-GPU运行2小时后出现MemoryError的排查与解决

首先看你的报错堆栈,最后是在np.asarray()环节抛出的MemoryError——划重点:这个操作是在CPU内存里执行的,不是GPU内存!你之前调整的allow_growth和per_process_gpu_memory_fraction都是针对GPU显存的配置,自然解决不了CPU内存耗尽的问题。

运行2小时才报错,说明你的程序是在训练过程中慢慢累积占用CPU内存,大概率是内存泄漏或者数据处理逻辑导致的,下面给你具体的排查和解决方向:

一、定位CPU内存泄漏点

推荐用memory_profiler工具来精准监控内存变化,找到哪段代码在持续吃内存:

  1. 先安装工具:
    pip install memory-profiler
    
  2. 在你的训练函数上加上装饰器,运行脚本就能看到每一行代码的内存占用:
    from memory_profiler import profile
    
    @profile
    def train_neural_network(input_image):
        # 把你的训练逻辑放在这里
    
  3. 重点检查:训练循环里有没有变量一直在追加数据(比如列表append后从未清空)、有没有中间计算结果没及时释放,比如input_image_data1_batch是不是每次循环都在累积,没有重新初始化?

二、优化数据处理逻辑

  1. 改用TensorFlow原生的tf.data.Dataset加载数据,避免一次性把所有数据读入CPU内存:
    # 示例:分批加载数据集
    dataset = tf.data.Dataset.from_tensor_slices((你的输入数据, 标签数据))
    dataset = dataset.batch(你的批次大小).prefetch(tf.data.experimental.AUTOTUNE)
    
  2. 训练循环结束后手动清理内存,触发Python垃圾回收:
    import gc
    
    # 每个批次处理完成后
    del input_image_data1_batch  # 删除不再需要的变量
    gc.collect()  # 强制回收内存
    

三、GPU配置的补充说明

虽然这次报错和GPU无关,但如果后续遇到GPU显存问题,你之前的两种配置可以结合使用,效果更好:

config = tf.ConfigProto()
config.gpu_options.allow_growth = True  # 按需分配显存
config.gpu_options.per_process_gpu_memory_fraction = 0.4  # 限制显存占比
sess = tf.Session(config=config)

关于录屏软件的疑问

运行TensorFlow-GPU时开录屏确实可能导致程序崩溃:

  • 录屏软件会占用大量GPU显存和计算资源,你的GTX960M显存本身不算大(一般2G/4G),很容易被录屏抢占资源,导致TensorFlow显存不足崩溃;
  • 同时录屏也会占用CPU和内存,加重你当前CPU内存耗尽的问题,更快触发内存溢出。

所以训练时建议关闭录屏软件,避免资源竞争。

内容的提问来源于stack exchange,提问作者王迎芃

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:15:55