我不明白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个内核)
关于并行化的工作方式我是否不了解?
答案 0 :(得分:1)
您可以使用n_jobs=-1
来使用所有CPU,也可以使用n_jobs=-2
来使用除一个以外的所有CPU。
答案 1 :(得分:1)
n_jobs
指定并行化例程应使用的并发进程/线程数
来自docs
默认情况下,某些并行机制使用多线程后端,而某些 多处理后端。可以使用sklearn.utils.parallel_backend覆盖默认后端。
使用python GIL,更多线程并不能保证更好的速度。因此,请检查您的后端是否配置了线程或进程。如果是线程,则尝试将其更改为进程(但您还将承担IPC的开销)。
再次从文档中获得
:并行处理是否有助于改善运行时取决于 有很多因素,通常尝试而不是尝试是个好主意 假设增加工作数量始终是一件好事。它 可能会严重影响运行多个副本的性能 一些并行的估计器或函数。
因此n_jobs
并不是灵丹妙药,但必须尝试一下,看看它是否适用于他们的估计量和数据种类。