【发布时间】:2020-02-09 07:01:20
【问题描述】:
我们一直在使用 Kmeans 对我们的日志进行聚类。 一个典型的数据集有 10 个 Mill。具有 100k+ 特征的样本。
为了找到最佳 k - 我们并行运行多个 Kmeans 并选择具有最佳轮廓得分的一个。在 90% 的情况下,我们的 k 值在 2 到 100 之间。 目前,我们正在使用 scikit-learn Kmeans。 对于这样的数据集,在具有 32 个内核和 244 个 RAM 的 ec2 实例上进行聚类大约需要 24 小时。
我目前一直在研究更快的解决方案。
我已经测试过的:
Kmeans + Mean Shift Combination - 稍微好一点(对于 k=1024 --> ~13h),但仍然很慢。
Kmcuda 库 - 不支持稀疏矩阵表示。将需要约 3TB RAM 来将该数据集表示为内存中的密集矩阵。
Tensorflow (tf.contrib.factorization.python.ops.KmeansClustering()) - 今天才开始调查,但要么我做错了,要么我不知道该怎么做煮它。在我对 20k 样本和 500 个特征的第一次测试中,在单个 GPU 上进行聚类比在 1 个线程中的 CPU 上进行聚类要慢。
Facebook FAISS - 不支持稀疏表示。
我的名单上还有 PySpark MlLib Kmeans。但是在 1 个节点上有意义吗?
它会在多个 GPU 上更快地针对我的用例进行训练吗?例如,TensorFlow 与 8 Tesla V-100?
有没有我没听说过的魔法图书馆?
或者只是简单地垂直缩放?
【问题讨论】:
-
1 个节点中的 pyspark 确实没有意义;看看RAPIDS cuML
-
@desertnaut 非常感谢。我想这就是我一直在寻找的。span>
-
@desertnaut,你对这个库有什么经验吗?在玩了几天之后,似乎必须将数据集转换为 cudf.Dataframe (GPU对象)。正确的?我无法想象这样的数据集如何适应 GPU 内存。
-
对不起,我还没有
标签: tensorflow machine-learning pyspark cluster-analysis k-means