具有多处理功能的 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 相比,它运行了将近两倍

with n_jobs = 8, 太长了它在我的电脑上从未结束...(我有 8 个内核)

对于并行化的工作原理,我有什么不明白的地方吗?

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

n_jobs 指定并发数 processes/threads 应该用于并行例程

来自docs

Some parallelism uses a multi-threading backend by default, some a multi-processing backend. It is possible to override the default backend by using sklearn.utils.parallel_backend.

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

再次来自文档:

Whether parallel processing is helpful at improving runtime depends on many factors, and it’s usually a good idea to experiment rather than assuming that increasing the number of jobs is always a good thing. It can be highly detrimental to performance to run multiple copies of some estimators or functions in parallel.

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