【发布时间】:2017-05-16 02:54:36
【问题描述】:
由于某种原因,即使我将 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
【问题讨论】:
-
并行处理有这么多开销是很奇怪的。我在我的电脑上试过,它使用所有内核,但运行时间为 6 秒(在 Ipython 中使用 %timeit)。我有 sklearn v0.18
-
使用
n_jobs=2,它似乎仍然使用了我所有的核心,但速度较慢(10 秒,%timeit) -
(我有 64 个双核 cpu...所以这可以解释更戏剧性的效果...)无论如何它仍然使用所有核心仍然很奇怪吗?
标签: python scikit-learn multiprocessing