2015-05-26 98 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