2014-09-05 41 views
4

我正在使用sklearn软件包运行一些K-Means集群。检查或关闭Numpy/SciPy并行化

虽然我设置了参数n_jobs = 1,如sklearn文档中所示,尽管单个进程正在运行,但该进程显然会占用我机器上的所有CPU。也就是说,在top中,我可以看到python作业正在使用,例如在4核心机器上使用400%。要清楚的是,如果我设置了n_jobs = 2,那么我会得到两个python实例,但每个实例都使用200%的CPU,并再次占用我机器的全部4个核心。

我认为这个问题可能是NumPy/SciPy级别的并行化。

有没有办法来验证我的假设?例如,有没有办法关闭NumPy/SciPy中的任何并行化?

+0

您的结论是正确的,您可以通过以下代码进行确认。并行化是在BLAS中与numpy一起构建的。我不认为你可以改变它(尽管我不是100%确定的)。 – 2014-09-07 21:34:06

+0

这对于那些需要在共享资源上运行此代码的人来说不是问题吗?这是我遇到的问题。如果没有定制这种并行化,我不得不请求排队系统中每台机器上的最大CPU数量。 – EMiller 2014-09-08 15:36:29

+0

您的调度系统不应该照顾那个吗? – 2014-09-09 10:07:16

回答

1

确实BLAS,或者在我的情况下,OpenBLAS正在执行并行化。

解决方法是将环境变量OMP_NUM_THREADS设置为1

然后一切都与世界正确。

相关问题