【问题标题】:Sklearn kmeans with multiprocessing具有多处理功能的 Sklearn kmeans
【发布时间】:2019-05-09 03:34:20
【问题描述】:

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

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

【问题讨论】:

  • 这可能会回答你的问题:unix.stackexchange.com/questions/80424/…
  • 好吧.. 不是真的,因为我有 8 个 cpu 核心,所以这不是问题。您能否重现此问题,还是仅在我的计算机上出现此问题?
  • 你的 searn 和 joblib 版本是什么?
  • 对于介于 1 到 8 之间的每个 n_jobs 值,上面的代码工作正常(在 1 秒内完成)。我有 4 个内核。我在 python 3.6 上使用最新版本的 scikit-learn。您需要检查您的版本

标签: python parallel-processing scikit-learn k-means


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    来自docs

    有些并行默认使用多线程后端,有些是 多处理后端。可以使用 sklearn.utils.parallel_backend 覆盖默认后端。

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

    再次来自文档:

    并行处理是否有助于提高运行时间取决于 许多因素,通常最好进行实验而不是 假设增加工作的数量总是一件好事。它 运行多个副本可能对性能非常不利 一些估计器或函数并行。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-28
      • 1970-01-01
      • 1970-01-01
      • 2016-11-19
      • 1970-01-01
      • 2019-02-26
      • 1970-01-01
      相关资源
      最近更新 更多