1

在过去的几周里,我一直在尝试HDBSCAN使用python 3.7. 有问题的数据大约是 400 万行 x 40 列,格式约为GB1.5 CSV。它是整数、布尔值和最多 9 位浮点数的混合体。

在此期间,每次我能够将数据收集到集群中都需要 3 天多的时间,这似乎很奇怪,HDBSCAN因为它的速度很受推崇,我在一个 96 cpu 的谷歌云计算实例上运行它。我花了几天时间试图让它利用云实例的处理能力,但无济于事。

使用 中的自动算法检测HDBSCAN,它选择 boruvka_kdtree 作为最佳算法使用。而且我尝试将各种值传递给 core_dist_n_jobs 参数。从 -2,-1, 1, 96, multiprocessing.cpu_count(), 到 300。所有这些似乎都具有相似的效果,即导致 4 个主要 python 进程利用完整的核心,同时产生更多的睡眠进程。

我拒绝相信我做对了,这确实是这个硬件需要多长时间。我确信我必须遗漏类似JupyterHub在同一台机器上使用会导致某种GIL锁定的问题,或者我遗漏了HDBSCAN.

这是我目前的电话HDBSCAN

hdbscan.HDBSCAN(min_cluster_size = 100000, min_samples = 500, algorithm='best', alpha=1.0, memory=mem, core_dist_n_jobs = multiprocessing.cpu_count())

我已经关注了我能找到的与这个问题相关的所有现有问题和帖子,到目前为止没有任何工作,但我总是尝试甚至激进的想法,因为这甚至不是我想要集群的完整数据这个速度需要 4 年才能对完整数据进行聚类!

4

1 回答 1

1

据作者说

只有核心距离计算可以使用所有核心,遗憾的是这显然是前几秒。不幸的是,其余的计算很难并行化,并且将在单个线程上运行。

您可以从以下链接中阅读问题:

没有使用所有可用的 CPU?

core_dist_n_jobs =1 或 -1 -> 完全没有区别,计算时间非常长

于 2019-09-03T07:15:18.203 回答