我在大数据集上运行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之外,所有CPU都被使用了。”我可以看到在km.fit
执行时有几个额外的Python进程在运行,但是只使用了一个CPU。在
这听起来像是GIL issue?如果是这样的话,有没有办法让所有的CPU工作?(看来一定有。。。否则,n_jobs
参数的意义是什么)。在
我猜我错过了一些基本的东西,有人可以确认我的恐惧,或者让我回到正轨上;如果它真的涉及更多,我将转而建立一个有效的例子。在
更新1。为了简单起见,我将n_jobs
切换为正2。以下是我的系统在执行过程中发生的情况:
实际上我不是这台机器上唯一的用户,但是
^{pr2}$表示88%的RAM是免费的(我很困惑,因为在上面的屏幕截图中RAM的使用率至少是27%)。在
更新2。我将sklearn
版本更新为0.15.2,上面报告的top
输出没有任何变化。同样地,用不同的n_jobs
值进行实验也没有任何改进。在
KMeans的并行性只是并行地运行多个初始化。当您设置n_init=1时,只有一个初始化,没有任何东西可以并行化。n峎jobs的docstring目前看来是错误的。我不知道那里发生了什么。在
相关问题 更多 >
编程相关推荐