learn-to-cluster
learn-to-cluster copied to clipboard
Large-scale data test GCN-V
@yl-1993 ,您好,我在大规模数据对GCN-V测试时出现‘ CUDA out of memory.’的问题,并且在修改batch_size_per_gpu = 1后,仍然出现内存问题,我所用的GPU时RTX2080ti,请问论文里提到的用5M数据测试时,参数时怎么设置的,支持多GPU测试吗?如果支持,在哪里修改它?期待您的早日回复。
@Linsongrong 抱歉回复迟了。在大规模测试的情况下,可以用两种方式,一种是直接利用CPU进行计算,另一种是用采样的方式进行局部的计算。前者主要依赖于CPU上的稀疏矩阵乘法,目前很多底层的库都支持对矩阵乘法进行并行加速。后者基于采样,如果采样的子图之间没有重叠,可以采样多GPU进行比较高效的加速,这部分目前在这个repo里没有实现,一种简单的方式是像super-vertex那篇paper一样,先对整个大图进行简单的partition,在每个partition上分别inference。理论上后者的速度会比前者快不少。
为了排除无关的干扰因素,保持setting的一致,论文中的5M数据测试时是直接利用CPU进行测试的。
@yl-1993 @Linsongrong 请问5M数据集测试的时间是多少呢,需要多大的CPU?
@XHQC Hi, 我们论文中报告的数据是“Empirically, a 1-layer GCN takes 37G CPU Ram and 92s with 16 CPU on a graph with 5.2M vertices for inference.”
以下是去年做paper时profile的一些数据,看起来5M数据的测试时间(不包括KNN Graph的构建)大约是750s左右。这个算法和数据集的规模是线性相关的,所以可以先在小规模的数据上做一些测试,然后对时间做一些线性估算。当然,如果大数据导致内存不足,例如使用了swap,则会大大减慢整体的速度。
prepare_graph | prepare_tensor | pred_confidence | confidence2peak | |
---|---|---|---|---|
avg | 166.66 | 127.94 | 91.78 | 63.96 |
exp1 | 172.6 | 128 | 99.5 | 68.2 |
exp2 | 174.8 | 132.8 | 95.6 | 66 |
exp3 | 163.2 | 121.7 | 83 | 64.1 |
exp4 | 161.9 | 129.6 | 87.2 | 65.2 |
exp5 | 160.8 | 127.6 | 93.6 | 56.3 |
嗯,万分感谢作者的解答,关于knn 图的构建,我有个疑问,knn图的构建是需要特征集参与输入,也就是每次在新的数据集上都需要重新构建knn图,这部分时间在实际应用当中每次都要计算在内的,还是只要数据集大小一样就不需要重新构建knn 图呢?
---Original--- From: "Lei Yang"<[email protected]> Date: Wed, Sep 30, 2020 18:15 PM To: "yl-1993/learn-to-cluster"<[email protected]>; Cc: "BOD"<[email protected]>;"Mention"<[email protected]>; Subject: Re: [yl-1993/learn-to-cluster] Large-scale data test GCN-V (#55)
@XHQC Hi, 我们论文中报告的数据是“Empirically, a 1-layer GCN takes 37G CPU Ram and 92s with 16 CPU on a graph with 5.2M vertices for inference.”
以下是去年做paper时profile的一些数据,看起来5M数据的测试时间(不包括KNN Graph的构建)大约是750s左右。这个算法和数据集的规模是线性相关的,所以可以先在小规模的数据上做一些测试,然后对时间做一些线性估算。当然,如果大数据导致内存不足,例如使用了swap,则会大大减慢整体的速度。 prepare_graph prepare_tensor pred_confidence confidence2peak avg 166.66 127.94 91.78 63.96 #1 172.6 128 99.5 68.2 #2 174.8 132.8 95.6 66 #3 163.2 121.7 83 64.1 #4 161.9 129.6 87.2 65.2 #5 160.8 127.6 93.6 56.3
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or unsubscribe.
如果特征发生了变化,是需要重新构建knn图的,因为特征不同连接方式也会发生变化。如果新的数据集是在原数据集上以增量的方式出现,则可能存在一些更加高效的计算方式,目前这个也是一个开放的问题,一些讨论可以参考https://github.com/yl-1993/learn-to-cluster/issues/30
请问数据规模有上千万时候,发现使用knn聚类特别久,是不是这块可以用faiss_gpu来构建会快得多?构建完后再使用CPU完成GCN推理。 不知道作者5M数据KNN走一遍得多久?
@zhaoxin111 是的,用faiss_gpu会快很多。5M数据的KNN我跑了大概几分钟。
详细的faiss-gpu的benchmark可见 http://ann-benchmarks.com/faiss-gpu-batch-batch.html
@yl-1993 感谢回复,我用faiss_gpu试了下,faiss_search_approx_knn这一步很快,但是后面precise_dist计算了很久也没出结果(超过30分钟了),考虑到我的测试数据仅1W,precise_dist这块逻辑不是太明白,这么久没出结果是不是有什么问题?
@zhaoxin111 这里的逻辑是先搜索出近似的knn,然后在比较少的K的范围内,精确计算他们的similarity。如果K比较小的话,理论上计算是很快的。