Python SKKmeans与多处理

Python SKKmeans与多处理,python,parallel-processing,scikit-learn,k-means,Python,Parallel Processing,Scikit Learn,K Means,我无法理解n_工作是如何工作的: data, labels = sklearn.datasets.make_blobs(n_samples=1000, n_features=416, centers=20) k_means = sklearn.cluster.KMeans(n_clusters=10, max_iter=3, n_jobs=1).fit(data) 运行时间不到1秒 当n_jobs=2时,它的运行量几乎是原来的两倍 因为n_jobs=8,它太长了,在我的电脑上从来没有结束过。。

我无法理解n_工作是如何工作的:

data, labels = sklearn.datasets.make_blobs(n_samples=1000, n_features=416, centers=20)
k_means = sklearn.cluster.KMeans(n_clusters=10, max_iter=3, n_jobs=1).fit(data)
运行时间不到1秒

当n_jobs=2时,它的运行量几乎是原来的两倍

因为n_jobs=8,它太长了,在我的电脑上从来没有结束过。。。(我有8个核)


有什么我不明白并行化是如何工作的吗?

你可以使用
n_作业=-1
来使用你所有的CPU,或者
n_作业=-2
来使用它们,除了一个。

你可以使用
n_作业=-1
来使用你所有的CPU,或者
n_作业=-2
来使用除一个以外的所有CPU。

并行化例程应使用并发进程/线程的数量

有些并行默认使用多线程后端,有些则使用 多处理后端。可以使用sklearn.utils.parallel_backend覆盖默认后端

使用pythongil,更多的线程并不能保证更好的速度。因此,请检查您的后端是否配置了线程或进程。如果是线程,则尝试将其更改为进程(但也会增加IPC的开销)

再次从文档中:

并行处理是否有助于改进运行时取决于 很多因素,通常最好是进行实验,而不是 假设增加就业机会总是一件好事。信息技术 运行的多个副本可能会严重影响性能 一些并行的估计量或函数


因此
n_jobs并不是一个灵丹妙药,但我们必须进行实验,看看它是否适用于他们的估计量和数据类型

n_作业
指定并行例程应使用的并发进程/线程的数量

有些并行默认使用多线程后端,有些则使用 多处理后端。可以使用sklearn.utils.parallel_backend覆盖默认后端

使用pythongil,更多的线程并不能保证更好的速度。因此,请检查您的后端是否配置了线程或进程。如果是线程,则尝试将其更改为进程(但也会增加IPC的开销)

再次从文档中:

并行处理是否有助于改进运行时取决于 很多因素,通常最好是进行实验,而不是 假设增加就业机会总是一件好事。信息技术 运行的多个副本可能会严重影响性能 一些并行的估计量或函数


因此n_jobs并不是一个灵丹妙药,但我们必须进行实验,看看它是否适用于他们的估计量和数据类型

这可能会回答你的问题:嗯。。不是真的,因为我有8个cpu核心,所以这不是问题。你能重现这个问题吗,或者这只是在我的计算机上吗?你的skearn和joblib版本是什么?对于1到8之间的n_作业的每个值,上面的代码都正常工作(在1秒内完成)。我有4个核。我正在使用最新版本的scikit learn on python 3.6。你需要检查你的版本这可能会回答你的问题:嗯。。不是真的,因为我有8个cpu核心,所以这不是问题。你能重现这个问题吗,或者这只是在我的计算机上吗?你的skearn和joblib版本是什么?对于1到8之间的n_作业的每个值,上面的代码都正常工作(在1秒内完成)。我有4个核。我正在使用最新版本的scikit learn on python 3.6。你需要检查你的版本