我正在使用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闲置,这将产生问题。
还有其他变种吗?
答案 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