解决TensorFlow训练内存不断增长,进程被杀死问题
2020-02-13 12:27
2436 查看
TensorFlow训练时,遇到内存不断增长,最终导致内存不足,进程被杀死。
在这里我不准备对造成这一现象的所有原因进行探讨,只是记录一下我在项目中遇到的这一问题,下面将对我遇到的内存不断增长的原因进行分析。
在TensorFlow中构造图,是将一些op作为节点加入图中,在run之前,是需要构造好一个图的,所以在run的时候,如果run图中不存在的节点,TensorFlow就会将节点加入图中,随着不断的迭代,造成内存不断的增长,从而导致内存不足。
下面举一个很容易发现这个问题的例子:
import tensorflow as tf x = tf.Variable(tf.constant(1)) y = tf.constant(2) sess = tf.Session() sess.run(tf.global_variables_initializer()) while True: print(sess.run(x+y))
在上面的例子中,x,y是图中的两个节点,在while循环中run(x)或者run(y)都是不存在问题的,但是上例中我们使用的时run(x+y),而在TensorFlow的图中是不存在x+y这个节点的,所以在run的时候,图中会不断的创建该节点,最终导致了内存不足。这个例子很容易理解,这样的问题也很容易发现。
下面,将举一个不是那么容易发现的问题:
import tensorflow as tf test = tf.get_variable('test', shape=[4, 1], initializer=tf.random_normal_initializer(stddev=0.1)) init_op = tf.global_variables_initializer() with tf.Session() as sess: sess.run(init_op) print(sess.run(test[0]))
这个例子是创建一个shape为[4,1]的变量对象,test为图中的一个节点,但是在我们实际使用时,我们可能并不需要test里的所有数据,加入只需要一个数据test[0],当我们使用run(test[0])时,test[0]并不是图中的节点,该节点就会在图中创建。上面的例子并没有使用循环,所以增加了节点,但是也不会造成内存的不足,当使用了循环时,就需要注意了。
解决办法:run图中存在的节点,对返回的结果进行处理,得到想要的结果,不要在run里面对节点处理(处理后的节点可能不是图中的节点)。
以上这篇解决TensorFlow训练内存不断增长,进程被杀死问题就是小编分享给大家的全部内容了,希望能给大家一个参考
您可能感兴趣的文章:
相关文章推荐
- 内存不足引起的SIGKILL:一个缓冲区不断增长问题的定位与解决(解释SIGKILL原因)
- 内存不足引起的SIGKILL:一个缓冲区不断增长问题的定位与解决(解释SIGKILL原因)
- 解决tensorflow训练时内存持续增加并占满的问题
- 内存不足引起的SIGKILL:一个缓冲区不断增长问题的定位与解决(解释SIGKILL原因)
- 内存不足引起的SIGKILL:一个缓冲区不断增长问题的定位与解决
- 解决一个LR内存增长问题
- 解决Linux下php-fpm进程过多导致内存耗尽问题
- linux下C++进程内存增长问题的分析
- tensorflow训练中出现nan问题的解决
- VC串口控件编程,解决内存不断增加的问题
- tensorflow-gpu 和cpu使用训练ssd模型感想(显卡内存不足解决办法)
- Tensorflow实现训练神经网络解决二分类问题
- 从问题入手帮你解决Oracle杀死死锁进程(转)
- 如何解决SQL Server内存不断增加问题
- kera中使用keras.banked.ctc_decoder()导致内存不断增加的问题解决
- storm配置:如何解决worker进程内存过小的问题
- 【已解决】mmdrv.exe进程占用CPU近100%,且占用内存持续增长
- CentOS下如何查看并杀死僵尸进程及kill后出现问题的解决办法
- 如何解决IBM AIX PowerPath xcryptd进程在AIX主机消耗大量的CPU 和内存资源的问题
- 解决服务器w3wp.exe进程占用cpu和内存过多问题