2015-05-26 104 views
2

我有在YAML中描述的卷积神经网络模型。当我运行pylearn2的train.py时,我看到只有四个核心中的一个被使用。Theano/Pylearn2。如何并行化培训?

有没有办法运行多线程培训?

是的,也许它是一个Theano问题。我遵循http://deeplearning.net/software/theano/tutorial/multi_cores.html关于多核心支持的Theano教程,而OMP_NUM_THREADS=2 python theano/misc/check_blas.py -q不适用于我 - 我看到只有一个线程正在运行。并进一步的问题: 可以训练与OMP_NUM_THREADS并行?因为我不能检查它,因为OMP_NUM_THREADS不做这件事。 那我该不该打扰我的BLAS呢?

我有BLAP与LAPACK,numpy连接到它们,python 2.7.9,我的系统是Ubuntu 15.04在Core i5 4300U上。

谢谢,热烈祝福!

回答

2

对你的问题最直接的回答是:你不能以你想要的方式并行训练。

BLAS,OpenMP和/或在GPU上运行只允许某些操作被并行化。如果训练算法被设计为并行化,那么训练本身只能以你想要的方式并行化。默认情况下,PyLearn2使用不可并行化的普通随机梯度下降(SGD)训练算法。有支持并行化的SGD版本(例如Google's DistBelief),但是这些在PyLearn2中不提供。这主要是因为PyLearn2构建在Theano之上,Theano非常适合共享内存操作。

如果您有GPU,那么您几乎可以切换到GPU来获得更快的培训。如果这不是一个选项,只要您的BLAS和OpenMP设置正确,您应该会看到多个核心正在使用一段时间。 check_blas.pyOMP_NUM_THREADS > 2表明您没有正确设置时没有显示任何改进。如果您需要此方面的帮助,我建议您打开一个新问题,提供有关您所做的更多信息以及numpy在打印其配置时显示的设置(例如,请参阅here)。

+0

很清楚,谢谢! – Anatoly