Towards Fast Large-scale Graph Analysis via Two-dimensional Balanced Partitioning(A类会议ICPP 2022)

Towards Fast Large-scale Graph Analysis via Two-dimensional Balanced Partitioning

通过二维平衡图划分实现快速大规模图分析

摘要

  分布式图系统通常通过将大图划分为多个小图来利用机器集群。因此,图分区通常对分布式图系统的性能有很大的影响。然而,在实际的图系统中,现有的广泛使用的划分方案只能在一个维度上实现很好的平衡,例如顶点数或边数,并且可能会导致大量的切边。为了解决这个问题,我们开发了BPart,它采用两阶段划分方案来实现顶点和边的二维平衡。其核心思想是首先将原始图划分为比簇规模更多的小块,并将这些小块组合起来实现所需的属性,然后有选择地组合小块来构造更大的子图以生成二维平衡划分。我们将 BPart 实现到两个开源分布式图系统 Gemini [58] 和 KnightKing [57] 中。结果表明,BPart在两个维度上都实现了良好的平衡,并且显着减少了切边数。因此,与现有的多种分区方案(例如 Chunk-V、Chunk-E、Fennel 和 Hash)相比,BPart 将各种图形应用程序的总运行时间减少了 5% - 70%。

引言

  近年来,图分析在学术界和工业界受到了广泛的关注,并且已经提出了许多图算法来探索图上的有用信息。广泛研究的图算法的例子包括个性化 PageRank [14, 31]、SimRank [26]、Deepwalk [40]、Node2vec [19] 等。为了支持图算法的有效执行,最近开发了各种图系统。特别是,随着图尺寸的增加,例如,许多网络图已经包含数十亿个顶点和数千亿个边,在单个机器中分析如此大的图是低效的,因此,基于机器集群的分布式图系统被开发来处理大型图,例如PowerGraph [17]、GraphX [18]、G-Miner [7]、Gemini [58]和KnightKing [57]等。
  分布式图系统通常将一个大图划分为多个子图,并将每个子图存储在集群的单个机器中,然后每个机器只处理本地子图,并在需要时将分析任务传输到其他机器。为了协调机器之间的分析任务,通常使用批量同步并行(BSP) 模型[5,17,18,37,46,49,57,58]。具体来说,图分析任务以迭代的方式进行,在每次迭代中,所有机器对本地子图进行分析,并将计算数据并行传输到其他机器。当所有机器完成计算和通信后,它们就会进入下一次迭代。请注意,该 BSP 模型广泛应用于许多分布式图系统中,以支持通用图分析算法,包括 Gemini [58] 和分布式随机游走系统 KnightKing [57]。
  我们发现图划分在分布式图处理中起着至关重要的作用,它不仅由于子图之间的顶点或边的不平衡而影响了机器之间计算负载的平衡,而且由于大量的边切割影响通信流量(即:(分区子图之间的割边)。它们都决定了基于 BSP 的图系统每次迭代的时间成本,并最终影响整体图处理效率。为了在每次迭代中实现机器之间的平衡计算负载,我们观察到关键因素是在顶点和边上实现平衡的图划分主要原因是计算负载通常取决于子图的顶点数和边数。例如,对于许多基于随机游走的算法,计算负载主要由游走者的数量和每个游走者可以在子图上移动的步数决定,这分别取决于顶点和边的数量。另一方面,为了减少通信量,关键因素是最小化子图之间的边切割数量,因为如果两台机器中存储的子图之间存在边切割,则机器之间会存在数据传输。因此,它促使我们开发一种二维平衡图划分方案,即将图在顶点和边上划分为相同大小,同时最小化子图之间的边切割数量。
  然而,现有分布式图系统中广泛使用的图划分方案通常仅实现一维的平衡,即要么顶点数量或边数量平衡,要么忽略最小化边切割问题。例如,一种划分设计是在顶点流或边流中进行分块(详细介绍参见§2.2),这样可以均匀地划分顶点或边的数量。我们将这两种设计分别称为Chunk-V和Chunk-E,它们都被最近的分布式图系统所采用。例如Gemini[58]和GridGraph[60]采用了Chunk-V,最先进的分布式随机漫步系统KnightKing[57]采用了Chunk-E。然而,这些算法只能在一个维度上实现平衡,而另一个维度则相当不平衡。这是因为许多现实世界的图通常表现出无标度性质[42]。也就是说,顶点度通常遵循幂律分布,并且高度顶点很容易聚集在同一个子图中[4]。例如,当使用 Chunk-V 将 Twitter [51] 图划分为 8 个子图时,边的数量可以从 61M 增加到 737M 不等。同样,对于 Chunk-E,顶点数可以从 744K 增加到 14M 不等。结果,机器之间的计算负载高度不平衡,这给BSP模型带来了很高的同步开销,因为等待最慢的机器需要很长时间。例如,当在八台机器的测试台上运行 KnightKing 时,对于像 Deepwalk 这样的图算法(参见第 4.3 节),每台机器的平均等待时间可能是总计算时间的 20%-40%。实际系统中使用的另一种简单分区设计,例如 Giraph 和 Pregel 系统 [5, 37],是通过将每个顶点随机分配给子图来进行散列。尽管基于散列的设计可以在两个维度上实现平衡划分,但是它引入了非常大量的边切割,从而产生大量的通信流量。例如,即使我们在 Twitter 和 Friendster 数据集下只划分为 8 个子图,也有大约 88% 的边切割。
  为了实现顶点和边的平衡图划分,同时减少切边数,我们提出了一种二维平衡图划分方案BPart,其主要思想是采用两阶段划分方案,它首先将原始图划分为许多具有所需属性的小块,然后有选择地将它们组合起来形成最终的划分。具体来说,在分区阶段,我们的目标是同时放松两个维度的不平衡程度。为了实现这一点,我们遵循Fennel [50]中基于流的分区的思想,在决定将每个候选顶点分配给哪个子图时,我们利用加权策略来量化其在多个方面对每个子图的影响,例如,它对顶点和边的数量增加以及边切割数量的影响。通过加权策略,我们可以减少划分后子图的顶点数和边数分布的偏度,也可以调整这两种分布使它们成反比。这样分割出来的小子图就可以组合成一个更大的、更平衡的子图。在第二阶段,我们通过利用反比例特征将小子图组合成一个更大的子图来改善平衡。通过多轮应用两阶段划分过程,最终可以实现顶点和边的理想平衡,并限制边的切割次数。
  为了证明BPart的有效性和效率,我们还在Gemini[58]和KnightKing[57]两个分布式图系统中实现了BPart,这两个系统支持基于迭代的通用图算法,如PageRank[39]和Connected Component,以及随机漫步算法,如个性化PageRank (PPR)[14],跳跃随机行走(RWJ)[23],支配随机行走(RWD)[34],深度行走(Deepwalk)[40]和node2vec[19]。实验表明,与基于哈希的设计相比,BPart可以很好地平衡子图之间的顶点和边的分区,并且还显着减少了切边的数量,例如,哈希产生约87.5%的切边,而BPart在Friendser[15]中将这一数字减少到50%。因此,与多个现有分区方案(Chunk-V, Chunk-E, Fennel和Hash)相比,BPart将各种图形应用程序的总运行时间减少了5% - 70%(参见§4)。我们将在最后一篇论文中发布源代码。

背景与动机

  在本节中,我们首先介绍分布式图系统的计算框架,然后介绍广泛使用的图划分算法,并分析它们的局限性以激发二维平衡划分的设计。

分布式图计算

  分布式图系统通常采用基于迭代的计算框架和批量同步并行(BSP)模型来协调机器之间的分析任务[5,17,18,37,46,49,57,58]。图 1 显示了基于迭代的 BSP 模型的总体思路。具体来说,由于图被划分为多个子图并存储在不同的机器中,因此图计算任务以基于迭代的方式执行,并且在每次迭代中,每台机器首先处理本地子图,然后与其他机器同步。特别地,对于每台机器,一次迭代内的执行过程由两个阶段组成:计算和通信。在计算阶段,对存储在机器中的本地子图执行分析任务,直到无法进行更新为止,这种类似贪婪的策略是充分利用本地子图来最小化机器之间的通信频率。计算阶段结束后,机器进入通信阶段,机器需要先将自己的计算数据发送给其他相应的机器进行更新,然后等待其他所有机器完成计算后接收来自它们的数据。这个阶段一直持续到所有的机器在当前迭代中完成计算和通信。在那之后,他们进入下一个迭代。请注意,在某些系统中,计算和通信阶段可能以流水线方式进行处理,从而摊销部分通信成本。
在这里插入图片描述
  从上面的计算过程可以看出,如果一次迭代中的计算负载不均衡,可能会导致一些机器需要等待从其他仍在进行计算的慢速机器中接收数据,这将显著降低系统性能,应该尽量减少。事实上,等待时间实际上取决于机器本身和最慢的机器何时完成其计算任务。换句话说,所有机器的总等待时间,我们称之为同步开销,取决于所有机器的计算负载的平衡。在理想情况下,如果所有机器处理相同数量的计算工作负载,那么它们在完成自己的计算后可以立即接收来自其他机器的数据并将数据发送到其他机器,然后所有机器都可以进入下一次迭代

图划分算法

  一种简单且广泛使用的图划分是将所有顶点或边视为流,然后从流中一一取出顶点或边来决定它应该属于哪个子图。图 2(a) 说明了一个简单设计的工作流程,我们将其称为 Chunk-V,并在多个系统中使用 [58, 60]。它将相邻的顶点 ID 及其对应的边顺序添加到同一个子图,直到达到平衡指标,然后将其余的顶点添加到另一个子图。它继续上述过程,直到我们将所有顶点添加到子图中。类似地,我们也可以将边视为流来进行类似的划分,我们称之为Chunk-E,它也在多个系统中使用[32, 57],如图2(b)所示。请注意,Chunk-V 和 Chunk-E 旨在平衡顶点数或边数,但它们没有考虑边切割的数量,即分区子图之间的边数。
在这里插入图片描述
  为了减少边缘切割,Fennel 算法 [50] 从顶点流中获取每个顶点,并计算每个分区的分数,然后将该顶点及其关联的边添加到分数最高的分区中。图 2© 说明了该过程。分数定义如下:

S ( v , G i ) = ∣ V i ∩ N ( v ) ∣ − α γ ∣ V i ∣ γ − 1 S(v,{G_i}) = \left| {{V_i} \cap N(v)} \right| - \alpha \gamma |{V_i}{|^{\gamma - 1}} S(v,Gi)=ViN(v)αγViγ1

其中 N(v) 是顶点 v 的邻居集,Vi 是子图 Gi 的顶点集, α \alpha α γ \gamma γ 是两个常数。第一项 ∣ V i ∩ N ( v ) ∣ \left| {{V_i} \cap N(v)} \right| ViN(v) 表示 v 的邻居与 Vi 之间公共顶点的数量,如果这个数字很大,则将 v 添加到子图 Gi 中可以最大限度地减少边切割的次数。第二项 α γ ∣ V i ∣ γ − 1 \alpha \gamma |{V_i}{|^{\gamma - 1}} αγViγ1 表示已经分配给 Gi 的顶点数量,带有加权因子,因此它就像一个惩罚因子,以避免大分区继续拥有更多顶点,这个惩罚因子有助于平衡不同子图中的顶点个数。
  另一种简单的分区设计是使用哈希,其关键思想是将每个顶点随机分配给一个子图。它的工作流程与 Fennel 类似,如图 2© 所示,不同之处在于,它不是计算复杂的分数,而是简单地为每个顶点生成一个哈希值来决定分配哪个子图。

局限性

限制#1:二维平衡分区效率低下。 我们注意到,除了哈希之外的现有算法只能实现一维的平衡划分,要么是顶点数,要么是边数。例如Chunk-V和Fennel只能平衡顶点数量,而边数量却相当不平衡; Chunk-E可以平衡边的数量,但是顶点的数量却相当不平衡。
  为了进一步证明结果,我们运行上面介绍的三种划分算法,即Chunk-V、Chunk-E和Fennel,来显示顶点数和边数的分布。由于空间的关系,我们仅以Twitter图为例,并将图划分为四个子图,在四个机器集群上运行。我们在更多的图数据集上观察到类似的结果(见§4)。从图3可以看出,Chunk-V和Fennel可以实现顶点数量的均衡划分,但是边的数量是高度不均衡的,最大边数和最小边数之间的差距可以达到 8 倍。Chunk-E可以实现边数的均衡划分,但顶点数的高度不均衡,差距可达13 倍。
在这里插入图片描述
  由于顶点数量或边数量的不平衡,不可避免地会导致机器之间计算负载的不平衡。为了进一步演示,我们以随机游走应用程序为例,运行实验来展示计算负载分布。我们从 Twitter 图上的每个顶点开始 5 次随机游走,并让每次游走移动四步。图4展示了每台机器的计算负载,用步行步数来表征。我们看到机器之间的计算负载高度不平衡。特别是对于Chunk-V和Fennel,尽管由于顶点的平衡,每台机器开始的初始行走数在第一次迭代中是平衡的,但由于边数量的不平衡,行走者可以移动不同的步数,因此计算负载仍然是高度不平衡的。
在这里插入图片描述
限制#2:高通信量。基于哈希的算法可以实现两个维度上的平衡划分,但是由于给子图分配顶点的随机性,它面临子图之间的高边切割。因此,由于访问边切割的概率较高,因此会导致较高的通信流量。为了证明这一点,我们首先展示使用不同分区算法(例如 Chunk-V、Chunk-E、Fennel 和 Hash)时的边切割比率。如图5(a)所示,当划分为8个子图时,我们可以看到Chunk-E和Hash包含大约90%的边切割,即大约90%的边是划分的子图之间的交叉边。我们还发现 Fennel 显着减少了边切割的数量,仅减少了 30% 左右。为了进一步显示边切割的影响,我们还运行一个随机游走应用程序作为示例来显示通信流量,通信流量定义为消息游走数,即正在传输的游走数。我们还从每个顶点开始 5 次随机游走,并让每次游走移动四步。图 5(b) 显示,与 Fennel 相比,Chunk-E 和 Hash 的传输次数超过 2 倍,因为它们包含更多的边切割。
在这里插入图片描述

BPart 设计

  在本节中,我们首先介绍图划分平衡度的一个关键观察,然后介绍我们的新划分方案 BPart 的主要思想,该方案的目标是使用两阶段划分方案进行二维平衡划分。之后,我们展示每个阶段的设计细节。

观察与主要思想

  注意,对于图划分,划分后的子图的平衡度用两个维度来表征:子图的顶点数边数
观察:一个维度上平衡度量通常会导致在另一个维度上的高度不平衡分布。具体来说,如果划分的子图的顶点数量的分布是非常平衡的,则边的数量的分布可能是高度不平衡的,反之亦然。这一观察结果的基本原理如下。由于像社交网络这样的自然图通常具有无标度性质,例如,顶点的度数遵循幂律分布。因此,如果顶点数量均匀划分,则包含高度顶点的子图通常比其他子图具有更多的边。也就是说,划分的子图的边数的分布是高度倾斜的。
在这里插入图片描述
  为了进一步验证观察结果,我们进行了实验来显示现实世界图表上不平衡维度的分布偏度。出于空间考虑,我们仅在 Twitter [51] 上显示结果,同时我们也在 Friendster [15] 和 LiveJournal [36] 等其他图表上观察到类似的趋势。这里我们使用顶点平衡算法 Chunk-V 和边平衡算法 Chunk-E 将图划分为 64 个小子图。图6显示了每个子图的顶点数量比率(即|Vi |/|V|)和边数量比率(即|Ei |/|E|)。其中 ViEi 表示子图 Gi 的顶点集和边集,VE 表示原图的顶点集和边集。我们看到Chunk-V平衡了顶点的数量,而边的数量却高度不平衡。类似地,Chunk-E 平衡 |Ei |'s,而 |Vi |'s 高度不平衡。
备注:观察结果还表明,由于不平衡维度(即顶点数量或边数量)的高度倾斜分布,因此通过简单地组合子图也很难实现平衡。
主要思想两阶段划分。为了实现两个维度上的平衡划分,包括划分子图的顶点数和边数,我们开发了一种新的划分方案BPart,其关键思想是采用两阶段划分,其中包括一个划分阶段和一个组合阶段。
在这里插入图片描述
  如图7所示,在划分阶段,我们的目标不是平衡划分,即在一个维度上实现完美平衡,但通常会使另一维度高度不平衡,而是减少两个维度上分布的偏度。其基本原理是,通过生成没有大量顶点或边的子图,可以组合这些子图以实现最终输出的二维平衡。为了实现这一点,我们的想法是利用加权策略来反映分割过程中顶点和边的影响。通过这种加权策略,我们可以调整顶点数和边数的分布,并协调这两个分布,使它们成反比,即顶点数越少的子图边数越多。在合并阶段,我们可以根据顶点数和边数的分布有选择地将两个子图合并成一个更大的子图,从而使新合并的子图在两个维度上都有更均衡的分布。
  为了实现上述两阶段划分,我们需要解决两个挑战。首先,如何在划分过程中设计一个加权策略来同时考虑顶点和边的影响,使得划分后的子图的顶点数分布和边数分布可以根据需要进行调整,例如:根据我们的需要使它们成反比。其次,如何将小子图组合成大子图,我们可能需要多轮组合,才能最终实现顶点和边想要的平衡。下面,我们将介绍BPart解决这两个挑战的设计细节。

分区阶段设计

  我们遵循 Fennel中 基于流的分区的思想(参见§2.2),并设计了一个新的平衡指标来指导图分区过程。关键思想是利用加权方法来整合顶点和边的影响,从数学上讲,我们设计子图 Gi 的加权平衡指标 Wi 如下:

W i = c × ∣ V i ∣ + ( 1 − c ) × ∣ E i ∣ / d ˉ {W_i} = c \times |{V_i}| + (1 - c) \times |{E_i}|/\bar d Wi=c×Vi+(1c)×Ei∣/dˉ

其中,c ( 0 ≤ c ≤ 1 0 \le c \le 1 0c1)是控制 |Vi| 和 |Ei| 权重的权重因子, d ˉ \bar d dˉ 是图的平均度。使用这个加权平衡指标,在划分过程中,目标就是让 Wi 相等。其中,c=0 对应边平衡指标,使得每个子图的边数相等,c=1 对应顶点平衡指标,使得每个子图的顶点数相等。对于权重因子,根据我们的实证研究,我们使用|Vi| 和 |Ei| 等权重,即我们默认设置 c = 0.5。
  基于新的指标 Wi,我们遵循基于流的分区工作,计算子图 Gi 的顶点得分 S(v,Gi),如下所示:

S ( v , G i ) = ∣ V i ∩ N ( v ) ∣ − α γ W i γ − 1 S(v,{G_i}) = \left| {{V_i} \cap N(v)} \right| - \alpha \gamma {W_i}{^{\gamma - 1}} S(v,Gi)=ViN(v)αγWiγ1

其中 N(v) 是顶点 v 的邻居集,Vi 是当前子图 Gi 的顶点集, ∣ V i ∩ N ( v ) ∣ \left| {{V_i} \cap N(v)} \right| ViN(v) 表示 v 的邻居与 Vi 之间公共顶点的数量, ∣ V i ∩ N ( v ) ∣ \left| {{V_i} \cap N(v)} \right| ViN(v) 的数量较多表示子图之间的边切割较少。 α \alpha α γ \gamma γ 是用于调整切边数和平衡度的权重。
  通过在划分时使用加权策略,可以使划分后的子图的顶点数和边数分布的偏度减小,特别是,顶点数可以与边数成反比。基本原理是,由于 Wi 相等,因此包含较少顶点(即较小的 |Vi|)的子图必须具有更多的边(即较大的 |Ei|)。我们还进行了实验来进一步证明这一结果。我们仍然使用与图 6 中相同的设置,结果如图 8 所示。我们可以看到,|Vi| 和 |Ei| 在子图之间都不平衡,而偏度与图 6 的结果相比有所降低,而且|Vi |’s和|Ei |’s的两个分布呈反比关系。这意味着我们可以通过这些小子图的适当组合来实现顶点和边的理想平衡。
在这里插入图片描述

组合阶段设计

  假设我们想要将一个图划分为 N 个子图,并且目标是实现顶点和边的二维平衡划分。我们可以首先根据式(1)中定义的加权平衡指标将图划分为 2X N 个小子图,然后按照每个子图中的顶点数对这些小子图进行排序,即|Vi|。根据反比性质,|Vi| 较小的子图,一般 |Ei| 较大,反之亦然。因此,每次我们都可以将顶点数最少(边数最多)的子图和顶点数最多(边数最少)的子图合并成一个更大的子图,并且,继续对剩余的子图进行这种组合。最后,我们可以得到 N 个更大的子图,并且这些组合的 N 个子图具有更平衡的顶点和边。
在这里插入图片描述
多层组合。我们注意到,仅一次组合通常不足以实现所需的良好平衡。幸运的是,组合子图的 |Vi| 和 |Ei| 的两个分布仍然是反比的,这指导我们设计多层组合策略,在多轮中进行组合,直到平衡条件得到满足。具体如图 9 所示,在上述每一轮组合后,我们检查每个组合子图 |Vi| 和 |Ei| 的平衡程度。如果子图达到顶点和边的平衡阈值,我们将其作为最终的划分子图。否则,我们重新划分剩余的子图并进入下一层进行另一轮组合。例如,在第二层中,假设我们需要将剩余的图划分为Nr 个平衡子图,即 N - Nr 个子图组合在第一层已经得到平衡。如图 9 所示,我们首先将剩余的图划分为 4 × Nr 个小子图(在图 9 中,Nr = N - 1),然后分两轮进行组合。在第一轮中,将 4 × Nr 个子图组合起来生成 2 × Nr 个子图,然后在第二轮中,将这 2 × Nr 个子图进一步组合起来生成最后的 Nr 个子图。之后,我们再次检查每个组合子图的 |Vi| 和 |Ei| 的平衡程度,并重复上述过程,直到所有组合子图的顶点和边都达到平衡。一般来说,根据我们的实验,经过两到三轮的组合,我们可以得到想要的顶点和边的平衡分割。
组合子图的连通性。在基于组合的图划分方案中,由于最后一个划分的子图是由多个小尺寸子图组合而成的,人们可能会担心属于最后一个划分子图的小子图是否仍然是连通的,即这些小子图之间是否仍然有足够数量的边连接。我们想指出的是,即使我们将图划分为许多小的子图,在任意两个小的子图之间仍然有很多边连接。为了证明这一点,我们以Friendster为例,它总共有36亿条边,并将其划分为64个小的子图,我们发现任意两个子图之间至少有50,000个边连接,并且在大多数情况下,上述数字是500,000。该结果表明,可以安全地保证BPart中的两阶段划分不会使组合子图断开。

评估

  为了证明BPart的有效性和效率,我们比较了四种常用的图划分算法,ChunkV, Chunk-E, Fennel和Hash。在实验中,我们以目前最先进的用于运行随机行走算法的分布式图系统KnightKing[57]和同时支持其他图算法的Gemini[58]作为代码库,并将所有分区算法集成到系统中进行比较。我们首先通过与Chunk-V、Chunk-E和Fennel进行比较来显示两个维度上的平衡程度,然后比较各种图算法的计算负载平衡和总运行时间。之后,我们展示了与基于哈希的分区的比较,包括边切割的数量和不同图算法的运行时间。

实验设置

试验台。我们的测试平台由8台机器组成的集群组成,它们通过56 Gbps以太网连接。每台机器都配备了两个24核英特尔至强CPU E5-2650 v4处理器和64GB DRAM,并运行CentOS。在实验中,我们可能会改变实际使用的机器数量,以研究集群规模的影响。
在这里插入图片描述
数据集。我们考虑三个不同大小的图数据集。表 1 显示了图数据集的统计信息。所有这些图都是真实世界的社交网络,它们也被广泛用于评估许多图系统[8,17,55,57]。
平衡程度的度量。我们使用以下两个指标来表征子图的平衡程度:

  • 偏差:我们将偏差定义为最大值与平均值之间的差值,通过数学上的平均值归一化,对于一组n个值{xi |i = 0,1,…, n-1},偏置为 B = (max(xi) - mean(xi))/mean(xi),式中max(xi)为xi的最大值,mean(xi)为平均值。选择此偏差度量是因为每次迭代中的计算时间由最慢的机器决定,即具有最大计算负载的机器。所有其他机器都需要等待最慢的机器完成计算,然后再进行下一次迭代。注意,xi 可以是分区子图的顶点数或边数
  • 公平性:我们使用Jain的公平性指数[25],其定义如下: F = ( ∑ i = 0 n − 1 ∣ x i ∣ ) 2 / [ n × ∑ i = 0 n − 1 ∣ x i ∣ 2 ] F = {(\sum\nolimits_{i = 0}^{n - 1} {\left| {{x_i}} \right|} )^2}/[n \times {\sum\nolimits_{i = 0}^{n - 1} {\left| {{x_i}} \right|} ^2}] F=(i=0n1xi)2/[n×i=0n1xi2],请注意,Jain 公平指数的值范围为 1 n \frac{1}{n} n1 到 1。F = 1 n \frac{1}{n} n1 表示划分是完全不平衡的,即一个子图包含所有顶点或边,而 F = 1 表示划分的子图是完全平衡的,即所有子图包含相同数量的顶点或边。该指标也常用于许多应用中的公平性衡量[24,33,43]。

图算法。我们考虑七种广泛研究的算法,个性化 PageRank (PPR) [14]、带跳转的随机游走 (RWJ) [23]、带支配的随机游走 (RWD) [34]、Deepwalk [40] 和 node2vec [19]、PageRank ( ,PR)[39] 和连接组件(CC)[21]。前五个是随机游走算法,我们从 |V| 开始,通过使用与 KnightKing 中相同的设置,遍历所有算法。对于每次行走,RWJ、RWD、Deepwalk和node2vec都以固定的步数终止。在行走的每一步中,RWJ以0.2的概率跳转到一个随机的顶点,PPR以0.1的概率终止。最后两个是基于迭代的算法,我们在Gemini上运行它们。我们运行PR 10次迭代和CC直到收敛。

分区的平衡度

  我们比较了chunk - v、Chunk-E、Fennel和BPart在三个真实图上的划分结果的平衡程度。我们首先显示了用于划分子图的顶点数和边数的偏差度量,结果如图10所示。x轴和y轴分别表示顶点数量的偏差和边数量的偏差。图中的每个点表示分区算法的结果,该算法将大图划分为一定数量的子图(例如,4、8或16)。我们可以看到,现有的划分算法只能在一个维度上达到平衡。具体来说,Chunk-E可以实现均衡的边划分,但顶点数的偏差可达9.06。当子图的数量变大时,偏差也变大。相反,Chunk-V和Fennel可以实现平衡的顶点划分,但子图之间的边数高度不平衡,边数偏差可达9.15。而BPart总能实现二维均衡划分。此外,当分区子图的数量增加时,对于Chunk-V, Chunk-E和Fennel,偏差增长很快,但对于BPart,偏差始终保持较小,例如始终小于0.1。
在这里插入图片描述
  我们还比较了离线划分算法的平衡度[1,3,28,47]。这些算法通常需要将整个图数据加载到内存中以遍历多次,因此它们通常非常耗时。最先进的算法是MtKaHIP[3],它使用多级方法。该算法首先将原始图粗化为更小的图,通过标签传播方法将多个顶点作为一个顶点处理,然后对粗化后的图进行分割,最后采用非粗化/局部搜索从这些粗化后的子图中进行恢复。我们考虑上面提到的三个真实图,并使用 Mt-KaHIP 将每个图划分为 8 个子图。我们显示了顶点数量的偏差度量和边数量的偏差度量。对于所有三个数据集,顶点数的偏差指标为0.03,而对于LiveJournal、Twitter和Friendster,边数的偏差指标分别为2.5853、2.5622和0.7046。结果表明,边的数量是相当不平衡的。然而,BPart总是可以在两个维度上实现平衡划分,并且在两个维度上的偏差总是小于0.1。
  我们还通过使用Jain的公平性指数作为平衡度度量来显示分区子图的平衡度。为了研究划分为大量子图的影响,我们考虑划分为8、16、32、64和128个子图的情况。由于篇幅的关系,我们只在Twitter图下显示结果,我们在其他图中观察到类似的结果。如图11所示,我们可以看到,当使用我们建议的BPart时,公平性指数总是非常接近于1,这意味着BPart总是可以在两个维度上达到平衡。此外,当划分子图的数量发生变化时,均衡程度保持稳定,因此BPart可以用于实现运行在数十到数百台机器上的分布式图系统的二维均衡划分。
在这里插入图片描述
分区开销。在研究BPart对系统性能的影响之前,我们首先展示它的开销。具体来说,我们计算了将三个真实图分别划分为8个子图的时间成本,结果如表2所示。我们可以看到,与Fennel和BPart相比,chunk-V, Chunk-E完成分区过程所需的时间要少得多。哈希也比Fennel和BPart花费更少的时间,但比Chunk-V和Chunk-E花费更多的时间。原因是对于每个顶点,计算Fennel和BPart所需的分数比通过哈希生成随机数更耗时,而计算哈希比简单地将Chunk-V和Chunk-E中的节点数或邻居数相加更耗时。幸运的是,分区通常在预处理中执行,对于所有的图分析任务只需要执行一次。因此,花费数百秒对图进行分区仍然是可以接受的。此外,我们还观察到,与相应的基线相比,我们提出的划分算法花费的时间相对较多。这是因为我们的算法可能需要多轮组合来实现一个二维均衡分区,这会带来更高的分区开销。我们相信这种开销是可以接受的,因为我们可以使计算更加平衡,从而节省大量的应用程序运行时间,提高分布式图处理的效率
在这里插入图片描述

计算负载平衡

  我们现在评估机器集群之间计算负载的平衡程度,以证明平衡图分区对分布式图处理系统性能的影响。我们采用KnightKing作为代码库,并将各种划分算法集成到其中进行实验。注意,我们没有修改KnightKing的计算过程。由于KnightKing对随机游走进行了优化,我们同时启动5个|V|简单随机行走,让每个行走运行4步,即系统总共运行4次迭代。图13显示了这些随机游走的整个执行过程中的等待时间比率,其定义为所有机器的总等待时间除以完成所有这些随机游走的总运行时间。我们可以看到,在Fennel、Chunk-V和Chunk-E这些分区算法中,由于顶点数量或边数量分布不平衡,高达70%的时间浪费在等待最慢的机器完成计算上。平均而言,拥有4台机器和8台机器的情况下,等待时间的比例分别为45%和55%。另一方面,由于两个维度的均衡划分,BPart的等待时间要少得多,例如使用4台机器和8台机器的情况下,等待比例分别只有10%和20%。
在这里插入图片描述
  为了进一步说明为什么不平衡分区会带来大量的等待时间,我们还展示了每台机器在每次迭代中的计算时间分布。结果如图12所示,每个子图显示一次迭代的结果。这里我们只展示了Friendster在8台机器上的结果,我们在其他数据集和集群尺度上观察到了类似的结果。注意,y轴表示每台机器的计算时间。从结果可以看出,Fennel、Chunk-V和Chunk-E在几乎所有迭代中,不同机器之间的计算时间结果高度不平衡。也就是说,某些机器在每次迭代中等待最慢的机器完成计算会浪费很长时间。而对于BPart,在所有迭代中,机器之间的计算时间分布更加平衡,这得益于二维平衡分区。因此,BPart可以节省大量的等待时间,提高分布式图形处理的效率。
在这里插入图片描述

图形应用程序的运行时间

  我们现在评估使用不同图分区方案时各种图应用程序的总运行时间。注意,我们考虑了七种不同的图形应用(参见§4.1)。结果如图14所示。x轴表示不同的图形应用程序,y轴表示归一化计算时间。当使用Chunk-V作为1时,我们将时间归一化。结果表明,BPart在所有情况下都优于其他划分算法。其中,BPart与Fennel、Chunk-V相比,总运行时间可减少5%-70%,与Chunk-E相比,总运行时间可减少10%-60%。结果表明,通过平衡每个子图中的顶点数和边数,BPart平衡了计算负荷,因此具有更好的分布式图处理性能。
在这里插入图片描述

与哈希的比较

  回想一下,基于哈希的算法可以在二维上实现平衡分区,但它会导致大量的切边。因此,我们还比较了基于哈希的分区算法。我们首先显示边切割数量的比率,即不同子图之间的边数除以图的总边数。结果如表 3 所示。我们可以看到,与其他算法相比,Hash和Chunk-E有更多的边缘切割,例如,Hash对所有数据集有大约87%的边切割,但Fennel和BPart分别只有大约35%和55%的边切割。注意,由于BPart在分割阶段将图分割成更小的块,所以与Fennel相比,它有更多的边切割,而Fennel只在一个维度上达到平衡。
在这里插入图片描述
  然后,我们展示了使用Hash和BPart进行分区时七个图应用程序的计算时间。其他设置与§4.4相同。图15显示了结果,当使用Hash作为1时,我们将时间归一化。x 轴表示不同的图形应用,y 轴表示归一化计算时间。从结果中我们可以看到,即使Hash实现了二维均衡分区,BPart仍然优于它,例如,对于基于随机游走的算法,BPart可以减少总计算时间的5%到20%,而对于其他基于迭代的算法,BPart可以减少20%到35%的计算时间。计算时间的减少主要来自于切边次数的减少,因为切边次数越少,计算过程中的通信开销就越小。
在这里插入图片描述

相关工作

  图形处理系统。近年来,人们提出了许多分布式图处理系统,这些系统利用机器集群来处理非常大的图[7,8,17,18,30,37,49]。Pregel[37]首先提出了支持多机分布式图处理的以顶点为中心的BSP计算模型,随后的许多工作都遵循了该计算模型,开发了分布式图处理的原型系统。为了提高系统的效率,提出了许多设计方法,如根据现实世界中图形的无标度特性(如PowerGraph[17]、PowerLyra[8]和Gemini[58])设计可区分的图划分和计算模型,提高图挖掘和图查询的效率[30]。此外,KnightKing[57]优化了随机漫步处理的性能。LiveGraph[59]针对事务性图形处理情况优化了图形存储。GraphScope[11]公开了具有多种图形计算的统一编程接口。Mycelium[44]提供私有保护的分布式查询等。然而,上述工作并没有过多关注由于图划分不平衡而导致的集群机器之间计算负载的不平衡。与之不同的是,BPart的目标是通过二维均衡图分区来实现计算负载的均衡分配,从而减少同步开销,提高分布式图的处理效率。除了分布式图系统之外,还提出了许多核外单机图处理系统来处理大型图[2,32,35,45,52,60]。它们将图数据存储在 SSD 等外部存储设备上,并迭代地将子图加载到内存中并进行与该子图相关的计算。
  图划分策略。近年来,人们做出了各种设计努力来提高图划分效率并加速图处理。这些划分策略可以分为两类:顶点切割划分算法和边切割划分算法。顶点切割划分算法[8,17,20,41,56]将边集划分为多个不相交的划分,并切割与多个子图有边连接的顶点。一般来说,每个子图都会存储这些顶点信息的副本来进行计算,从而引入许多冗余数据。边切割分割算法[3,6,9,10,12,13,16,22,27-29,38,47,48,50,53,54]更常用。他们将顶点集分成多个不相交的分区,并切割连接两个不同分区的顶点的边。通常,在分布式图处理系统中,通过这些切边的图计算是通过网络在子图之间传输的。
  注意,在实际的分布式系统中,以顶点或边为流,顺序分配相同数量的顶点或边作为分区的基于流的分区被广泛使用[35,60]。然而,这些算法只能在一个维度上实现平衡划分,即顶点数或边数。基于哈希的分区可以在二维上实现平衡分区,其通过将每个顶点随机分配给子图,但它面临着大量的切边问题。此外,GD[4]采用梯度下降法将图分割为两个子图,也可以在二维上实现均衡分割,但是它非常耗时,并且只能将一个图划分为 2 的幂次个子图。与它们不同的是,BPart的目标是将图划分为任意数量的子图,同时旨在实现子图之间具有少量边切的二维平衡图划分。

结论

  本文提出了一种二维平衡图划分方案BPart,实现了划分子图的顶点数和边数的平衡。通过将BPart集成到分布式图系统中,使机器之间的计算负荷得到很好的平衡。

  • 10
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值