Multithreading Python:使用PyBrain和多处理的多线程学习神经网络

Multithreading Python:使用PyBrain和多处理的多线程学习神经网络,multithreading,python-2.7,scipy,blas,pybrain,Multithreading,Python 2.7,Scipy,Blas,Pybrain,我正在尝试用Python和Python的包来训练一个神经网络 这是我的代码(它训练一个简单的神经网络来学习XOR逻辑) 在我的代码中,有两个函数:一个运行单线程,另一个(假定)使用多处理包运行多线程 据我判断,我的多处理代码是可靠的。但是当我运行它时,多处理代码不会在多个内核上运行。我通过检查运行时间来验证这一点(对于线程=4和4个内核,它需要4倍的时间,而它应该需要大约一个单线程运行的时间)。我通过查看htop/顶部的仔细检查了它 我知道,但多处理软件包应该能处理这个问题 我也知道这件事。但是

我正在尝试用Python和Python的包来训练一个神经网络

这是我的代码(它训练一个简单的神经网络来学习XOR逻辑)

在我的代码中,有两个函数:一个运行单线程,另一个(假定)使用多处理包运行多线程

据我判断,我的多处理代码是可靠的。但是当我运行它时,多处理代码不会在多个内核上运行。我通过检查运行时间来验证这一点(对于线程=4和4个内核,它需要4倍的时间,而它应该需要大约一个单线程运行的时间)。我通过查看
htop
/
顶部的
仔细检查了它

我知道,但多处理软件包应该能处理这个问题

我也知道这件事。但是,如果我在PyBrain包中导入scipy后立即打印进程关联(
print psutil.process(os.getpid()).cpu\u affinity()
),我可以看到关联正常:

$ python ./XOR_PyBrain.py
[0, 1, 2, 3]
Execution time for single threaded training: 14.2865240574 seconds.
Execution time for multi threaded training: 46.0955679417 seconds.
我在我的Debian NAS、Debian桌面和Mac上都观察到了这种行为

Debian NAS的版本信息:

  • CPU:Intel(R)Atom(TM)CPU D2701@2.13GHz
  • Debian 8.4。内核:3.2.68-1+deb7u1 x86_64
  • Python 2.7.9
  • PyBrain 0.3
  • Scipy 0.14.0-2

所以,我的问题是:如何让PyBrain在多核上进行训练?

一切似乎都很正常。我已经测试了你的代码,所有的内核都正常工作。计时的问题来自这样一个事实:“当您试图处理少量数据时,CPU核心无法实现其填充潜力。”

您构建的网络非常简单,因此在每个核心获得100%的使用率之前,该过程将结束。想象一下,如果你想处理数百万个5x5像素的图像。您的计算机等待HDD获取数据的时间远远超过CPU处理数据所需的时间

这里有一些。但在更快的区域(RAM)和更小的数据量(一个十进制数)中。如果您的计算机有DDR4 RAM,情况可能会改变。(但我真的不这么认为)


尝试一个更重的进程、更大的网络、更多的数据等,你会看到你的期望。

你已经实现了吗?@agtoever我可以提请你注意关于多处理和多线程的相似之处,希望你能帮助。我可以提请你注意关于多处理和多线程的相似之处,希望你能帮助我。
$ python ./XOR_PyBrain.py
[0, 1, 2, 3]
Execution time for single threaded training: 14.2865240574 seconds.
Execution time for multi threaded training: 46.0955679417 seconds.