具有多处理功能的 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
不是灵丹妙药,但必须进行试验,看看它是否适用于他们的估算器和数据类型。
我无法理解 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
不是灵丹妙药,但必须进行试验,看看它是否适用于他们的估算器和数据类型。