Keras:GPU利用率不高, 循环调用模型的时候内存溢出

问题1:GPU利用率低下, 307MiB / 32510MiB

在这里插入图片描述

尝试解决

  1. 增加batch_size 也没有效果,超过某个数就内存溢出了==》 说明非batch_size 过小导致这个问题
  2. 如果在一块卡上再启动一个进程来训练模型,只能再叠加一个305Mib,并且程序在运行中可能出现内存溢出

问题2 - 内存溢出

五折交叉验证的时候,第一折跑完了,跑第二折的时候,内存溢出,是因为前面训练时占用的内存没有释放掉。可能是由于代码首部指定的使用GPU的方式引起的

指定GPU训练模型

这是组里祖传的代码,不修改代码的情况下,直接在训练模型代码的前面加上这几句话,就可以指定具体的 GPU 来训练模型。

import os
import tensorflow as tf

gpu_id = '0,1,2,3' # 指定使用这几块GPU
os.environ['CUDA_VISIBLE_DEVICES'] = str(gpu_id)
os.system('echo $CUDA_VISIBLE_DEVICES')

tf_config = tf.compat.v1.ConfigProto()
tf_config.gpu_options.allow_growth = True
tf.compat.v1.Session(config=tf_config)

这篇文章:https://www.jianshu.com/p/99fca5b7fd8a
有详细介绍每一行的含义

# tf.ConfigProto一般用在创建session的时候用来对session进行参数配置
# log_device_placement = True : 是否打印设备分配日志
# allow_soft_placement = True : 如果你指定的设备不存在,允许TF自动分配设备
tf.ConfigProto(log_device_placement = True, allow_soft_placement = True)
gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction = 0.7)
config = tf.ConfigProto(gpu_options = gpu_options)
session = tf.Session(config = config,....)

使用allow_growth option,刚一开始分配少量的GPU容量,然后按需慢慢的增加,由于不会释放内存,所以会导致碎片

解决

一折训练完之后,重置session

# import tensorflow.keras.backend as K
# from tensorflow.python.framework.ops import reset_default_graph

K.clear_session()
reset_default_graph()

两个问题的解决方案

删掉下面这个代码就好了

tf_config = tf.compat.v1.ConfigProto()
tf_config.gpu_options.allow_growth = True
tf.compat.v1.Session(config=tf_config)

其他的小知识

  1. callbacks to ensure fault tolerance
  2. 分布式输入 - 待看
  3. Keras 单机多卡,多机多卡的使用方式
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值