出于某种原因,下面的代码使用了所有可用的内核,即使我已将n_jobs设置为1.我错过了什么或者我应该在scikit上提交问题吗?
import numpy as np
from sklearn import linear_model
liReg = linear_model.LinearRegression(n_jobs=1)
a = np.random.rand(10000,20)
b = np.random.rand(10000)
for i in range(1000):
liReg.fit(a, b)
liReg.predict(a)
我有两个相同的服务器但是一个运行scikit v0.18和一个v0.17 - 这只在使用0.18时发生。
以下是time python example.py
的输出:
使用0.17 - 只使用一个核心:
real 0m8.381s
user 0m6.387s
sys 0m1.677s
使用0.18 - 使用所有核心:
real 0m32.308s # I guess longer due to overhead of parallel process management
user 2m53.612s
sys 20m48.285s
答案 0 :(得分:3)
来自Github上的@GaelVaroquaux:https://github.com/scikit-learn/scikit-learn/issues/8883#issuecomment-301567818
您很可能正在使用并行启用的线性代数库 (如MKL或openBLAS)。因此,这不是scikit-learn正在做的事情 并行计算,它无法控制它(它是一个组件 用于scikit-learn)。你需要找出如何控制 相应的计算砖。
在我的情况下,我在fedora linux上使用OpenBLAS,所以我只是添加:
export OPENBLAS_NUM_THREADS=1
到我的.bashrc
以禁用线性代数调用中的多线程。