Keras数据生成器的多进程实现

时间:2018-11-27 18:15:27

标签: python tensorflow keras

https://github.com/keras-team/keras/blob/920e8af34a43ad2cd11190a21200a2acbfd83e11/keras/utils/data_utils.py#L567

OrderedEnqueuer用于Sequence数据生成器。在将multiprocessing设置为true的情况下使用它时,它将为每个时期重新创建一个新的处理池。我想知道为什么,因为IMO,我觉得重新创建一个新池是多余的。我当前使用的是Keras 2.1.3,并使用此版本中引入的关闭语法,他们声称这里的内存泄漏问题(https://github.com/keras-team/keras/issues/8668)已解决。但是,当我打开包含以下内容的多处理标志时,我仍然遇到很多奇怪的问题:

  1. 服务期结束后,训练过程停止,我必须按ctrl + C退出并继续。
  2. 退出ctrl + C时,有时GPU中的内存不会释放。如果我使用sudo fuser -v /dev/nvidia*这个命令进行检查,我仍然可以看到很多进程在打开。我必须手动杀死所有这些以释放内存。

理想情况下,每次创建新池并释放旧池时,关闭实现都不会引起IMO的问题。但实际上,这似乎并没有完成我们想要的工作。玩弄了源代码,但还没有弄清楚原因。我还尝试不为每个时期重新创建新池,这似乎解决了问题。然后我的问题就变成了为什么keras实现者选择为每个纪元重新创建一个新池。

我觉得这个问题应该解决github问题,但是当我尝试创建问题时看到了这个问题:

enter image description here

我把它放在这里,因为这是一个“实施问题”。

0 个答案:

没有答案