[英]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.