jupyter notebook使用tensorflow-gpu或Keras训练卷积时jupyter服务重启问题解决
最近利用jupyter notebook训练tensorflow卷积神经网络的时候,遇到了一次服务似乎挂掉了,但会立刻重启的问题。原以为它重启之后 就没问题了,但是重启了n多遍还是不行。
在网上直接照这个问题似乎没有找到对应的答案,自己踩了坑得爬出来才行。下面记录一下检查以及解决过程。
首先把jupyter notebook中的代码移到pycharm中运行了一遍,发现只有日志信息输出,其他什么都没有。这不是软件带来的问题。
接着,我在tf.Session中加入了一些print
输出一些信息进行调错,发现在加载数据集的地方出现了问题。这是想到了内存不足的问题,但是我在任务管理器中看到内存剩余挺多的,然后GPU利用率挺高的。如果不是资源不足问题,那么问题出在那里?
好吧。就是资源分配问题没有处理好,我们在Session中配置一下就可以了。代码如下:
os.environ["CUDA_VISIBLE_DEVICES"] = '0' #指定第一块GPU可用
config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.5 # 程序最多只能占用指定gpu50%的显存
config.gpu_options.allow_growth = True #程序按需申请内存
with tf.Session(config = config) as sess:
#接着写程序代码
重点是config.gpu_options.allow_growth = True
这一句 ,它用于程序按需申请内存。
针对Keras
(更新于2019-12-27)如果Keras出现这个问题可以这么做:
import keras.backend.tensorflow_backend as ktf
import tensorflow as tf
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "1"
config = tf.ConfigProto()
config.gpu_options.allow_growth=True #不全部占满显存, 按需分配
sess = tf.Session(config=config)
ktf.set_session(sess)
是因为Keras默认占满GPU资源的。
写在最后
在踩坑过程中还研究了另外一个关于GPU的问题(想看点我),问题的出现就是为了让我们更好地了解事物,希望可以帮到你。
欢迎各位大佬在评论区中留下宝贵的意见,带我进步。