带多处理功能的Sklearn kmeans

时间:2018-12-07 11:09:20

标签: python parallel-processing scikit-learn k-means

我不明白n_jobs是如何工作的:

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个内核)

关于并行化的工作方式我是否不了解?

2 个答案:

答案 0 :(得分:1)

您可以使用n_jobs=-1来使用所有CPU,也可以使用n_jobs=-2来使用除一个以外的所有CPU。

答案 1 :(得分:1)

n_jobs指定并行化例程应使用的并发进程/线程数

来自docs

  

默认情况下,某些并行机制使用多线程后端,而某些   多处理后端。可以使用sklearn.utils.parallel_backend覆盖默认后端。

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

再次从文档中获得

  

并行处理是否有助于改善运行时取决于   有很多因素,通常尝试而不是尝试是个好主意   假设增加工作数量始终是一件好事。它   可能会严重影响运行多个副本的性能   一些并行的估计器或函数。

因此n_jobs并不是灵丹妙药,但必须尝试一下,看看它是否适用于他们的估计量和数据种类。