【问题标题】:Theano/Pylearn2. How to parallelize training?Theano/Pylearn2。如何并行训练?
【发布时间】:2015-08-08 20:00:45
【问题描述】:
我有 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 烦恼吗?
我有带 LAPACK 的 BLAS,numpy 连接到它们,python 2.7.9,我的系统是 Core i5 4300U 上的 Ubuntu 15.04。
谢谢你,温馨的祝福!
【问题讨论】:
标签:
python
multithreading
machine-learning
theano
【解决方案1】:
对您的问题最直接的回答是:您无法以您想要的方式并行化训练。
BLAS、OpenMP 和/或在 GPU 上运行仅允许并行化某些操作。如果训练算法被设计为并行化,则训练本身只能以您想要的方式并行化。默认情况下,PyLearn2 使用不可并行化的普通随机梯度下降 (SGD) 训练算法。有支持并行化的 SGD 版本(例如Google's DistBelief),但这些在 PyLearn2 现成的版本中不可用。这主要是因为 PyLearn2 构建在 Theano 之上,而 Theano 非常适合共享内存操作。
如果您有 GPU,那么通过切换到 GPU,您几乎肯定会获得更快的训练。如果这不是一种选择,只要正确设置了 BLAS 和 OpenMP,您应该会看到一段时间内使用了多个内核。当OMP_NUM_THREADS > 2 表明您没有正确设置它们时,check_blas.py 没有显示出任何改进的事实。如果您需要这方面的帮助,我建议您打开一个新问题,提供有关您所做工作的更多信息,以及打印其配置时 numpy 显示的设置(例如,参见 here)。