我有YAML中描述的卷积神经网络模型。当我运行pylearn2' train.py
时,我发现只使用了四个核心。
有没有办法运行多线程培训?
是的,可能是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烦恼吗?
我有BLAS与LAPACK,numpy
连接到它们,python 2.7.9,我的系统是Core i5 4300U上的Ubuntu 15.04。
谢谢你,温暖的祝福!
答案 0 :(得分:2)
您问题的最直接答案是:您无法以您希望的方式并行化培训。
BLAS,OpenMP和/或在GPU上运行只允许某些操作并行化。如果训练算法被设计为并行化,则训练本身只能以您希望的方式进行并行化。默认情况下,PyLearn2使用不可并行化的普通随机梯度下降(SGD)训练算法。有支持并行化的SGD版本(例如Google's DistBelief)但这些在PyLearn2现成的版本中不可用。这主要是因为PyLearn2构建于Theano之上,而Theano非常适合共享内存操作。
如果你有GPU,那么你几乎肯定会通过切换到GPU来获得更快的训练。如果这不是一个选项,只要您的BLAS和OpenMP设置正确,您应该会看到有一些时间使用多个核心。当check_blas.py
表示您没有正确设置时,OMP_NUM_THREADS > 2
未显示任何改进这一事实。如果您需要帮助,我建议您打开一个新问题,提供有关您所做工作的更多信息,以及打印配置时numpy显示的设置(例如,请参阅here)。