2014-09-05 81 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

然後一切都與世界正確。