OrderedEnqueuer用于Sequence数据生成器。在将multiprocessing设置为true的情况下使用它时,它将为每个时期重新创建一个新的处理池。我想知道为什么,因为IMO,我觉得重新创建一个新池是多余的。我当前使用的是Keras 2.1.3,并使用此版本中引入的关闭语法,他们声称这里的内存泄漏问题(https://github.com/keras-team/keras/issues/8668)已解决。但是,当我打开包含以下内容的多处理标志时,我仍然遇到很多奇怪的问题:
sudo fuser -v /dev/nvidia*
这个命令进行检查,我仍然可以看到很多进程在打开。我必须手动杀死所有这些以释放内存。 理想情况下,每次创建新池并释放旧池时,关闭实现都不会引起IMO的问题。但实际上,这似乎并没有完成我们想要的工作。玩弄了源代码,但还没有弄清楚原因。我还尝试不为每个时期重新创建新池,这似乎解决了问题。然后我的问题就变成了为什么keras实现者选择为每个纪元重新创建一个新池。
我觉得这个问题应该解决github问题,但是当我尝试创建问题时看到了这个问题:
我把它放在这里,因为这是一个“实施问题”。