我正在大数据集上运行 k-means。我是这样设置的:
from sklearn.cluster import KMeans
km = KMeans(n_clusters=500, max_iter = 1, n_init=1,
init = 'random', precompute_distances = 0, n_jobs = -2)
# The following line computes the fit on a matrix "mat"
km.fit(mat)
我的机器有 8 个核心。文档中说“对于 n_jobs = -2,除一个之外的所有 CPU 都被使用”。我可以看到在执行 km.fit
时有几个额外的 Python 进程在运行,但只使用了一个 CPU。
这听起来像GIL issue吗? ?如果是这样,有什么办法让所有CPU都工作吗? (似乎必须有......否则 n_jobs
参数的意义何在)。
我猜我错过了一些基本的东西,有人可以证实我的恐惧或让我回到正轨;如果它实际上更复杂,我将转向设置一个工作示例。
更新 1。为了简单起见,我将 n_jobs
切换为正值 2。以下是我的系统在执行过程中发生的情况:
实际上我不是机器上的唯一用户,但是
free | grep Mem | awk '{print $3/$2 * 100.0}'
表示 88% 的 RAM 是可用的(让我感到困惑,因为在上面的屏幕截图中 RAM 使用率看起来至少为 27%)。
更新 2。 我将 sklearn
版本更新为 0.15.2,上面报告的 top
输出没有任何变化。尝试使用不同的 n_jobs
值同样没有任何改进。
最佳答案
KMeans 的并行性只是并行运行多个初始化。当您设置 n_init=1 时,只有一次初始化,没有任何可并行化的内容。 n_jobs 的文档字符串目前似乎是错误的。我不确定那里发生了什么。
关于python - KMeans 并行处理失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26406723/