Theano/Pylearn2。如何并行化训练?

Theano/Pylearn2. How to parallelize training?

我有 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 对我不起作用 - 我只看到一个线程 运行ning。进一步的问题: 训练可以与 OMP_NUM_THREADS 并行化吗? 因为 OMP_NUM_THREADS 没有做这件事,所以我无法检查它。 那我应该为我的 BLAS 操心吗?

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

谢谢,温暖的祝福!

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

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

如果您有 GPU,那么您几乎可以肯定通过切换到 GPU 获得更快的训练。如果那不是一个选项,只要您的 BLAS 和 OpenMP 设置正确,您应该会在某些时候看到多个核心被使用。当 OMP_NUM_THREADS > 2 表明您没有正确设置它们时,check_blas.py 没有显示任何改进。如果您需要这方面的帮助,我建议您提出一个新问题,提供有关您所做的工作的更多信息,以及打印其配置时 numpy 显示的设置(例如,参见 here)。