图灵TOPIA
作者:Zhaocheng Zhu
编译:刘静、李翔宇
图灵联邦编辑部出品
近日,MILA实验室助理教授唐建在社交媒体宣布其自主开发的图表示学习系统GraphVite开源啦!
GraphVite是什么?
它专为CPU-GPU混合架构设计的一种通用高性能图形嵌入系统,支持多GPU并行,在百万节点的图上,只需要一分钟左右来学习节点的表示。
现在支持多种任务包括Node Embedding、Knowledge Graph Embedding以及Graph&High-dimensional data visualization。
有什么特点?
快速训练
GraphVite使用多个CPU和GPU加速图形嵌入。只需要1分钟左右来学习具有100万个节点的图形的节点嵌入,它可以快速迭代算法和想法。
十亿规模
设计可扩展,即使GPU内存有限,也能够处理大规模图形。只有4个GPU,它可以在一天内训练十亿比例图的节点嵌入。
应用程序管道
支持完整的节点嵌入,知识图嵌入,图和高维可视化管道。它是模型和评估任务的现成平台。
GitHub:
https://github.com/DeepGraphLearning/graphvite
以下是具体介绍:
近年来,由于节点的简单性和在各种应用中的有效性,学习节点的连续表示越来越受到学术界和工业界的关注。其目的是在低维空间中保持网络结构。这种方法在节点分类、链路预测、网络可视化等多种应用中取得了成功。在这方面已经提出了许多工作,包括DeepWalk、LINE和node2vec。
这些方法通过预测每个节点的邻节点来学习有效的节点嵌入,并通过异步随机梯度下降(ASGD)对其进行有效优化。在具有多核CPU的单台机器上,它们能够处理具有一个或数百万个节点的网络。
鉴于现实世界网络容易进入数千万个节点和近数十亿条边,如何使节点嵌入方法适应如此大规模的网络仍然是非常具有挑战性的。人们可能会想到利用计算机集群来训练大规模网络。但是,将现有方法扩展到分布式设置是一项非常重要的任务。
即使可以使用分布式算法,大型CPU集群的成本对许多用户来说仍然过高。因此,我们想知道是否有可能将节点嵌入方法扩展到单个机器上的非常大的网络,这对普通用户来说应该特别有价值。受近期使用GPU训练深度神经网络的成功启发,我们希望利用这种高度并行的硬件来加速节点嵌入的训练。
然而,直接采用GPU进行节点嵌入可能效率低,因为节点嵌入中的采样过程需要在网络结构上进行过多的随机内存访问,这是GPU的缺点。与GPU相比,CPU更能够执行随机内存访问。
表1:节点嵌入在具有5000万个节点和10亿条边的scale-free网络上的内存成本。
与深度神经网络不同,节点嵌入的训练涉及到每次计算的内存访问量。因此,小批量SGD在受益于快速GPU计算之前将遭受总线上严重的内存延迟。因此,除了小批量SGD之外,我们需要设计一个系统,该系统利用CPU和GPU的独特优势,并协同使用它们来有效地训练节点嵌入。
总体而言,构建具有GPU的高效节点嵌入系统的主要挑战是:
(1)有限的GPU内存节点嵌入的参数矩阵非常大,而单个GPU的内存非常小。现代GPU通常具有12GB或16GB的容量。
(2)有限的总线带宽总线的带宽远远低于GPU的计算速度。如果GPU经常与主内存交换数据,则会有严重的延迟。
(3)大同步成本许多数据在CPU和GPU之间传输。CPU-GPU或GPU间同步都非常昂贵。
在本文中,我们提出了一种名为GraphVite的高性能CPU-GPU混合系统,用于在大规模网络上训练节点嵌入。
图1:混合动力系统概述。灰色和黄色框分别对应于网络增强和嵌入训练的阶段。前者是通过在CPU上并行在线扩充来执行的。
后者通过GPU上的并行负采样来执行。这两个阶段与我们的协作策略异步执行。
图2:4个GPU上的并行负采样图示。在每集中,GPU从样本池中获取正交块。每个GPU都使用从其自己的上下文节点中提取的负样本来训练嵌入。episode之间只需要同步。
图3:在4个分区的情况下,度引导节点和上下文分区策略
在CPU端,通过网络上的在线方式随机遍历并行生成增强边缘样本,并用作训练数据。
在GPU端,提出了一种新颖的并行负采样,利用多个GPU同时训练节点嵌入,无需太多的数据传输和同步。
此外,提出了一种有效的协作策略,以进一步降低CPU和GPU之间的同步成本。
在多个真实世界网络上的实验表明GraphVite是超级高效的。在具有4个GPU的单个机器上具有100万个节点和500万条边的网络仅需要大约一分钟,并且对于具有6600万个节点和18亿条边的网络而言需要大约20小时。
与当前最快的系统相比,GraphVite的速度提高了大约50倍,而且没有任何性能损失。
实验结果
表2:实验中使用的数据集的统计
表3:Youtube上不同系统的时间结果。预处理时间是指训练前的所有耗时,包括网络输入和离线网络扩充。请注意,OpenNE的预处理时间不具有可比性,因为它没有网络扩充阶段。GraphVite的加速比是根据LINE计算的,LINE是当前最快的系统。
表4:Youtube上节点分类结果
表5:较大数据集的时间结果。我们只评估具有4个GPU的Hyperlink-PLD和Friendster,因为它们的嵌入矩阵无法适应单个GPU的内存
图4:GraphVite在较大数据集上的性能曲线。对于Friendster,我们绘制LINE的结果以供参考。其他系统在一周内无法解决任何这些数据集
表6:GraphVite中主要成分的消融。请注意,基线与GraphVite具有相同的GPU实现,并且在CPU上具有并行边缘采样。基线应该被视为非常强大的基线。
表7:不同洗牌算法的性能和速度结果。提出的伪随机算法在性能和速度之间取得了最佳的平衡。
图5:GraphVite相对于不同episode大小的速度和性能。虚线表示没有并行负采样的单个GPU基线。
图6:不同硬件数下的加速结果。
表8:GraphVite在不同硬件配置下的训练时间。通常,GraphVite可能需要在大多数硬件上的这两种配置之间花费一些时间。
论文地址:
https://arxiv.org/pdf/1903.00757.pdf