TensorFlow2.0 CUDA_ERROR_OUT_OF_MEMORY out of memory 解决办法

本文介绍了一种解决在使用TensorFlow2.0的GPU版本进行训练时遇到的内存溢出问题的方法。不同于TensorFlow1.0的解决方案,本文提供了适用于TensorFlow2.0的具体代码实现,确保GPU内存的动态增长,避免训练过程中出现的CUDA错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天头一次使用TensorFlow2.0的GPU版本进行训练,训练中遇到【CUDA_ERROR_OUT_OF_MEMORY out of memory】,于是百度各种解决办法,基本能查到的都是TensorFlow1.0的用法,但此方法在TensorFlow2.0中不适用。于是经过多方查找,终于找到设置方法,在此进行记录,一是方便日后回看,二是弥补百度中各种查不到。

  • TensorFlow1.0用法
from keras import backend as K
config = tf.ConfigProto()
config.gpu_options.allow_growth = True
sess = tf.Session(config=config)
K.set_session(sess)
  • TensorFlow2.0用法
physical_devices = tf.config.experimental.list_physical_devices('GPU')
if len(physical_devices) > 0:
    for k in range(len(physical_devices)):
        tf.config.experimental.set_memory_growth(physical_devices[k], True)
        tf.config.experimental.
        print('memory growth:', tf.config.experimental.get_memory_growth(physical_devices[k]))
else:
    print("Not enough GPU hardware devices available")

 

### 解决方案 当遇到 `CUDA_ERROR_OUT_OF_MEMORY` 错误时,即使显存看似充足也可能发生此问题。这通常由多种因素引起,包括但不限于资源分配不当、其他进程占用了过多的 GPU 资源等。 #### 原因分析 1. **多线程或并行计算任务竞争** 如果在同一台机器上运行多个依赖于相同 GPU 的应用程序实例,可能会导致可用显存被耗尽。即便单个应用所需显存量不大,累积起来也会超出总容量[^1]。 2. **TensorFlow 默认行为** TensorFlow 可能会尝试获取尽可能多的 GPU 内存来优化性能,这种贪婪策略有时会造成不必要的内存浪费,尤其是在有未充分利用的情况下[^2]。 3. **内核参数配置不合理** 不恰当设置某些框架内部选项(例如批处理大小),可能导致一次性请求超过实际可获得的最大连续块空间,从而触发OOM(out-of-memory)[^4]。 #### 实施措施 为了缓解上述情况带来的影响,可以采取如下几种方法: - **限制每张卡上的最大允许使用量** 使用 TensorFlow 提供的功能设定每个 GPU 上面能够消耗的最大比例或者绝对数值。下面是一个 Python 示例代码片段用于控制显存用量不超过指定限额: ```python import tensorflow as tf physical_devices = tf.config.list_physical_devices('GPU') if physical_devices: try: # Restrict TensorFlow to only allocate a specific amount of memory on the first GPU. tf.config.set_logical_device_configuration( physical_devices[0], [tf.config.LogicalDeviceConfiguration(memory_limit=7168)] # Limiting to 7GB here ) logical_gpus = tf.config.list_logical_devices('GPU') print(len(physical_devices), "Physical GPUs,", len(logical_gpus), "Logical GPUs") except RuntimeError as e: # Logical devices must be set before GPUs have been initialized print(e) ``` - **启用按需增长模式** 让 TensorFlow 动态调整其所需的 GPU 内存量而不是一开始就锁定整个设备。可以通过修改 Session 配置实现这一点: ```python config = tf.compat.v1.ConfigProto() config.gpu_options.allow_growth=True # Set this flag to true so that it will not preallocate all available VRAM by default session = tf.compat.v1.Session(config=config) ``` - **检查是否有其他程序占用 GPU** 确认当前系统中是否存在其它正在利用同一组硬件加速器的应用,并考虑终止这些可能干扰正常工作的后台作业。 - **减少模型复杂度或批量尺寸** 对于特别复杂的神经网络结构或是过大的输入批次规模,适当简化架构设计或将 mini-batch size 缩减至合理范围有助于降低整体运算负担。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值