【阅读】Distributed Graph Neural Network Training: A Survey——翻译

转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn]

另一篇:【阅读】A Comprehensive Survey on Distributed Training of Graph Neural Networks


文中,涉及到公式部分的翻译不准确,请看对应原文。

目录

摘要

简介

2 图神经网络的预测

3 分布式GNN训练与挑战

3.1 通用分布式GNN训练流水线

3.2 分布式 GNN 训练的挑战

 3.3 分布式 GNN 训练技术的分类

4 GNN 数据分区

4.1 GNN的成本模型

4.2 GNN 中的图划分

4.3 GNN 中的特征划分

5 GNN 批量生成

5.1 分布式采样的小批量生成

5.2基于分区的小批量生成

6 GNN 执行模型

6.1 计算图生成执行模型

6.2 计算图执行模型

7 GNN 通信协议

7.1 同步 GNN 通信协议同步

7.2 异步GNN通信协议

8 分布式 GNN 训练系统

 8.1 单机多 GPU 系统

8.2 GPU 集群上的系统

8.3 CPU 集群上的系统

8.4 其他

9 未来方向

10 结论


摘要

图神经网络(GNNs)是一种在图上学习的深度学习模型,并已成功应用于许多领域。尽管 GNN 有效,但 GNN 有效地扩展到大型图仍然具有挑战性。作为一种补救措施,分布式计算成为训练大规模 GNN 的一种有前途的解决方案,因为它能够提供丰富的计算资源。然而,图结构的依赖性增加了实现高效分布式 GNN 训练的难度,导致大量通信和工作负载不平衡。近年来,在分布式 GNN 训练方面做出了很多努力,并提出了一系列训练算法和系统。然而,缺乏对从图处理到分布式执行的优化技术的系统回顾。在本次调查中,我们分析了分布式 GNN 训练的三大挑战,即海量特征通信、模型精度损失工作负载不平衡。然后,我们为分布式 GNN 训练中的优化技术引入了一种新的分类法,以应对上述挑战。新分类法将现有技术分为四类,即 GNN 数据分区、GNN 批处理生成、GNN 执行模型 GNN 通信协议。我们仔细讨论了每个类别中的技术。最后,我们分别总结了用于多 GPU、GPU 集群和 CPU 集群的现有分布式 GNN 系统,并讨论了可扩展 GNN 的未来发展方向

简介

        GNN 是处理图建模问题的强大工具,并已广泛应用于各种应用,包括社交网络(例如,社交垃圾邮件发送者检测 [87、112]、社交网络分析 [91])、生物信息学(例如,蛋白质界面预测 [35]、疾病-基因关联 [83])、药物发现 [11、66]、流量预测[61]、医疗保健 [2、21]、推荐 [32、49、 55、111]、自然语言处理 [134、145] 和其他 [26、85、133、141、144]。通过将图结构信息集成到深度学习模型中,GNN 可以获得比传统机器学习和数据挖掘方法明显更好的结果。

        GNN 模型通常包含多图卷积层,其中每个顶点聚合其邻居的最新状态,更新顶点的状态,并将神经网络(即转换)应用于顶点的更新状态。以传统的图卷积网络(GCN)为例,在每一层中,一个顶点使用求和函数聚合邻居状态和自己的状态,然后应用单层 MLP 来转换新状态。如果层数为 𝐿,则此类过程重复 𝐿次。第𝐿层生成的顶点状态被下游任务使用,如节点分类、链路预测等。在过去的几年中,许多研究工作在图神经网络模型的设计方面取得了显着进展。突出的模型包括 GCN [108]、GraphSAGE [46]、GAT [95]、GIN [118] 和许多其他特定于应用程序的 GNN 模型 [128、130]。迄今为止,有数十项调查审查了 GNN 模型 [114、116、135、147]。另一方面,为了有效地开发不同的 GNN 模型,基于各种深度学习库 [8、14、34、44、68、104] 提出了许多面向 GNN 的框架。提出了许多新的优化来加速 GNN 训练,包括 GNN 计算内核 [19、38、52、53、81、93、129]、高效编程模型 [51、113、117] 以及新硬件的充分利用 [18] , 42, 124, 148]。然而,这些框架和优化主要侧重于在单机上训练 GNN,而不太关注输入图的可扩展性

        如今,由于海量大图数据的普遍存在,大规模图神经网络 [62, 70] 成为热门话题。具有数十亿个顶点和数万亿条边的图很常见,例如新浪微博、微信、Twitter 和 Facebook 中的社交网络。然而,大多数现有的 GNN 模型仅在小型图数据集上进行测试,无法或低效地处理大型图数据集 [50]。这是因为以前的 GNN 模型很复杂,在处理大型图时需要大量计算资源。一系列工作通过设计可扩展的 GNN 模型实现了大规模图神经网络。他们使用简化 [36、47、110]、量化 [4、33、54、71、90、100、101、107、139]、采样 [20、123、125] 和蒸馏 [24、121、131] 来设计高效模型。另一行工作采用分布式计算对 GNN 进行训练。因为在处理大图时,单个设备(如GPU)有限的内存和计算资源成为大规模GNN训练的瓶颈,而分布式计算提供了更多的计算资源(如多GPU、CPU集群等)来提高训练效率。在设计高效的分布式 GNN 训练框架(例如 PipeGCN [99]、BNS-GCN [98])和分布式 GNN 训练系统(例如AliGraph [150]、DistDGL [142]、ROC [58])方面已经做出了许多努力.

        在本次调查中,我们重点关注具有分布式计算的大型图神经网络的工作,也就是分布式 GNN 训练。它将模型训练的全部工作量分配给一组workers,所有workers并行处理工作量。然而,由于 GNN 中的数据依赖性,将现有的分布式机器学习方法 [96、103] 应用于 GNN 并非易事,因此提出了许多优化分布式 GNN 训练管道的新技术。尽管有很多关于 GNN 模型的调查 [114、135、147],但据我们所知,系统地审查分布式 GNN 训练技术的努力很少。最近,Besta 等人[9] 只回顾了 GNN 的并行计算范式,而 Abadal [1] 从算法到硬件加速器对 GNN 计算进行了调查。

        为了清楚地组织分布式 GNN 训练的技术,我们引入了一个通用的分布式 GNN训练管道,它由三个阶段组成——数据分区、GNN 模型优化梯度聚合。前两个阶段涉及 GNN 特定的执行逻辑,包括图处理和图聚合。最后一个阶段与传统的分布式机器学习相同。在这种通用分布式 GNN训练管道的背景下,我们讨论了分布式 GNN 训练的三个主要挑战,这些挑战是由图形数据中的数据依赖性引起的,并且需要新的分布式 GNN 特定技术。为了更好地帮助读者理解解决上述挑战的各种优化技术,我们引入了一种新的分类法,将这些技术分为四个正交类别,即 GNN 数据分区、GNN 批处理生成、GNN 执行模型和 GNN 通信协议。该分类法不仅涵盖了mini-batch 分布式 GNN 训练和全图分布式 GNN 训练中使用的优化技术,还讨论了从图处理到模型执行的技术。我们仔细审查了每个类别中的现有技术,然后描述了来自工业界或学术界的 23 个具有代表性的分布式 GNN 系统和框架。最后,我们简要讨论分布式 GNN 训练的未来方向。

        本次调查的贡献如下:

        • 这是第一个关注高效分布式 GNN 训练优化技术的调查,并且它可以帮助研究人员快速了解分布式 GNN 训练的概况

        • 通过考虑端到端分布式GNN训练的生命周期,我们引入了分布式GNN训练技术的新分类。在高层,新的分类法由四个正交类别组成,即GNN数据分区、GNN批处理生成、GNN执行模型和GNN通信协议。

        • 我们为新分类法中的每个类别提供了详细而全面的技术摘要。

        • 我们审查了从工业界到学术界的 23 个具有代表性的分布式 GNN 培训系统和框架。

        • 我们讨论了分布式GNN 训练的未来方向。

2 图神经网络的预测

        图和图分区。图 𝐺 = (𝑉 , 𝐸) 由顶点集 𝑉 和边集 𝐸 组成。顶点𝑣 ∈ 𝑉 的邻居集用𝑁 (𝑣)表示,𝑣 的程度用𝑑 = |𝑁 (𝑣)|表示。在有向图中,顶点𝑣 ∈ 𝑉 的传入和传出邻居的集合分别用𝑁𝑖𝑛 (𝑣) 和𝑁𝑜𝑢𝑡 (𝑣) 表示,对应度用𝑑𝑖𝑛 = |𝑁𝑖𝑛 (𝑣)|和𝑑𝑜𝑢𝑡 = |𝑁𝑜𝑢𝑡 (𝑣)|.一条边 𝑒 ∈ 𝐸 由 (𝑢, 𝑣) 表示,其中 𝑢, 𝑣 ∈ 𝑉。𝐺的相邻矩阵由𝑨表示,其中当(𝑢,𝑣)∈𝐸时,𝑨的条目𝑎𝑢𝑣等于1,否则𝑎𝑢𝑣=0。图中的每个顶点𝑣都有一个初始特征向量𝒙𝒗 ∈ R𝐷 ,其中𝐷是特征向量的维数,图的特征矩阵由𝑿表示。

        可以在分布式设置中对图形进行分区。对于边切割图分区𝐺 = (𝑉 , 𝐸) 分为𝑃 分区{𝐺𝑖 = (𝑉𝑖, 𝐸𝑖 )}, 1 ≤ 𝑖, 𝑗 ≤ 𝑃, 满足𝑉 = ∪𝑉𝑖, 𝑉𝑖 ∩ 𝑉𝑗 = ∅, 1 ≤ 𝑖, 𝑗 ≤ 𝑃. 交叉边的端点称为边界顶点𝐺 是内部顶点。对于顶点切割图分区𝑃 分区应满足𝐸 = ∪𝐸𝑖, 𝐸𝑖 ∩ 𝐸𝑗 = ∅, 1 ≤ 𝑖, 𝑗 ≤ 𝑃. 顶点可以在分区之间复制,并且顶点的复制数量𝑣 称为复制因子。当顶点的复制因子大于1时,该顶点称为边界顶点𝐺 是内部顶点。

        图形神经网络(GNNs)。给定一个图表𝐺 具有相邻矩阵𝑨 和特征矩阵𝑿 其中每行是初始特征向量𝒙𝒗 顶点的𝑣 在图表中𝐺, 一𝑙-GNN中的第三层通过聚合来自相应邻域的特征来更新顶点特征,该过程可以在如下矩阵视图中形式化

其中,𝑯 𝒍 是隐藏嵌入矩阵,并且𝑯 0 = 𝑿 , 𝑾 𝒍−1是模型权重𝑨 是标准化的𝑨 和𝜎 是非线性函数,例如Relu、Sigmoid等。等式1是GNN计算的全局视图。GNN计算的局部视图是单个顶点的计算。给定一个顶点𝑣, 局部计算𝑙-消息传递模式[41]中的第层可以形式化如下

 其中,⊕是聚合函数,𝜙是更新函数,𝒉𝒍-1𝒆𝒖,𝒗是第(𝑙-1)层的边(𝑢,𝑣)的隐藏嵌入。

        GNN 训练方法。为了训练一个 GNN 模型,一个基本的解决方案是在单个 epoch 中更新一次模型参数,这种训练方法称为全图 GNN 训练。然而,全图 GNN 训练是内存密集型的 [108],因为它需要访问整个训练图并且不能扩展到大图。或者,我们可以选择在单个 epoch 的过程中多次更新 GNN 模型参数。这被称为小批量 GNN 训练。一个 epoch 被分成多次迭代,每次迭代用 batch(也就是整个训练数据集的一个子集)更新 GNN 模型。一个小批量可以在一台机器上处理,也可以由多台机器协同处理(称为大批量训练)。图形采样是一种为 GNN 模型生成小批量的流行工具。到目前为止,已经提出了许多基于采样的 GNN [17、23、46、56、125、151],根据不同类型,它们可以分为节点采样、层采样子图采样。不同的批量生成方法会影响训练效率训练精度

3 分布式GNN训练与挑战

3.1 通用分布式GNN训练流水线

        为了更好地理解端到端分布式 GNN 训练的一般工作流程,我们将训练流水线分为数据划分、GNN 模型优化和梯度聚合三个阶段。图 1 可视化了端到端分布式 GNN 训练工作流程的高级抽象。

        数据分区。这是一个支持分布式训练的预处理阶段。它将输入数据(即图形和特征)分配给 一组工人。考虑到 GNN 中的训练数据是相互依赖的,数据划分阶段变得比传统分布式机器学习中的更为复杂。如图 1 所示,分区数据(即子图)之间的跨worker边暗示了数据依赖性。如果我们承认分区之间的数据依赖性,分布式训练效率会因通信而降低;如果我们简单地忽略数据依赖性,模型的准确性就会被破坏。因此,数据分区是端到端分布式 GNN 训练效率的关键阶段。

        GNN 模型优化。这是分布式 GNN 训练的核心阶段,它执行 GNN 模型的训练逻辑(即前向计算和反向计算)。我们进一步将这个阶段分为计算图生成、执行模型通信协议。首先,每个 worker 从分区的输入图和特征生成一个计算图,然后用计算图执行 GNN 模型以计算损失和梯度。然而,由于数据依赖性,计算图的生成和 GNN 模型的执行与传统的深度学习模型有很大不同。如果不访问远程输入数据,可能无法正确生成小批量训练策略的计算图。执行模型涉及 GNN 模型的层图聚合,并且聚合表现出不规则的数据访问模式。在分布式全图训练中,各层中的图聚合需要通过通信协议访问顶点远程邻居中的隐藏特征,并且还应考虑层与层之间的同步模式。因此,与传统的分布式机器学习相比,由于 GNN 中的数据依赖性,计算图生成和模型执行变得更加复杂

        梯度聚合。该阶段负责聚合最新的局部梯度以获得全局梯度并更新模型参数。在 GNN 的背景下,模型尺寸通常很小,模型更新逻辑与其他机器学习模型相同。经典分布式机器学习中现有的梯度聚合技术可以直接应用于分布式 GNN 训练。

3.2 分布式 GNN 训练的挑战

        由于数据依赖性,有效训练分布式 GNN 并非易事。我们总结了以下三大挑战。

        挑战 #1:海量特征交流。对于分布式 GNN 训练,在 GNN 模型优化阶段会产生大量特征通信。当GNN 模型以 mini-batch 方式训练时,计算图生成(即 mini-batch 构造)需要访问远程图和特征,如图 1 中的操作 1○ 以创建用于本地训练的批次。即使在使用集中式图存储(例如 CPU 内存)进行的多 GPU 训练中,计算图的生成也会导致从图存储到worker(例如 GPU 内存)的大量数据移动。现有的实证研究表明,小批量构建的成本成为端到端训练中的瓶颈 [57, 140]。当 GNN 模型以全图方式训练时,计算图可以与分区图相同而无需通信,但是每层中的图聚合需要访问顶点远程邻居中的隐藏特征(在图 1 中的操作 2 ○ )导致大量隐藏特征(或嵌入)通信。总之,GNN 模型的分布式小批量训练和分布式全图训练都受到海量特征通信的影响

        挑战 #2:模型准确性的损失。 Mini-batch GNN 训练比全图训练更具可扩展性,因此被大多数现有的分布式 GNN 训练系统采用。然而,随着模型深度的增加,精确的小批量训练会遇到邻居爆炸问题。事实上的解决方案是通过采样忽略跨worker边缘来构造一个近似的小批量。虽然近似的 mini-batches 提高了训练效率,但它不能保证理论上模型的收敛性 [58]。因此,对于分布式 mini-batch GNN 训练,我们需要在模型精度和训练效率之间做出权衡。此外,有发展全图分布式GNN训练的趋势,这种训练具有收敛性保证,能够达到与单节点训练相同的模型精度。

        挑战 #3:工作负载不平衡。工作负载平衡是分布式计算中的一个内在问题。然而,GNN 模型的各种工作负载特征增加了在worker之间划分训练工作负载平衡的难度。因为很难以简单统一的方式对 GNN 工作负载进行建模。如果没有正式的成本模型,经典的图划分算法就不能用来平衡worker之间的 GNN 工作量。此外,分布式 mini-batch GNN 训练要求每个 worker 处理具有相同批大小(即子图大小)的相同数量的 mini-batch,而不是简单地平衡子图中的顶点数量。综上所述,在分布式环境下训练 GNN 很容易遇到工作负载不平衡的情况,从而导致 worker 相互等待,破坏训练效率

 3.3 分布式 GNN 训练技术的分类

        为了通过解决上述挑战实现分布式 GNN 训练并优化效率,过去几年提出了许多新技术。大多数现有作品从系统或框架的角度展示了自己的技术贡献,并没有很好地从技术角度回顾相关工作。在本次调查中,我们根据端到端分布式训练管道中的阶段组织分布式 GNN 特定技术,从而引入了一种新的分类法。通过这样的设计,我们将分布式 GNN 训练流水线中相同阶段优化的类似技术整理在一起,帮助读者充分理解分布式 GNN 训练中不同阶段的现有解决方案。

        根据以往的实证研究,由于数据依赖性,分布式GNN训练的瓶颈一般出现在pipeline中的数据划分和GNN模型优化阶段,而新的 GNN 特定技术位于这些阶段。此外,各种训练策略(例如,小批量训练、全图训练)带来不同的工作负载模式,并导致在模型优化中使用不同的优化技术。例如,模型优化阶段的计算图生成对小批量训练很重要,而通信协议对全图训练很重要。因此,我们的新分类法将分布式 GNN 特定技术分为四类(即 GNN 数据分区、GNN 批处理生成、GNN 执行模型和 GNN 通信协议),如图 2 所示。在下文中,我们介绍了每个类别的概述类别。

        GNN 数据分区。在这个类别中,我们回顾了分布式 GNN 训练的数据分区技术。数据分区的目标是平衡工作负载并最小化 GNN 工作负载的通信成本。 GNN训练是分布式图计算的一个实例,很多传统的图划分方法可以直接使用。然而,由于 GNN 工作负载的新特征,它们对于分布式 GNN 训练来说并不是最优的。研究人员付出了很多努力来设计指导传统图形划分方法的 GNN 友好成本模型。此外,图和特征是 GNN 中两种典型的数据类型,它们都是分区的。一些作品将特征与图结构解耦并独立划分。在第 4 节中,我们详细阐述了现有的 GNN 数据分区技术。

        GNN 批量生成。在这个类别中,我们回顾了用于小批量分布式 GNN 训练的 GNN 批量生成技术。小批量生成的方法会影响训练效率和模型精度。图采样是为大规模 GNN 训练生成小批量的一种流行方法。然而,标准的图采样技术没有考虑分布式环境的因素,并且一个worker上的每个采样器都会频繁访问其他worker的数据,从而导致大量通信。最近,引入了几种针对分布式设置优化的新GNN 批量生成方法。我们进一步将它们分为分布式采样小批量生成基于分区的小批量生成。此外,已经对缓存进行了广泛研究,以减少 GNN 批处理生成期间的通信。在第 5 节中,我们详细阐述了现有的 GNN 批量生成技术。

        GNN 执行模型。在这个类别中,我们回顾了计算图生成计算图执行的执行模型。在计算图的生成过程中,采样和特征提取是占总训练时间的两个主要操作。为了提高效率,提出了不同的执行模型以充分利用计算资源。图聚合应该在计算图生成之后进行,我们称之为计算图执行。在此阶段,每个节点的邻居状态在前向计算中聚合,梯度在后向计算中分散回邻居。由于数据依赖性和不规则的计算模式,传统的机器学习并行模型(例如,数据并行,模型并行等)对于图聚合不是最优的,特别是当特征向量是高维时。从图算子执行顺序的角度,我们将计算图执行模型分为one-short执行模型chunk-based执行模型。从图聚合的同步时效性角度,我们将计算图执行模型分为同步执行模型异步执行模型。基于去除不同的同步点,异步执行模型可以进一步分为两类。这些技术的详细描述在第 6 节中介绍。

        GNN 通信协议。在这个类别中,我们回顾了分布式全图并行训练的通信协议。分布式全图训练的图聚合需要访问远程隐藏嵌入访问,因为顶点的邻居不能总是在图分区的本地。基于图聚合中的同步和异步执行模型,这些通信协议也可以分别分为同步通信协议异步通信协议。前者假设在每一层中,模型访问最新的嵌入,而后者假设在每一层中模型被允许访问过时的嵌入(或历史嵌入)。第 7 节详细介绍了各种通信协议。

4 GNN 数据分区

        在本节中,我们回顾了分布式 GNN 训练中 GNN 数据分区的现有技术。图 3 描述了这些技术的概述。考虑到图和特征是 GNN 中两种典型的数据类型,我们将划分方法分为图划分特征划分优化目标是工作负载平衡以及通信和计算最小化,旨在解决挑战 #1 和 #3。此外,成本模型是捕获 GNN 工作负载特征的另一个关键组件。在下文中,我们首先介绍成本模型,然后分别讨论图形分区特征分区

4.1 GNN的成本模型

        成本模型对数据分区至关重要,因为它对 GNN 工作负载的计算和通信成本进行建模。通常,对于图形分析任务,我们使用顶点数来估计计算成本,使用交叉边数来估计通信成本 [63]。然而,这种简单的方法并不适用于 GNN 任务,因为它们不仅受顶点和交叉边数的影响,还受特征维度、层数和训练顶点分布的影响。研究人员提出了几种特定于 GNN 的成本模型,包括启发式模型基于学习的模型基于算子的模型

        启发式模型选择几个图形指标,通过简单的用户定义函数来估计成本。在流式图分区 [89、119]的上下文中引入了几种用于 GNN 工作负载的启发式模型,它将一个顶点或块一个一个地分配给一个分区。这样的模型为每个顶点或块定义了一个亲和力分数,该分数帮助顶点或块选择合适的分区。

        假设 GNN 任务由 𝐺𝑁 (𝐿, 𝐺, 𝑉𝑡𝑟𝑎𝑖𝑛 , 𝑉𝑣𝑎𝑙𝑖𝑑 , 𝑉𝑡𝑒𝑠𝑡 , 𝑉𝑡𝑒𝑠𝑡 ) 表示,其中 𝐿 是层数,𝐺 是图,𝑉𝑡𝑟𝑎𝑖𝑛 、𝑉𝑣𝑎𝑙𝑖𝑑 和 𝑉𝑡𝑒𝑠𝑡 是训练、验证和测试的顶点集。将图𝐺划分为𝐾子图。在流图分区的上下文中,对于顶点或块的每次分配,令𝑃𝑖 (1 ≤ 𝑖 ≤ 𝐾) 为已分配给它的顶点集,𝑉 𝑖 𝑡𝑟𝑎𝑖𝑛 、𝑉 𝑖 𝑣𝑎𝑙𝑖𝑑 和𝑉 𝑖 𝑡𝑒𝑠𝑡 𝑡𝑒𝑠𝑡 𝑡𝑒𝑠𝑡 是对应的顶点集属于分区𝑃𝑖。

        Lin 等人 [67] 为每个训练顶点 𝑣𝑡 ∈ 𝑉𝑡𝑟𝑎𝑖𝑛 定义一个亲和分数向量,其中每个分数代表顶点与分区的亲和力。令𝐼(𝑣𝑡)为训练顶点𝑣𝑡的neigh-hop in-neighbor集,𝑣𝑡相对于分区𝑃𝑖的得分定义如下,

         其中,𝑉 𝑎𝑣𝑔 𝑡𝑟𝑎𝑖𝑛 = 𝑉𝑡𝑟𝑎𝑖𝑛𝐾 . 该得分函数隐式地平衡分区之间的训练顶点的数量。Liu等人[69]定义了关于块(或子图)的相似亲和性得分𝐵, 正式的定义是

        其中,𝑃𝑎𝑣𝑔 = |𝑉 |𝐾 . Zheng等人[140]定义了块的亲和性得分𝐵 通过考虑所有训练、验证和测试顶点,公式如下

          其中,𝐶𝑟𝑜𝑠𝑠𝐸𝑑𝑔𝑒 (𝑃𝑖, 𝐵)) 是中间交叉边的数量𝐵 和𝑃𝑖 , 𝛼, 𝛽, 𝛾 是用户手动设置的超参数。

        基于学习的模型利用机器学习技术对GNN工作负载的复杂成本进行建模。其基本思想是通过特征工程手动提取特征,并应用经典机器学习来训练成本模型。基于学习的模型不仅能够使用静态图结构信息,还能够使用GNN工作负载的运行时统计信息来估计成本,从而实现比启发式模型更准确的估计。Jia等人[58]介绍了GNN计算成本估算的线性回归模型。该模型估计了单个GNN层的计算成本𝑙 关于任何输入图𝐺 = (𝑉 , 𝐸). 对于图中的每个顶点,他们选择五个特征(列于表1中),包括三个图结构特征和两个运行时特征。估计模型形式化如下,

         其中,𝑤𝑖 (𝑙) 是层l的可训练参数,𝑥𝑖 (𝑣) 是v的第i个特征,以及𝑥𝑖 (𝐺) 总结了G中所有顶点的第i个特征。

         Wang等人[102]使用多项式函数𝑓 以在一组手动选择的特征上估计顶点的计算成本。正式定义为

        其中,𝑇 是由GNN模型定义的邻居类型(例如元路径[102])的数量,𝑛𝑖 是𝑖-th型,𝑚𝑖 是𝑖-第种类型的邻居实例(即𝑖-th类型具有𝑛 顶点,每个顶点都有特征尺寸𝑓 , 然后𝑚𝑖 = 𝑛 × 𝑓 ). 有关函数的详细示例,请参阅原著[102]𝑓 . 子图的总计算成本是子图中顶点的估计成本之和。

        基于运算符的模型枚举GNN工作负载中的运营商,并通过对每个运营商的成本求和来估计总计算成本。Zhao等人[136]将GNN工作量的计算分为正向计算和反向计算。GNN层的正向计算分为聚合、线性变换和激活函数;而GNN层的反向计算分为朝向损失函数的梯度计算、嵌入梯度计算和梯度乘法。因此,计算嵌入的成本ℎ𝑙 𝑣 顶点的𝑣 在层中𝑙 前向和后向传播由𝑐𝑓 (𝑣, 𝑙) 和𝑐𝑏 (𝑣, 𝑙), 分别地

        其中,𝑑𝑙 是𝑙-第GNN层|𝑁𝑣 | 是顶点的邻居数𝑣, 𝛼, 𝛽, 𝛾, 和𝜂 是可以通过测试实际运行时间来学习的恒定因素。最后,小批量的计算成本𝐵 通过将𝐵 从层1到层𝐿 如下所述,

        其中,𝑁 𝑙 𝑢 表示图G中距离顶点u l跳的顶点。

4.2 GNN 中的图划分

        GNN 是一种图计算任务。经典的图划分方法可以直接应用于 GNN 工作负载。许多分布式 GNN 训练算法和系统,如 AliGraph [150]、DistGNN [74] 采用 METIS [63]、Vertex-cut [43]、Edge-cut [63]、流图分区 [89] 和其他图分区方法 [ 10] 在不同的应用中训练 GNN 模型。最近,Tripathy 等人。[94] 对 GCN 模型的 1-D、2-D、1.5-D 和 3-D 图划分方法进行了实证研究。然而,由于 GNN 工作负载的独特性,经典的图分区方法并不是平衡 GNN 工作负载同时最小化通信成本的最佳方法

        在分布式小批量GNN训练中,为了平衡工作负载,我们需要平衡worker之间的训练顶点数量(即每个epoch的批数)。因此,引入了新的优化目标。Zheng等人[142]将DistDGL中的图划分问题表述为多约束划分问题,旨在平衡每个分区中的训练/验证/测试顶点/边。他们采用METIS中的多约束机制来实现同构图和异构图的定制图划分目标[143],并将该机制进一步扩展为两级划分策略,以处理多GPU和多机器的情况,并平衡计算。Lin等人[67]应用流式图分区–(LGD)[89],并使用新的亲和度分数(E.q.3)来平衡GNN工作负载。此外,它们确保分区中的每个顶点都有其完整的𝐿-跳邻居以避免采样期间的大规模通信。最近,基于块的流图分割方法[69,140]被引入用于小批量分布式GNN训练。他们首先使用多源BFS将图划分为许多小块,然后应用具有自定义亲和度分数(例如4、5)的贪婪分配启发式算法来划分粗化的图,并通过将块映射回原始图中的顶点来解开基于块的图划分。除了工作负载平衡,一些工作还可以最小化总计算成本。Zhao等人[136]证明了计算成本函数(E.q.11)是一个亚模函数,并使用METIS将图划分为内聚的小批量,达到2−2/𝑀 最佳计算成本的近似值。

        在分布式全图GNN训练中,我们需要在一组worker之间平衡每个GNN层的工作量,同时最小化worker之间的嵌入通信。为了从不同的GNN模型中建模复杂成本,应用了基于学习的成本模型。在模型感知成本模型之上,采用了现有的图划分方法。例如,Jia等人[58]利用基于线性回归的成本模型(E.q.7),并应用范围图划分来平衡成本模型估计的工作量。此外,范围图分区保证每个分区都包含连续编号的顶点,从而降低了CPU和GPU之间的数据移动成本。Wang等人[102]使用E.q.8来估计分区的计算成本,并应用应用程序驱动的图分区方法[31]来生成工作负载平衡计划,该计划自适应地减轻工作负载并最小化通信成本。基于顶点切割分区,Hoang等人[48]利用2D笛卡尔顶点切割来提高可扩展性。

4.3 GNN 中的特征划分

        作为 GNN 中重要的数据类型,特征也需要进行划分。大多数分布式 GNN 训练解决方案将特征视为图的顶点属性,并且它们与图分区一起进行分区。例如,如果用边切法对图进行分区,那么每个顶点特征都存储在对应顶点所在的分区中。换句话说,特征矩阵是按行划分的

        考虑到与图结构相比特征的不同处理模式,一行工作独立于图划分特征矩阵。当通过 2D 分区方法对图进行分区时,Tripathy 等人 [94] 也使用 2D 分区方法对特征矩阵进行分区,而 Vasimuddin等人 [74]使用逐行方法对具有复制的特征矩阵进行分区,并确保每个顶点在局部具有完整的特征。甘地等[40]深入分析分布式 mini-batch GNN 训练中的通信模式,发现经典的图划分方法仅降低了第一跳过程的通信成本。此外,复杂的图分区(例如 METIS)是一个昂贵的预处理步骤。他们分别介绍了对图和特征进行分区。该图通过随机分区进行分区,以避免昂贵的预处理。输入特征沿特征维度进行分区(也称为按列分区)。换句话说,每个分区包含所有顶点特征的子列。利用这种数据分区策略,他们进一步设计了第 6.2.4 节中介绍的新执行模型,并如第 7.2.2 节所述以最少的通信训练 GNN 模型,尤其是当输入特征具有高维且隐藏特征具有低维时方面。同样,Wolf 等人 [109] 还使用列式特征划分方法来分布式训练超宽 GCN 模型。不同的是,在这种方法中,图是用 METIS 划分的,输入和中间特征都沿着特征维度划分。

5 GNN 批量生成

        小批量 GNN 训练是将 GNN 扩展到大图的常用方法。图抽样是在独立模式下生成小批量的实际工具。到目前为止,已经提出了许多基于采样的 GNN [17、23、46、56、125、151],它们根据不同类型的抽样方法进行抽样,可以分为顶点采样、层采样和子图采样。不同的批量生成方法会影响训练效率和训练精度。为了避免图采样成为瓶颈,对高效的 GNN 数据加载器进行了一些探索 [5、25、27、76]。

        在 mini-batch 分布式 GNN 训练中,数据依赖为批量生成过程带来大量通信。为了提高分布式设置中的训练效率,提出了几种特定于分布式训练的新 GNN 批量生成技术,并解决了挑战 #1挑战 #2。如图 4 所示,一种解决方案是通过分布式采样生成 mini-batch,另一种是直接使用局部分区(或子图)作为 mini-batch。下面,我们将描述这些技术。

5.1 分布式采样的小批量生成

        基于现有的基于采样的 GNN,通过实现分布式采样可以直接获得分布式版本。换句话说,我们使用分布式图采样在大图上创建小批量。大多数现有的分布式 GNN 系统,如 AliGraph [150]、DistDGL [142]、BGL [69],都遵循这一思想。然而,在分布式环境中,worker 上的基本采样器将频繁访问其他worker 的数据,从而导致大量通信。在多 GPU 设置中,虽然图形和特征可能集中存储在 CPU 内存中,但每个 GPU 都需要通过大量 CPU-GPU 数据移动从 CPU 内存访问 mini-batch。

        为了减少分布式计算中的通信,缓存是改善数据局部性的常用优化机制。在系统层面,已经提出了许多面向GNN的缓存策略。缓存的基本思想是在本地存储对远程顶点的频繁访问。Zheng等人[142]建议为DistDGL中的每个分区图复制局部边界顶点的远程邻居,并确保局部的每个顶点都具有完整的邻居,以便小批生成器(例如,采样器)可以在不与其他分区通信的情况下进行局部计算。然而,这种方法仅减少了由直接(即,一跳)邻居接入引起的通信,并且不知道接入频率。Zhu等人[150]引入了一种称为𝑣的第𝑙重要性, 表示为𝐼𝑚𝑝 (𝑙) (𝑣). 度量正式定义为𝐼𝑚𝑝 (𝑙) (𝑣) = 𝐷 (𝑙 )𝑖 (𝑣)𝐷 (𝑙 )𝑜 (𝑣) , 其中,𝐷 (𝑙)𝑖 (𝑣) 和𝐷 (𝑙)𝑜 (𝑣) 是𝑙-跳入和跳出顶点的邻居𝑣。Li等人[67]设计了一个静态GPU缓存,用于存储多GPU训练的高出度顶点。静态缓存可以减少CPU和GPU之间的功能移动。Min等人[75]引入了加权反向pagerank(加权R-pagerank)[6],将顶点的标记状态结合到反向pagerank方法中,以识别频繁访问顶点。得分较高的热顶点特征被缓存在GPU内存中,其余冷顶点特征被放置在CPU内存中。此外,由于NVLink和PCIe之间的带宽不同,他们将热顶点功能分为最热的和次热的。最热门的顶点特征在多个GPU上复制。下一个最热的数据分散在多个GPU上,可以从对等GPU内存访问。

        上述静态缓存策略不能适应各种图形采样工作负载。Liu等人[69]提出了一种动态缓存机制,通过利用顶点特征的分布来应用FIFO策略。为了提高缓存命中率,他们为小批量生成引入了邻近感知排序。该顺序以BFS顺序约束训练顶点序列。为了确保模型收敛,他们通过以循环方式选择BFS序列并随机移动BFS序列,将随机性引入到基于BFS的序列中。Yang等人[122]提出了一种更稳健的缓存方法,称为基于预采样的缓存策略。给定图G、采样算法a和训练集T,它首先执行𝐾 采样阶段收集统计信息,然后使用统计信息识别数据的频率(或热度),最后缓存具有更高热度的数据。基于预采样的缓存策略考虑了影响数据访问频率的所有三个因素,并且对于各种GNN工作负载,它比以前的缓存策略更稳健。

        除了缓存策略,另一种方法是设计新的分布式采样技术,这些技术具有通信效率并保持模型准确性。通信高效采样的一个基本思想是先对局部顶点进行采样,但这会为生成的小批量引入偏差。受线性加权采样方法 [17、151] 的启发,Jiang 等人[60] 提出了一种用于邻居选择的倾斜线性加权采样。具体而言,倾斜采样通过因子s > 1 缩放局部顶点的采样权重,Jiang 等人从理论上讲,训练可以通过正确选择s的值来实现与线性加权采样相同的收敛速率。

5.2基于分区的小批量生成

        根据图 1 中分布式 GNN 训练流水线的抽象,我们知道首先对图进行了分区。如果我们限制每个worker只能使用本地分区训练 GNN 模型,则可以避免大量通信。在这样的训练策略中,一个partition就是一个mini-batch,我们称之为partition-based mini-batch。 PSGD-PA [82] 是上述想法与参数服务器的直接实现。在 GraphTheta [65] 中,分区是通过社区检测算法获得的。

        然而,忽略分区之间的交叉边会导致模型精度的损失。为了提高模型精度,引入了子图(即分区)展开。它通过将远程顶点复制到本地来保留边界顶点的本地结构信息。薛等人[120]使用METIS获得一组未重叠的子图,然后通过添加不属于子图的顶点的一跳邻居来扩展每个子图。类似地,Anged等人[3]使用广度优先方法来扩展𝑙-跳子图。Zhao等人[138]定义了基于蒙特卡洛的顶点重要性测量,并使用深度优先采样来扩展子图。他们进一步引入了基于方差的子图重要性和加权全局一致性,以减少子图方差的影响并提高模型精度。此外,Ramezani等人[82]引入了LCCG,以提高基于分区的小批量训练的模型精度。LCCG遵循参数服务器架构,并定期在参数服务器上执行全局校正操作以更新全局模型。实证结果表明,全局校正操作可以显著提高模型精度

6 GNN 执行模型

        图 1 中的 GNN 模型优化阶段由计算图生成计算图执行两个子阶段组成。执行模型负责调度子阶段的操作,以实现高训练效率。这两个子阶段针对不同的训练范式具有不同的操作符。对于分布式小批量训练,采样和特征提取操作决定了训练效率,并使计算图生成变得昂贵。而对于分布式全图训练,由于worker之间的数据依赖,计算图的执行很复杂。

        下面分别讨论计算图生成和计算图执行的执行模型。

6.1 计算图生成执行模型

        采样特征提取是计算图生成中的两个独特操作。它们是分布式 mini-batch GNN 训练的瓶颈。如[40, 69] 所示,采样和特征提取几乎占据了整个训练时间的 83% - 99%。低效率是由于大量的通信和资源竞争造成的。因此,提出了几种用于计算图生成的执行模型。

        传统的执行模型依次对每个计算图(即batch)进行采样和特征提取。当应用基于CPU的图采样时,采样在CPU上执行以构建图结构,针对图的特征提取在具有缓存支持的GPU上执行,训练也在GPU上执行。当应用基于 GPU 的采样 [57、79]时,管道中的所有操作都在单个设备上执行。这种传统的执行模型在现有的 GNN 训练系统中很流行[67、142、150]。传统执行模型上下文中的优化在于采样操作的优化和特征提取的缓存策略,如第 4节和第 5 节所述。但是,传统执行模型带来了资源竞争。例如,在应用基于CPU的图采样时,处理图采样请求和子图构造会竞争CPU;当使用基于 GPU 的图形采样时,图形采样和特征提取会竞争 GPU 的内存。

        分解执行模型使用专用设备或隔离资源来执行计算图生成中的单个操作。实证研究表明,在mini-batch GNN 训练期间,一个操作在不同时期共享大量数据并保留期间数据局部性。这一观察结果促使分解执行模型避免资源争用并改善数据局部性。杨等[122] 介绍了一种分解执行模型,可以消除 GPU 内存上的资源争用。新模型为各个设备分配采样操作员和训练操作员。更具体地说,它使用一些专用的 GPU 进行图形采样,其余的 GPU 用于特征提取和模型训练。在分解设计的帮助下,新的执行模型能够对更大的图进行采样,而用于特征提取的 GPU 可以缓存更多特征。在使用基于 CPU 的图形采样时提高 CPU 利用率。刘等人 [69] 将隔离的资源(即 CPU)分配给不同的操作,并通过调整资源分配来平衡每个操作的执行时间。他们引入了一种基于分析的资源分配方法,以提高 CPU 利用率和处理效率。新的资源分配方法首先描述了每个操作员的成本,并解决了一个优化问题,在资源约束下最小化所有操作的最大完成时间。

        算子并行执行模型通过混合管道中所有算子的执行来实现批间并行并并行生成多计算图。郑等[143] 将计算图生成分解为多个阶段(例如,图采样、邻域子图构造、特征提取),每个阶段都可以视为一个运算符。不同算子之间存在依赖关系,而 mini-batch 之间不存在依赖关系。因此,可以将不同mini-batch中的算子调度到一个pipeline中,不依赖的算子可以并行执行。这样,后一批的计算图生成可以在前一批计算图生成之后立即或同时进行,而不是等待前一批完成计算图执行阶段。张等[140] 采用类似的思想来解耦计算图的生成,同时将不同算子之间的依赖关系进一步建模到 DAG 中将每个算子视为 DAG 中的一个节点,通过考虑 DAG 之间(粗粒度)和算子之间(细粒度)的调度,提出了一种两级调度策略。通过这种两级调度,可以平衡基于 CPU 的采样和基于 GPU 的特征提取的成本,以提高 CPU 利用率并减少端到端的 GNN 训练时间

        具有拉-推并行性的执行模型以上所有执行模型都是先采样构造子图,然后根据子图提取特征。当输入特征是高维时,特征提取引起的通信成为端到端 GNN 训练管道中的瓶颈。 4.2 节中介绍的昂贵的高质量图分区是减少 Gandhi 等人通信的一种选择。 [40] 引入了一种新的拉推并行执行模型。新模型使用快速哈希分区对图进行分区使用列式哈希分区对特征矩阵进行分区。它通过在本地拉远程顶点和边来构造子图,然后将构造的子图推送给所有的worker。然后每个worker并行地为所有接收到的子图提取部分特征。借助pull-push并行性,执行模型将昂贵的输入特征移动替换为光图结构移动,从而提高了计算图生成的效率。

6.2 计算图执行模型

        生成计算图后,它们由分布式设置中的一组worker执行。对于分布式小批量 GNN 训练并行化小批量计算图的执行是微不足道的,因为每个计算图都完全存储在单个 worker 中。对于分布式全图或大批量 GNN 训练,计算图的执行在一组worker之间进行分区。由于计算图中的数据依赖性,实现 GNN 训练的高效性并非易事。到目前为止,已经提出了许多针对GNN训练的计算图执行模型。

        一般来说,我们使用最著名的编程模型 SAGA-NN [72] 进行以下讨论。SAGA-NN 将单个 GNN 层的前向计算分为四个算子 Scatter (SC)、ApplyEdge(AE)、Gather (GA) AppleVertex (AV)。SC 和 GA 是两个图操作,其中顶点特征分别沿边分散并收集到目标顶点。AE 和 AV 可能包含神经网络 (NN) 操作,它们分别直接处理目标顶点的边缘特征或聚合特征。

        根据图算子的不同计算范式(即SC和GA),我们将计算图执行模型分为一次性执行(第6.2.1节)和基于块的执行(第6.2.2节)。根据GA和AV之间存在同步,执行模型可分为第6.3节和第6.2.4节介绍的同步模型和异步模型。

         6.2.1 一次性执行。 One-shot execution 是 GNN 训练采用的最常见的模型。在每个 worker 上,本地顶点的一次图聚合所需的所有邻居特征(或嵌入)都预先收集到本地存储中一次性处理图聚合,如图 5 的上半部分所示。远程信息可能需要与远程worker进行通信,通信协议将在第 7 节中讨论。从图聚合的本地视图来看,每个目标顶点都分配给特定的worker。 worker 收集目标顶点的邻居特征,并一次聚合这些特征。例如,DistDGL [142] 直接采用了这个模型。 BNS-GCN [98] 利用基于采样的方法随机聚合相邻顶点的特征。一次性执行也可以很容易地与异步执行模型 [99](参见第 6.2.4 节)结合,其中收集陈旧的嵌入用于图聚合。

        6.2.2 基于Chunk的执行。一次性执行很简单,但会导致昂贵的内存消耗和繁重的网络通信。例如,将所有需要的数据存储在 worker 的本地存储中可能会导致内存不足 (OOM) 问题。另一方面,传输所有顶点特征可能会导致沉重的网络开销。为了解决这些问题,另一种方法是将完整的聚合拆分为多个部分聚合,并将部分聚合累加以获得最终的图聚合。为了实现这一点,一个顶点的邻域被分组为几个子邻域,我们将每个子邻域连同顶点特征或嵌入称为一个块。块可以顺序处理(基于块的顺序执行)或并行处理(基于块的并行执行),如图 5 的下半部分所示。

        在顺序分块执行下,部分聚合是顺序进行的,一个接一个累加到最终的聚合结果。 NeuGraph [72]使用二维划分方法生成多个边块,从而将顶点的邻域相应地划分为多个子邻域。它为每个 worker 分配某些顶点的聚合作业,并按顺序提供它们的边块以计算最终结果。 SAR [77] 使用边切分区方法创建块,从远程worker顺序检索顶点块,并在本地计算部分聚合。基于块的顺序执行有效地解决了 OOM 问题,因为每个worker一次只需要处理一个块的存储和计算。

        在基于块的并行执行下,并行计算不同块的部分聚合。所有chunk完成部分聚合后,调用通信传递结果,一次计算最终的聚合结果。由于传输部分聚合结果所产生的通信量远小于传输完整的块,因此可以减少网络通信开销。 DeepGalois [48] 直接采用了这种执行模型。 DistGNN [74] 使用异步执行模型编排基于块的并行执行模型,以转移具有陈旧性的部分聚合。 FlexGraph [102] 进一步将远程部分聚合的通信与本地部分聚合的计算重叠,以提高效率。

         6.2.3 同步执行模型。在同步执行模型(图 6)中,每个算子的计算在通信同步后开始。以SAGA-NN模型为例,四个算子连同它们的后向对应物形成图数据的执行管道,遵循SC-AE-GA-AV-▽AV-▽GA-▽AE-▽SC的顺序.在这八个阶段中,有两个阶段涉及到边界顶点状态的传递,即GA和▽GA。在遗传算法中,相邻顶点的特征应该聚合到目标顶点,因此边界顶点的特征应该被转移。在▽GA中,边界顶点的梯度应该被发送回它们所属的worker。因此,GA和▽GA是同步执行模型中的两个同步点。在这些点上,必须阻塞执行流程,直到所有通信完成。 NeuGraph [72]、CAGNET [94]、FlexGraph [102]、DistGNN [74] 等系统应用此执行模型。为了降低通信成本并提高训练效率,提出了几种通信协议,我们在第 7.1 节中对其进行了回顾。

         I 类异步。如上所述,SAGA-NN模型的执行流水线中存在两个同步点,其他编程模型中也存在类似的同步点。在执行流水线中移除计算图计算的同步点会引入 I 型异步 [74, 80, 99]。在 I 型异步中(图 7(a)),worker不等待边界顶点的隐藏嵌入(第一个 GNN 层之后的隐藏特征)到达。相反,它使用缓存或较早接收的先前epoch的边界顶点的历史隐藏嵌入来执行目标顶点的聚合。 ▽GA阶段使用了类似的历史梯度。

        II 型异步。在 GNN 训练期间,当需要更新权重参数时,会出现另一个同步点。这类似于传统的深度学习模型。许多作品考虑在传统的深度学习模型中移除此类同步点 [78, 84]。索普等人。 [92] 进一步将这一思想应用到 GNN 模型中,形成了 II 型异步。在 II 型异步中(图 7(b)),如果一个worker 完成了当前 epoch 的计算,则它不必等待其他 worker 完成并且全局更新权重以开始下一个epoch。相反,它可能会使用由先前epoch更新的历史权重并立即开始计算下一个epoch。

        注意,I型和II型异步可以单独采用,也可以联合采用。异步执行模型的详细通信协议在第 7.2 节中描述。

7 GNN 通信协议

        在本节中,我们回顾了支持不同计算图执行模型的 GNN 通信协议,它们负责传输隐藏的嵌入和梯度。根据计算图执行模型的类型,我们将 GNN 通信协议分为同步 GNN 通信协议异步 GNN 通信协议

7.1 同步 GNN 通信协议同步

        GNN 通信协议在同步执行模型中处理通信,其中在两次迭代之间设置同步屏障,并且在下一次迭代中使用的隐藏嵌入是从其上一次迭代计算得出的。有几种方法可以在迭代之间传递隐藏嵌入,我们将在下面一一介绍。

7.1.1 基于广播的协议。广播是在一组worker之间共享信息的通用技术。在 GNN 上下文中,每个worker根据底层数据划分方法广播其持有的最新隐藏嵌入或图结构,其他worker一旦从该worker收到所需数据,便开始相应的图卷积计算。当所有worker完成广播后,全图的hidden embeddings在所有worker之间共享,所有worker都收到他们在当前迭代中需要的最新hidden embeddings。 CAGNET[94] 的作者将 GNN 计算建模为矩阵计算。他们使用 1-D、1.5-D、2-D 和 3-D 图划分策略将矩阵(即图邻接矩阵和特征矩阵)划分为子矩阵。在 GNN 训练过程中,每个 worker 直接将图或顶点特征的部分矩阵广播给其他 worker 进行同步,保证一个 worker 上的顶点具有完整的邻域。工作负载不平衡问题会破坏广播的效率,这会导致计算停滞。

7.1.2 基于点对点的协议。点对点(P2P)传输是一种在worker之间共享信息的细粒度通信方法,它仅在边切割图分区中沿着交叉边或在顶点切割图分区中复制顶点传输数据。上述广播将数据发送给分布式环境中的所有worker,可能会导致冗余通信。在 DistGNN [74] 中,使用了顶点切割分区策略。每条边都分配给一个特定的worker,而每个顶点及其特征可以重复存储。在这些复制中,一个顶点称为主顶点。在聚合顶点的邻居时,DistGNN 中应用 P2P 传输。具体来说,将主顶点的复制的部分聚合发送给主顶点所在的worker,而不是广播给所有worker。这样,主顶点可以聚合来自其所有邻居的嵌入。许多其他应用基于块的执行模型的系统使用 P2P 协议,其中每个worker获取或发送隐藏的嵌入或部分聚合到特定的远程worker,例如 SAR [77]、DeepGalois [48]、FlexGraph [102] ].根据 CAGNET[94] 的研究,在没有部分聚合的情况下,P2P 传输带来了"请求和发送"操作的开销并增加了延迟。相比于标准的广播策略,即使使用像METIS这样的高质量图分区策略,P2P传输的效率提升也不明显

7.1.3 基于管道的协议。在分布式 GNN 训练中,顶点的邻域分散在一组 worker 中,可以采用 6.2.2节中介绍的基于块的执行模型来聚合顶点的邻域。对于交换聚合和关联聚合,分散的邻域可以按不同的顺序聚合,形成一个管道,其中每个阶段负责部分聚合顶点的一个邻域块。我们将顶点部分邻域的这种聚合称为部分聚合,将基于块的执行模型中的相应通信协议称为基于管道的通信协议

        SAR [77] 以预定义的顺序聚合块。 SAR中的每个worker首先计算目标顶点的局部邻域的部分聚合,然后按预定顺序获取远程邻域,并计算远程邻域的部分聚合,并将结果逐一累加到本地。因此,将SAR中完整邻域的聚合分为不同的阶段,在每个阶段进行局部聚合。最终聚合是在所有部分聚合完成时。SAR应用基于管道的通信协议来减少内存消耗,因为它不需要存储邻域的所有特征并一次计算聚合。此外,为了减少由部分邻域的转移引起的网络通信开销,DeepGalois [48] 在通信之前执行远程部分聚合。因此,只需要传输部分聚合结果。为了进一步提高训练效率,FlexGraph [102] 将计算和通信重叠。每个worker首先发出请求以在远程worker处部分聚合邻域,然后在等待远程部分聚合完成传输的同时计算本地部分聚合。 worker 收到远程部分聚合后,直接将它们与本地部分聚合进行聚合。因此,本地部分聚合与通信重叠以获得远程部分聚合。请注意,上述基于 P2P 的协议与基于管道的通信是正交的,它们可以在一个系统中应用。例如,前面提到的 DistGNN [74] 也结合了基于管道的通信。DistGNN 中的 cd-0 通信策略类似于 DeepGalois [48] 中的通信策略,它只是执行远程部分聚合,将其提取到本地 worker,并计算最终的聚合结果。

7.1.4通过共享内存通信。为了大规模训练大型GNN,利用CPU内存来检索所需的信息也是可行的,而不是GPU-GPU通信。完整的图形和特征嵌入存储在共享内存(即CPU内存)中,每个GPU的设备内存被视为缓存。在ROC[58]中,作者假设所有的GNN数据都适合在CPU内存中,他们重复地将整个图结构和特征存储在每个worker的CPU DRAM中。基于gpu的worker从本地cpu共享内存中检索顶点特征和隐藏嵌入。对于较大的图形或场景,所有GNN数据都无法装入单个worker的CPU DRAM中,分布式共享内存是首选。DistDGL[142]对图进行分区,并使用专门设计的KVStore存储分区。在训练过程中,如果数据与worker位于同一位置,DistDGL将通过本地CPU内存访问它们,否则,它将引发RPC请求以从其他远程CPU内存检索信息。在NeuGraph[72]中,图结构数据和隐藏嵌入也存储在共享内存中。为了支持大规模图,采用二维划分方法将输入图被划分成P×P,将特征矩阵(以及隐藏嵌入矩阵)划分为P个顶点块按行划分方法。如第6.2.2节所述,它遵循基于块的执行模型。为了计算一个块的部分聚合,每个GPU从CPU内存中获取相应的边缘块和顶点块。为了加快图形处理器之间的顶点数据块传输速度,考虑通信拓扑结构,采用基于链的流调度方法来避免带宽争用

7.2 异步GNN通信协议

        异步 GNN 通信协议用于支持异步执行模型。如第 6.2.4 节所述,GNN 训练中有两种异步,I 型异步消除了聚合阶段的同步,II 型异步消除了模型权重更新阶段的同步。 I 型异步专用于GNN 模型计算,而 II 型异步已广泛应用于传统深度学习,相应的技术可以直接引入 GNN 训练中。在下文中,我们将重点回顾特定于分布式 GNN 训练的异步 GNN 通信协议。表 2 总结了流行的异步 GNN 通信协议。

7.2.1 异步 GNN 通信协议的陈旧模型。通常,引入异步意味着在训练中应该使用陈旧的信息。具体而言,在 I 类异步中,GA 或▽GA 阶段是在不完全收集邻域最新状态的情况下执行的,历史顶点嵌入或梯度用于聚合。引入了不同的陈旧模型来维护历史信息的陈旧性,并且每个模型都应确保聚合信息的陈旧性是有界的,以便 GNN 训练收敛。在下文中,我们回顾了三种流行的陈旧模型。

        固定Epoch的陈旧性。一种简单的方法是以固定的陈旧性聚合历史信息[40,74,99]。允许𝑒 成为当前训练的epoch,𝑒~ 是聚合中使用的历史信息的epoch。在该模型中𝑒 − 𝑒 | = 𝜖𝐸 , 其中𝜖𝐸 是用户设置的超参数。通过这种方式,过时性被明确地限定为𝜖𝐸 .

        自适应Epoch的陈旧性。上述基本模型的另一个变体是使用 epoch-adaptive staleness [15, 92]。在顶点聚合期间𝑖, 让𝑒𝑁𝑗 是任何顶点的历史信息的时代𝑗 ∈ 𝑁 (𝑖) (即𝑖) 用于聚合。面向所有人的epoch自适应过时模型𝑗 ∈ 𝑁 (𝑖),| ̃𝑒𝑁𝑗 − 𝑒 | ⩽ 𝜖𝐴 持有。这意味着在不同的epoch,用于聚合的历史信息的陈旧性可能不同,而在一个epoch,顶点的聚合邻居的陈旧性也可能不同。通常,一次𝑒 − 𝑒 到达𝜖𝐴, 那么最新的嵌入或梯度应该在分散训练下被广播,或者在集中训练下被推送到历史嵌入服务器。如果在执行聚合时上述条件不成立。,𝜖𝐴) 可以检索。

        基于变化的陈旧性。第三,陈旧也可以通过嵌入或梯度的变化来测量。换句话说,我们只在嵌入或渐变显著改变时聚合它们。具体来说,让𝐻 (𝑙)𝑤 是层的嵌入𝑙 由工人持有𝑤, 和𝐻 (𝑙)𝑤 是其他工人最后分享的历史嵌入。在基于变化的老化模型中,𝐻 (𝑙)𝑤 − ̃𝐻 (𝑙)𝑤 ⩽ 𝜖𝑉 , 哪里𝜖𝑉 是用户设置的最大差异界限,以便在其他工作人员可用的历史版本太过时时广播最新的嵌入或渐变。这样,陈旧性在𝜖𝑉 .的帮助下是有界的。

7.2.2 异步GNN通信协议的实现。如上所述,历史信息可用于 GA 或 ▽GA 阶段的聚合有些协议只考虑GA阶段,支持异步嵌入聚合。一些协议被设计为在 GA 和▽GA 阶段都使用历史信息,同时支持异步嵌入和梯度聚合。

        异步嵌入聚合。彭等[80] 考虑到 CAGNET 中广播的基本训练范式,并设计了一种一维分区下的跳过广播机制。该机制自动检查每个计算顶点上分区顶点特征的陈旧性,如果不是太陈旧则跳过广播。如果跳过分区的广播,则其他worker应使用先前缓存的历史顶点嵌入来处理前向计算。进一步提出了三种陈旧性检查算法,其中每一种都确保缓存顶点嵌入的陈旧性是有界的

        柴等[15] 在使用参数服务器维护所有worker的历史嵌入时采用了类似的想法。顶点隐藏嵌入每隔几个epoch被推送到这些服务器,worker在推送后的下一个epoch将历史嵌入拉到他们的本地缓存。因此,历史顶点嵌入的陈旧性受推拉周期的限制

        Md等人[74]引入的cd-r算法将来自每个worker的部分聚合结果的通信与GNN中的前向计算重叠。具体来说,迭代中的部分聚合𝑖 异步传输到目标顶点,并在迭代中执行最终聚合𝑖 + 𝑟 . 在该算法下,过时性被限制为𝑟 .

        异步嵌入和梯度聚合。正如我们在 6.2.3 节中介绍的,GA 和▽GA是 GNN 执行模型中的两个同步点。虽然上述协议仅在 GA 阶段使用历史顶点嵌入,但 Wan 等人[99] 也考虑了同步点▽GA,并在反向传播中使用陈旧的顶点梯度。在训练期间,来自邻域的嵌入和梯度在最后一个epoch以点对点的方式异步发送,并在当前epoch由目标顶点接收。因此,通信在前向和反向计算中重叠,从而构建了具有固定epoch间隙的训练管道,其中worker只允许使用恰好一个epoch之前的特征或梯度,并且陈旧性是有界的。索普等人[92] 设计更精细、更灵活的管道。类似于 Wan 等人提出的方法[99],管道中使用了陈旧的顶点嵌入和顶点梯度。此外,它还删除了 II 型同步,因此训练器可以使用陈旧的权重参数并立即开始下一个 epoch管道中的陈旧性明确受用户设置的限制。有界陈旧性确保允许在管道中移动最快的训练器最多使用历史嵌入或梯度更早。有了这个陈旧性界限,权重参数的陈旧性也相应地受到限制。

        其他异步 GNN 通信协议。上述异步通信协议遵循通用数据并行模型。对于6.1节描述的pull-push并行,也可以设计异步通信。在这种并行性下,整个计算流水线可以分为正向计算中的模型并行阶段和数据并行阶段,以及反向计算中相应的数据并行阶段和模型并行阶段。通过去除管道中上述四个阶段之间的同步点,worker可以异步进行通信。甘地等[40] 在管道中设置三个 mini-batches 同时计算,以覆盖每个模型并行阶段和数据并行阶段之间的通信成本。因此,陈旧度限制为三个。

        顶点级异步。不使用陈旧的嵌入或梯度的情况下,还可以在顶点级别设计异步化[136],其中每个顶点在收到所有邻居的嵌入后立即开始计算下一层。不同于传统的同步方法,一个worker上的所有顶点一起开始一层的计算,在顶点级异步处理过程中,一个worker上的不同顶点可能同时计算不同的层。请注意,这种异步化不会对聚合结果产生任何影响,因为所需的所有信息都应该是最新的,并且没有使用以前时期的嵌入或梯度。

8 分布式 GNN 训练系统

        在本节中,我们回顾了 23 个分布式 GNN 训练系统和框架,作为表 3 中总结的代表。我们主要根据计算资源将它们分为三类:a)具有多 GPU 的单机系统,b)在GPU 集群和 c) CPU 集群上的系统。此外,还有一些分布式 GNN 训练系统使用更多样化的计算资源,例如无服务器线程、移动设备和边缘设备。我们将它们归类为杂项系统。在表中,我们制作一个根据我们的新分类法总结系统所包含的技术。在下文中,我们重点介绍了每个系统用来优化训练效率的主要技术,并进一步介绍了一些未在表中列出的其他系统设置和优化。

 8.1 单机多 GPU 系统

        GPU 是训练神经网络模型最强大的计算资源。分布式 GNN 训练的一个常见解决方案是在一台机器上使用多 GPU。在这里,我们介绍一些支持高效多 GPU 训练的流行系统。

        NeuGraph [72] 是一项开创性的工作,旨在通过将深度学习系统和图形处理系统与一种称为SAGA-NN 的新颖编程抽象联系起来,实现可扩展的全图 GNN 训练。为了支持 SAGA-NN 模型在大图上的执行,它采用基于局部感知算法的二维图划分,将大图划分为不相交的边块。这些边缘块被顺序调度到每个 GPU 以执行基于块的计算图执行。为了更好地提高CPU-GPU数据传输的性能,提出了一种选择性调度策略,该策略仅从大块中过滤出有用的顶点并将它们发送给GPU基于链的块调度方案旨在充分利用PCIe 带宽,并在多 GPU GNN 训练中最大化性能。其他优化旨在通过考虑图形结构的特性特定的 GNN模型来优化 GPU 内核中的计算,例如冗余计算消除和阶段融合。总的来说,NeuGraph 在 TensorFlow之上用 C++ 和 Python 实现,自然地将深度学习系统与图计算结合起来,充分利用了 CPU 的大内存、PCIe 的层次结构和 GPU 的计算能力的效率

        PaGraph [67] 是一种在 DGL 和 PyTorch 下实现的新型 GNN 框架,支持在多 GPU 上进行基于采样的 GNN 训练。 PaGraph 的基本思想是利用空闲的 GPU内存,并在基于采样的 GNN 训练期间将其用作缓存。它主要关注工作负载不平衡和冗余顶点访问问题,并通过考虑每个顶点与分区的亲和力设计启发式分区策略。为了支持多 GPU 并减少分区的存储开销,PaGraph 删除了冗余的分割后对 GNN 训练没有贡献的顶点和边。为了进一步提高计算效率进行资源隔离以避免不同操作之间的干扰,并添加本地混洗以提高数据并行训练。综上所述,PaGraph 通过缓存和图形分区策略加速GNN 训练速度,最终实现了与 DGL 相比高达 96.8% 的数据传输减少和高达 16 倍的性能提升。

        BGL [69] 是一种用于大型图学习的 GPU 高效 GNN 训练系统,它侧重于基于采样的 GNN。为了消除特征检索的严重网络竞争,BGL 采用了由多 GPU 和 CPU 内存组成的二级缓存来最大化缓存大小。在通过 BFS 和分配启发式对图进行分区后,为了提高训练速度,BGL 通过基于分析的资源分配进一步优化资源分配。 BGL中的计算分为八个阶段,基于分析的资源分配方法将孤立的资源分配到不同的阶段,目标是最小化所有阶段的最大完成时间。总之,BGL 是一个通用系统,可以应用于各种计算后端(DGL、Euler 1、PyG),并将 GPU 利用率推向比现有框架更高的水平。

        GNNLab [122] 是一个新的 GNN 系统,针对基于采样的 GNN 模型进行了优化,并对传统设计的基于采样的系统进行了全面调查。它最初引入了基于预采样的缓存策略,在各种采样算法和数据集上取得了高效和稳健的结果。基于基于采样的训练的分解设计,GNNLab 通过根据工作负载的需要将 GPU 分配给不同的执行器,进一步解决了 GPU之间工作负载不平衡的挑战。 GNNLab 首先分配一定数量的由启发式方程计算出的 GPU。然后,为了不断选择最优的 GPU 分配,GNNLab 根据待机和现有 Trainer 工作效率动态切换执行器。总之,该系统消除了传统 GNN 执行模型在特征检索和 GPU 内存争用方面的繁重数据 I/O,性能优于 DGL 和 PyG 高达 9.1× 和 74.3×。

         Rethinking [86] 开发了一个数据并行 GNN 训练系统,重点关于 CPU 和 GPU 之间的数据移动优化。与其他系统不同,它允许 GPU 通过利用它们之间的高带宽来相互获取数据。它建立了一个成本模型来估计 CPU 和 GPU 之间数据移动的成本,可以通过最佳数据放置策略将其最小化。基于成本模型,它将数据放置问题表述为约束优化问题,并开发了一种有效的解决方案以找到出色的数据分区。此外,为了进一步减少数据移动,它引入了一个局部感知的邻居采样来增加GPU上加载时间很少的节点的采样概率。结果,实证研究表明,它通过智能数据放置策略实现了比 DGL [104] 和PaGraph [67] 更好的数据加载效率

8.2 GPU 集群上的系统

        GPU集群是单机多GPU的扩展,针对图和输入特征太大导致单机装不下的情况,提供多机多GPU。有了GPU集群,既要考虑CPU和GPU之间的通信,又要考虑机器之间的通信。以下系统已根据其原始实验在 GPU 集群上进行了测试。

        ROC [58] 是一个分布式全图 GNN 训练和推理系统,它是在 GPU 优化的图形处理系统 FlexFlow[59] 之上实现的。 ROC 支持多 GPU 和 GPU 集群。在 ROC 中,GPU 内存用作缓存CPU 内存用于存储支持更大 GNN 的所有 GNN 张量和中间结果。因此,ROC 只需要所有 GNN 张量都适合 CPU DRAM,并且每个 GPU 通过 CPU 和 GPU 之间的数据传输访问不在本地的图形和特征。 ROC 应用基于学习的图形分区器平衡工作负载,并应用基于动态编程的内存管理器最小化CPU 和 CPU 内存之间的数据传输。内存管理器以 GNN 架构的拓扑结构为指导,通过分析 GNN 的未来操作来确定要缓存在 GPU 中的张量

        𝑷3 [40]是一个分布式系统,它将模型并行引入GNN训练,并将其与数据并行进行协调,以降低总通信成本。𝑃3观察到在第一层中传输顶点特征时引入了较大的通信开销,并设计了按列划分策略以将特征分配给不同的worker。与传统的数据并行GNN训练不同,𝑃3独立地划分图结构和顶点特征。在训练过程中,在第一层中,每个worker处理所有顶点的给定特征列,并从其他worker获取图形结构。以这种方式,只有图形结构在worker之间传递,这比传递顶点特征产生更少的网络开销。对于其余的层,采用传统的数据并行。这种混合模型数据并行性在𝑃3.在推拉并行下,对图结构进行简单的哈希划分就足够了。此外,为了充分利用计算资源,设计了一个小批量流水线,并使用了一个有界过时的异步通信协议。𝑃3首先将模型并行性引入分布式GNN训练,并设计了一种新的训练方法,以提高整体性能,特别是当特征尺寸较大时。

        SANCUS [80] 是一个分散的 GNN 训练框架,它在全图训练中引入了历史嵌入,以通过广播最新的嵌入来减少大量的通信开销。与传统的基于参数服务器的架构不同,它采用分散式训练架构来消除集中式带宽瓶颈。图和特征在一组worker(例如 GPU)之间共同分配。为了避免worker之间的大量通信,提出了一种称为跳过广播的新通信原语来支持过时感知训练。 Skip-broadcast 与基于环的管道广播和 all-reduce 等集体操作兼容,并且它通过在缓存嵌入不太陈旧时自动删除通信来重塑底层通信拓扑。 SANCUS 支持三种不同的陈旧性指标,其中 epoch-adaptive variation-gap embedding 陈旧性通常效果最好。实证结果表明,SANCUS 在不损失准确性的情况下减少了高达 74% 的通信

        NeutronStar [105] 是一种具有混合依赖管理方法的分布式 GNN 训练系统。它首先引入了一个成本模型来估计在不同 GPU 中存储重复节点所导致的冗余计算以及转移边界节点所导致的通信开销。此外,它提出了一种基于贪婪的启发式算法,将依赖项拆分为缓存组和通信组,从而最大限度地降低访问依赖项的成本。此外,NeutronStar 将依赖管理与图形操作和 NN 函数解耦,以实现灵活的自动微分,并为前向和后向提供高级 python API。综上所述,NeutronStar 结合了 GPU 集群 GNN 快速训练的两种依赖访问机制,并集成了一些针对CPU-GPU 异构计算和通信的优化,比 DistDGL 和 ROC 分别高出 1.8 倍和 14.3 倍。

        DGCL [13] 是面向 GNN 的 GPU 集群通信库。它在规划通信时考虑了 GNN 模型确定的物理通信拓扑和通信关系。基于在通信拓扑中始终存在层次结构的观察,DGCL 将数据传输分为多个阶段,这些阶段与源 GPU 和目标GPU 之间的链接数相对应。此后,DGCL 为每个通信计划引入启发式成本模型。通过高效的树生成算法获得最优的通信计划。在实现上,DGCL利用MPI和PyTorch支持分布式环境应用Horovod和PyTorch支持分布式模型同步。根据作者的实证研究,该库将点对点通信的通信时间平均减少了 77.5%,一个epoch 的训练时间最多减少了 47%。

        PipeGCN [99] 是在 DistDGL 之上开发的全图分布式训练系统,它引入了陈旧的嵌入以形成管道。对于远程worker的邻居,PipeGCN 利用延迟通信使用前一个epoch的历史嵌入和梯度的策略。最新的嵌入仍然是为本地邻居计算的。通过混合新鲜和陈旧的特征(梯度),PipeGCN 可以更好地将通信开销与计算成本重叠。此外,PipeGCN 给出了详细的证明,保证了其有界误差和收敛性。此外,为了减少陈旧信息的影响,PipeGCN 提出了一种轻量级移动平均来平滑边界节点特征(梯度)的波动。 PipeGCN 是具有异步计算图执行模型和异步通信协议的代表性系统通过一个简单的策略来修复绑定到 1 个 epoch 的陈旧性,PipeGCN 能够在不影响准确性的情况下将端到端的训练时间减少大约 50%

        BNS-GCN [98] 旨在在全图训练方法的大量通信开销与基于采样的训练方法的精度损失之间找到平衡。这个想法是只与每个远程worker中的一部分边界节点进行通信。它将转移的边界节点的数量随机减少 1 个因子。每个分区从边界集中随机选择节点,并仅使用它们的特征进行 GNN 训练。由于其简单的策略,BNS-GCN 可以合并到任何基于边切割分区的分布式 GNN 训练系统中,而不会引入过多的计算。在 DGL 之上实施,该策略实现了全图精度,同时采样方法加快了训练时间。两种基本 GNN 加速技术(即分布式 GNN 和基于采样的 GNN)的这种简单组合产生了一种有趣的训练范式,需要进一步研究。

        DistDGLv2 [143] 是来自亚马逊的 DGL 团队对 DistDGL 的持续工作。平衡图划分考虑了异构图的特点。具体来说,它扩展了 METIS 以拆分异构图,而不管它们的顶点类型如何,并采用分层分区来首先减少跨网络的通信,然后减少对 GPU 的小批量数据复制。此外,它还设计了一个 mini-batch 生成流水线,以实现 CPU 中多个 mini-batch 的并行计算分布式混合 CPU/GPU 采样技术旨在充分利用 GPU计算,在 CPU 中对邻域的每一跳的顶点和边进行采样,并在 GPU 中执行图压缩以去除不必要的顶点和边以进行小批量计算。与 DistDGL 相比,提出的这个 mini-batch 流水线实现了 2-3 倍的总训练速度,并将很快在 DGL 源代码中合并和发布。

        PaSca [132] 是一种新颖的范例和系统,它提供贝叶斯优化来系统地构建和探索可扩展 GNN 的设计空间,而不是单独的设计。 PaSca 提出了一种称为 SGAP 的新颖抽象来解决数据和模型可扩展性问题。它将 GNN 解耦为三个阶段——预处理、模型训练和后处理。在预处理过程中,将未应用神经网络的节点的邻域信息聚合起来,并存储每一跳的嵌入信息以备重复使用。在模型训练过程中,每个节点的多跳消息被聚合成单个组合消息,该组合消息在k-Step变换中更新。后处理过程与前处理过程相同,但将soft预测视为新的输入特征。相邻节点预测被再次聚集以做出最终预测。因此,PASCA避免了消息传递过程中的可学习模型参数,并且可以很容易地预先计算以减少训练时间。此外,该模型利用自适应邻域扩展对不同顶点进行最优聚合,并实现预测重用,达到较高的准确率,在大型行业数据集上的性能比JK-Net高0.4%。总之,通过取代消息传递步骤,PASCA能够很好地扩展GNN,并由自动架构搜索引擎组成,以优化在不同阶段使用的运营商。

8.3 CPU 集群上的系统

        与 GPU 集群相比,CPU 集群易于扩展且经济。现有的大数据处理基础设施通常是用CPU集群构建的。有很多工业级的分布式GNN训练系统运行在CPU集群上。

        AliGraph [150] 是阿里巴巴集团开发的第一个工业级分布式 GNN 平台。该平台由应用层、算法层、存储层、采样层算子层组成,后三层构成了GNN系统。存储器存储和组织原始数据以支持快速数据访问。它采用多种图划分算法以适应不同的场景,将属性分开存储以节省空间,并使用缓存来存储重要的顶点以减少通信。采样层抽象出三种采样方法,算子层抽象出两种算子的GNN计算。用户可以通过选择采样方法和实施自己的运算符来定义自己的模型。因此,AliGraph 不仅支持自研 GNN 和经典图嵌入模型的运行,还支持最新 SOTA GNN 模型的快速实现。

        AGL [127] 是一个分布式 GNN 系统,具有专为工业目的图机器学习而设计的全功能训练和推理。AGL遵循消息传递方案,主要支持基于采样的GNN训练。该系统由三个主要模块组成——GraphFlatGraphTrainer GraphInferGraphFlat 是一个使用 MapReduce 实现的分布式 k-hop 邻域批处理生成器。它合并入度邻居并通过消息传递将合并的信息传播给出度邻居。此外,它遵循采样和索引的工作流程,以消除图形偏度带来的不利影响。GraphTrainer是参数服务器之后的分布式训练框架。它利用管道、修剪和边缘分区来消除数据 I/O 的开销并优化浮点计算GraphInfer 是一个分布式推理模块,它将 层 GNN 模型拆分为 片,并基于 MapReduce 应用消息传递 k 次。该模式可以消除冗余计算并显着降低推理时间成本。总之,AGL 在 100 个 worker 的训练中实现了近乎线性的加速,能够在可接受的时间内完成具有数十亿个节点的 2 层 GAT 训练。

         DistDGL [142] 是由 Amazon 设计的分布式 DGL 版本,它在 CPU 集群上执行高效且可扩展的 mini-batch GNN 训练。 DistDGL 中的主要组件是分布式采样器、分布式键值 (KV) 存储、训练器和密集模型更新组件。采样器负责小批量生成并公开一组灵活的 API 以帮助用户定义各种采样算法。 KVStore分布式存储图和特征,支持顶点数据和边数据的分离分区方式。训练器计算小批量参数的梯度。密集模型参数使用同步 SGD 更新,而稀疏顶点嵌入使用异步 SGD 更新。作为最早的分布式 GNN 训练开源系统和框架之一,DistDGL 对新训练算法或分布式系统的思想快速实现产生了巨大影响。

        CM-GCN [136] 基于分布式图划分和小批量选择的特点提出了一种新的训练模型。它的基本思想是形成有凝聚力的小批量,其中训练节点紧密连接并共享共同的邻居,以减少从远程worker检索邻居节点的通信成本。提出了一个设计良好的成本模型来划分工作负载,我们将其归类为基于操作员的模型。此外,CM-GCN 通过分解节点的计算并根据其数据可用性对其进行处理,从而实现顶点级异步计算。与 BNS-GCN 类似,CM-GCN 引入了一种新的 GCN 训练范式,它试图通过减少对远程数据的关注来减少通信。尽管与原始 GCN 相比,这种想法可能会引入训练偏差,但实验结果表明,与 GCN 相比,BNS-GCN 和 CM-GCN 都保持了相似的精度。

        DistGNN [74] 也专注于全图 GNN 训练,并在 DGL 之上添加优化以支持分布式 GNN 训练。对于分布式内存 GNN 训练,DistGNN 采用 Libra [115] 具有平衡工作负载的快速分区。通过以顶点切割的方式对图进行分区,DistGNN 设计了三种不同的聚合策略,包括偏置聚合(通过忽略远程邻域)、同步聚合和具有有界陈旧性的异步聚合。异步聚合采用Type I 异步执行模型,有效降低通信成本。 DistGNN 是在 DGL 之上实现的,具有带有 C 和 LIBXSMM 库的优化后端。使用被合并到 DGL 源代码中的单插槽 SPMM 和分布式 Libra分区,DistGNN 为开源 GNN 训练做出了巨大贡献。

        FlexGraph [102] 是一个分布式全图 GNN 训练框架,具有新的编程抽象 NAU(又名NeighborSelection、Aggregation 和 Update)。 NAU 是一个灵活的 GNN 框架,用于解决类似 GAS的 GNN 编程抽象无法在聚合阶段使用间接邻居表达 GNN 模型的挑战。为了支持新的抽象,FlexGraph使用层次依赖图 (HDG) 在 GNN 模型中紧凑地存储具有不同定义和层次聚合策略的"邻居"。此外,FlexGraph采用混合聚合策略来区分不同上下文中的聚合操作,并根据其特点设计合适的方法。该系统是在 PyTorch 和 libgrape-lite 之上实现的,libgrape-lite 是一个用于并行图形处理的库。总体而言,FlexGraph基于新颖的NAU抽象,从不同方面进行了各种优化,从而获得了比DGL、PyG、NeuGraph和Euler更好的表达能力和扩展能力

        ByteGNN [140] 是由 ByteDance Incorporation 设计的分布式 GNN 训练系统,专注于提高 mini-batch 训练期间的资源利用率。注意到 GPU 并没有为采样过程带来太多好处,ByteGNN 专注于充分利用 CPU 集群的能力。提出了监督和无监督 GNN 模型的采样阶段的抽象。通过这样的抽象,采样阶段的工作流可以被安排成一个DAG对应算子并行执行模型。设计了一种两级调度策略来调度不同的 DAG 及其内部运算符。 ByteGNN 还试图通过解决工作负载不平衡问题和设计新的图划分方法来减少庞大的网络开销。 ByteGNN 基于 GraphLearn(即 AliGraph)实现,显着提高了 CPU 利用率,与 DistDGL 相比,速度最高可达 3.5 倍。

8.4 其他

        Dorylus [92] 研究了在 GNN 训练中利用更实惠的计算资源(即无服务器线程)的可能性。 GNN 计算被分解为不同的操作,包括图操作神经操作CPU 集群用于特征提取和特征聚合等图形操作,而无服务器线程用于神经操作中的密集矩阵乘法。 Dorylus 专门设计了几个针对 Serverless 线程管理的优化。流水线化 GNN 计算是 Dorylus 的另一个主要贡献。 Dorylus采用SAGA-NN模型,不同算子(如Scatter、ApplyVertex)并行执行,形成执行流水线。训练顶点被分成不同的顶点间隔。 Dorylus不断地为训练管道提供顶点间隔,而管道中的不同顶点间隔在同一时刻由不同的操作符执行。通过这样的小批量管道引入同步,从而设计出具有有限陈旧性的异步通信协议。结果表明,与基于采样的 GNN训练方法相比,无服务器线程实现了接近 GPU 的高效率但成本更低,并且异步执行管道仍然达到更高的精度。

        SUGAR [120] 被提议支持资源高效的 GNN 训练。它使用资源有限的多个设备(例如,移动设备和边缘设备)来训练 GNN 模型,并提供关于分布式 GNN 训练和图分区的复杂性、误差范围和收敛性的严格证明。在使用加权图图扩展生成子图后,SUGAR 中的每个设备在子图级别训练本地 GNN 模型。SUGAR 通过在每个设备中保持局部模型更新来维护局部模型而不是全局模型,这样并行训练能够节省计算、内存和通信成本。总之,SUGAR 旨在扩大 GNN 训练的可扩展性,与大规模图上的 SOTA GNN 模型相比,实现了可观的运行时间和内存使用。

9 未来方向

        分布式 GNN 是大规模训练 GNN 的通用解决方案。除了上面讨论的技术和系统之外,在分布式 GNN 训练中还有其他有趣但新兴的研究课题。此外,最近还提出了许多其他解决方案和优化来解决可扩展的GNN 训练问题。我们在下面讨论一些有趣的方向。

        分布式 GNN 训练的基准。在对传统深度学习模型进行基准测试方面做出了许多努力。例如,DAWNBench [22] 提供了一个标准的评估标准来比较不同的训练算法。它侧重于收敛到最先进的精度所消耗的端到端训练时间,以及推理时间。单机和分布式计算场景都考虑了。此外,许多基准套件是为传统的 DNN 训练开发的,以描述和表征计算 [28、73、149]。至于 GNN,Dwivedi [30] 试图对 GNN管道进行基准测试,并比较不同 GNN 模型在中型数据集上的性能。同时,已经发布了用于图形机器学习任务的更大数据集 [29、37、50]。然而,据我们所知,很少有人努力比较不同 GNN 训练算法的效率,尤其是在分布式计算场景中。 GNNMark [7] 是第一个专门为 GNN 训练开发的基准套件。它利用NVIDIA nvprof 分析器 [12] 来表征内核级计算,NVBit 框架 [97] 分析内存差异并进一步修改PyTorch 源代码以收集数据稀疏性。然而,它缺乏快速分析不同 GNN 模型的灵活性,并且不太关注分析分布式和多机训练场景。因此,为大规模分布式 GNN 训练设计一个新的基准将是切实可行的。

        大规模动态图神经网络。在许多应用程序中,图形不是静态的。节点属性或图结构经常随着变化而演变,这需要及时更新表示。 Li 和 Chen [64] 提出了一种通用的基于缓存的 GNN 系统来加速表示更新。它为隐藏的表示设置缓存并选择有价值的表示以节省更新时间。 DynaGraph [45] 通过缓存消息传递和时间步长融合有效地训练 GNN。此外,它优化了图形分区,以便以数据并行方法训练 GNN。尽管动态 GNN长期以来一直是一个有趣的研究领域,但据我们所知,还没有更多的作品专门关注分布式动态 GNN 训练。动态性,包括特性和结构,对分布式环境中的普通解决方案提出了新的挑战。图划分必须快速适应顶点和边的变化,同时满足负载均衡和通信减少的要求。图结构的更新降低了缓存命中率,这显着影响了 GNN 训练的端到端性能。

        大规模异构图神经网络。近年来提出了许多异构 GNN 结构 [16、39、106、126、137]。然而,很少有分布式系统考虑到异构图的独特特性来支持异构 GNN。由于不同类型节点的特征大小和邻居数量可能有很大差异,以分布式方式处理异构图可能会导致严重的问题,例如负载不平衡和高网络开销。 Paddle Graph Learning 2 框架通过分布式计算在异构图上提供基于消息传递的图学习的简单快速编程。 DistDGLv2 [143] 考虑了不平衡的工作负载分区,并利用 METIS 中的多约束技术来缓解这个问题。为了解决上述问题,应该更加关注这个研究课题。

        GNN 模型压缩技术。尽管模型压缩,包括剪枝、量化、权重共享等,在深度学习中得到广泛应用,但在分布式 GNN 训练中还没有得到广泛应用。网络结构上的压缩如剪枝[146]可以与图形采样策略联系以解决内存不足问题。模型量化是另一种提升GNN 模型可扩展性的有前途的改进方法。 SGQuant [33] 是一种 GNN 定制的量化算法,开发了多粒度量化和自动位选择。 Degree-Quant [90] 随机保护(高阶)节点免于量化,以提高权重更新的准确性。 BinaryGNN [4]应用了一种二值化策略,其灵感来自二元神经网络的最新发展,用于图像和图形网络的知识蒸馏。对于分布式设置,最近,Song 等人[88]提出了使用 CPU 集群进行分布式 GNN 训练的 EC-Graph,旨在通过消息压缩来降低通信成本。它采用有损压缩并设计补偿方法来减轻引入的错误。同时,A Bit-Tuner 用于保持模型精度和消息大小之间的平衡。 GNN 模型压缩与上述分布式 GNN 优化技术正交,值得更多关注,有助于提高分布式 GNN 训练的效率。

10 结论

        分布式 GNN 训练是将 GNN 模型扩展到大图的成功方法之一。在本次调查中,我们系统地回顾了从图形数据处理到分布式模型执行的现有分布式 GNN 训练技术,并涵盖了端到端分布式 GNN 训练的生命周期。我们将分布式 GNN 训练流水线分为三个阶段,其中数据分区阶段和 GNN 模型优化阶段是严重影响GNN 训练效率的两个关键阶段。为了清楚地组织优化两个关键阶段的新技术贡献,我们提出了一个新的分类法,它由四个正交类别组成——GNN 数据分区、GNN 批处理生成、GNN 执行模型和 GNN 通信协议。在 GNN 数据划分类别中,我们描述了分布式 GNN 训练的数据划分技术;在 GNN 批量生成类别中,我们提出了用于小批量分布式 GNN 训练的快速 GNN 批量生成技术;在GNN执行模型类别中,我们讨论了用于计算图生成和计算图执行的执行模型;在 GNN 通信协议类别中,我们讨论了用于分布式 GNN 训练的同步和异步协议。在仔细回顾了这四类技术之后,我们分别总结了现有的代表性分布式 GNN 系统,分别用于多 GPU、GPU 集群和 CPU 集群,并讨论了优化大规模 GNN 训练的未来方向。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
bytegraph是字节跳动开发的一款高性能分布式图数据库。图数据库是一种使用图结构存储和处理数据的数据库管理系统,适用于处理大量相互关联的数据和复杂的数据查询。 bytegraph具有以下特点: 1. 高性能:bytegraph使用分布式架构,可以水平扩展以应对更大规模的数据和负载。它采用了一系列的优化技术,如基于图模型的数据划分和存储方式、高效的图查询算法等,以实现快速的数据访问和处理。 2. 分布式:bytegraph采用了分布式存储和计算的架构,可以将数据分布在多台机器上,实现数据的并行处理和高可用性。通过数据的分区和复制,bytegraph可以提供良好的数据可靠性和容错能力。 3. 灵活的数据模型:bytegraph支持灵活的图数据模型,可以存储和处理复杂的数据结构和关系。它基于标签-属性模型,标签表示数据的类型,属性表示数据的属性值。用户可以根据自己的需求定义和使用不同的标签和属性,以适应各种数据场景。 4. 大数据处理:bytegraph适用于处理大规模的数据集。它具有高效的图遍历和查询算法,可以快速地进行复杂的数据查询和分析。同时,bytegraph支持图计算框架,并与字节跳动的分布式计算平台进行了紧密集成,可以更好地支持大规模图计算任务。 5. 应用广泛:bytegraph可以应用于各种领域,如社交网络分析、推荐系统、知识图谱构建等。它能够帮助用户从海量的图数据中提取有价值的信息,支持复杂的数据挖掘和分析任务。 综上所述,bytegraph是一款高性能的分布式图数据库,具备分布式、灵活的数据模型和大数据处理能力,应用广泛于各种领域。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小锋学长生活大爆炸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值