簡體   English   中英

帶多處理功能的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時,它運行的次數幾乎是原來的兩倍

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM