yl-1993/learn-to-cluster

Large-scale data test GCN-V

Closed this issue · 9 comments

@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进行测试的。

XHQC commented

@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
XHQC commented

如果特征发生了变化,是需要重新构建knn图的,因为特征不同连接方式也会发生变化。如果新的数据集是在原数据集上以增量的方式出现,则可能存在一些更加高效的计算方式,目前这个也是一个开放的问题,一些讨论可以参考#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比较小的话,理论上计算是很快的。