- 增加batch_size 也没有效果,超过某个数就内存溢出了==》 说明非batch_size 过小导致这个问题
- 如果在一块卡上再启动一个进程来训练模型,只能再叠加一个305Mib,并且程序在运行中可能出现内存溢出
五折交叉验证的时候,第一折跑完了,跑第二折的时候,内存溢出,是因为前面训练时占用的内存没有释放掉。可能是由于代码首部指定的使用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)其他的小知识
- callbacks to ensure fault tolerance
- 分布式输入 - 待看
- Keras 单机多卡,多机多卡的使用方式



