当前位置: 首页 > 知识库问答 >
问题:

GPU内存未释放tensorflow

茅慈
2023-03-14

我有一个问题,我的GPU内存是没有释放后关闭在Python中的tenstorflow会话。这三行足以导致问题:

import tensorflow as tf 
sess=tf.Session() 
sess.close()

在第三行之后,内存不会被释放。我在很多论坛上走来走去,尝试了各种各样的建议,但都没有效果。有关详细信息,请参见下面我的评论:

https://github.com/tensorflow/tensorflow/issues/19731

在这里,我已经记录了我设法杀死进程并释放内存的方法,但是这对于长时间运行的自动化进程没有用。我非常感谢任何进一步的建议。我正在使用Windows。

编辑:我现在找到了一个解决方案,至少可以让我做我想做的事情。我仍然无法释放内存,但我可以“重用”它。该守则的结构如下:

import tensorflow as tf
from keras import backend as K
cfg=K.tf.ConfigProto()
#cfg.gpu_options.allow_growth=True #this is optional
cfg.gpu_options.per_process_gpu_memory_fraction = 0.8 #you can use any percentage here

#upload your data and define your model (2 layers in this case) here    

for i in range(len(neuron1)):
    for j in range(len(neuron2)):
        K.set_session(K.tf.Session(config=cfg))
        #train your NN for i,j

当脚本第一次进入循环时,GPU内存仍然被分配(在上面的示例中为80%),因此变得杂乱无章,但是这段代码似乎以某种方式重用了相同的内存。我估计K.set\u会话(K.tf.session(config=cfg))以某种方式破坏或重置旧会话,至少允许在该上下文中“重用”内存。请注意,我没有使用sess。关闭()K。清除会话()或显式重置默认图形。这对我仍然不起作用。完成循环后,GPU内存仍满。

共有1个答案

年凯康
2023-03-14

请参阅此讨论。可以重用分配的内存,但如果要释放内存,则必须退出Python解释器本身。

 类似资料:
  • 问题内容: 我正在使用以下功能下载小于20MB的文件。它将全部内容读取到内存中,因为另一个功能必须先对字节执行工作,然后才能将其写入磁盘。 这可以正常工作,但是所有内存都在系统上消耗了。 是否可以在其他功能处理完之后释放使用的内存,以使内存使用量不会大于当前正在处理的字节数? 问题答案: 您可能会触发gc使用释放未使用的对象,并且可能敦促Go运行时使用释放内存到OS ,但是所有这些都只是在扑救。编

  • 问题内容: 我应该在将分配的字符串传递给之后释放它吗? 我有一些类似的代码: 在将字符串传递给之后释放字符串时,出现错误。如果我删除呼叫,该错误消失。我究竟做错了什么? 我看到矛盾的意见。有人说我应该自己释放它,有人说VM释放它,有人说VM不释放它,而您应该用奇怪的巫术魔术来释放它。我很困惑。 问题答案: 参数to 的存储完全由您负责:如果您分配了,则需要它。因此,您发布的代码段是正确的。您正在其

  • 问题内容: 在以下示例中,我有一些有关内存使用的相关问题。 如果我在解释器中运行, 我的机器上使用的实际内存最高为80.9mb。那我 实际内存下降,但仅限于。解释器使用基线,因此不向 释放内存有什么好处?是否因为Python正在“提前计划”,以为你可能会再次使用那么多的内存? 它为什么特别释放- 释放的量基于什么? 有没有一种方法可以强制Python释放所有已使用的内存(如果你知道不会再使用那么多

  • 我改进了代码,以便从垃圾收集器中获得更好的结果。 现在,当我调用时,它确实释放了所有内存。但是,当我在不调用 的情况下观察内存使用情况时,应用程序确实会保留并使用越来越多的内存。 这是否意味着我的改进正在起作用,我的所有引用都是正确的,我可以忽略JVM是如何自己释放内存的。或者,我的代码中是否存在其他问题,这些问题是JVM在不运行垃圾收集器的情况下保留更多内存的原因。

  • 我正在尝试使用我的GPU而不是CPU来训练一个自定义的对象检测模型。我遵循了以下教程中给出的所有说明:https://tensorflow-object-detection-api-tutorial.readthedocs.io/ 我已经测试了我的软件,一切都已安装并正常工作。 目前正在使用: Windows 10 但问题是,在训练几秒钟后,它停止使用GPU,并发出以下警告消息。 此外,我没有在我

  • 我设置了一个python代码来运行Selenium。在运行结束时,我使用来关闭实例。()我认为它应该从内存中释放(我在Windows 7上)。但是,每次运行之后,内存中都会保留一个实例。我希望有一种方法可以用python编写一些东西来终止进程。显然,不能完成这项工作。多谢了。