繁体   English   中英

带多处理功能的Sklearn kmeans

[英]Sklearn kmeans with multiprocessing

我不明白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个内核)

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

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

来自文档

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

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

再次从文档:

并行处理是否有助于改善运行时取决于许多因素,并且进行实验通常是一个好主意,而不是假设增加作业数量始终是一件好事。 并行运行某些估算器或函数的多个副本可能会对性能造成极大损害。

因此, n_jobs不是灵丹妙药,而是必须进行试验,看看它是否适用于他们的估算器和数据类型。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM