神经网络训练实验的队列管理员

时间:2017-10-04 07:50:41

标签: python tensorflow neural-network queue keras

我正在使用Keras + TensorFlow后端进行神经网络实验。我在我的电脑上使用GPU运行Windows 7。

我的工作流程如下所示。

我创建了一个小型python脚本,定义了一个模型然后运行model.fit_generator大约50个时期并提前停止,如果验证准确性在10-15个时期后没有改善。然后我使用python model_v3_4_5.py

之类的命令运行终端

通常一个时期大约需要1.5小时。在此期间,我想到了一些新想法(培训参数或新架构)。

然后我创建一个新的python脚本......

在实验过程中,我发现最好不要并行训练几个模型。我经历了纪元时间加倍和验证准确性的奇怪降低。

因此,我想等到第一次训练结束然后再进行第二次训练。同时,我想避免我的电脑闲置,并在第一次完成后立即开始新的培训。

但我不确切知道第一次训练何时完成,因此,像timeout <50 hours> && python model_v3_4_6.py这样的命令运行将是一个愚蠢的解决方案。

然后我需要某种队列管理器。

我想到的一个解决方案是在我的PC上安装Jenkins slave并使用Jenkins提供的队列。据我所知,Jenkins存在GPU访问问题。

另一种变体 - 在不同的细胞中训练Jupyter笔记本中的模型。但是,我在这里看不到单元格执行的队列。这是一个topic, being discussed

更新。下一个变体。向模型脚本添加一些代码,检索当前的GPU状态(它当前是否运行NN?)并等待它是否正在计算。如果有几个脚本(不止一个明亮的新想法):)等待GPU闲置,这将产生问题。

还有其他变种吗?

1 个答案:

答案 0 :(得分:0)

最后,我来了简单的cmd脚本

set PYTHONPATH=%CD%
:start

for %%m in (train_queue\model*.py) do (
    python %%m
    del %%m
)

timeout 5
goto start

创建一个子目录train_queue并将带有模型的脚本放入其中。所有脚本都将其输出记录到文件中,文件的名称包含时间戳。

此脚本还会调用timeout program