PowerLyra: Differentiated Graph Computation and Partitioning on Skewed Graphs(2019 ACM Trans)

PowerLyra: Differentiated Graph Computation and Partitioning on Skewed Graphs

PowerLyra:在不均衡图上进行差异化的图计算和分区——基于混合切分策略的大图处理系统

摘要

  具有倾斜分布的自然图对分布式图的计算和划分提出了独特的挑战。现有的图并行系统通常采用“一刀切”的设计,统一处理所有顶点,这导致明显的负载不平衡和高度顶点的高竞争(例如,Pregel和GraphLab),即使对于低度顶点,也会产生高通信成本和内存消耗(例如,PowerGraph和GraphX)。在本文中,我们认为自然图中的倾斜分布也需要对高度和低度顶点进行区分处理。然后我们介绍 PowerLyra,这是一种新的分布式图形处理系统,它融合了现有图形并行系统的优点。具体来说,PowerLyra对低度顶点采用集中计算以避免频繁的通信(局部性),并对高度顶点进行分布式计算(点割)以平衡工作负载。PowerLyra 还提供了一种高效的混合图划分算法(即混合割),该算法将边割(针对低度顶点)和点割(针对高度顶点)与启发式相结合。为了提高节点间图访问的缓存局部性,PowerLyra 进一步提供了局部性感知的数据布局优化。PowerLyra基于最新的GraphLab实现,可以无缝支持同步和异步执行模式下运行的各种图算法。使用各种图形分析和 MLDM(机器学习和数据挖掘)应用程序对三个集群进行的详细评估表明,对于现实世界和合成数据,PowerLyra 的性能比 PowerGraph 分别高出 5.53 倍(从 1.24 倍)和 3.26 倍(从 1.49 倍)处理图形,并且比 GraphX 和 Giraph 等其他系统快得多,但内存消耗却少得多。将混合割移植到 GraphX 进一步证实了 PowerLyra 的效率和通用性。

引言

  图结构计算越来越流行,它在社交计算、网络搜索、自然语言处理和推荐系统等广泛领域的采用就证明了这一点[5,25,54,67,88,98]。最近对图结构计算的高效且富有表现力的编程模型的强烈渴望推动了许多分布式图并行系统的开发,例如 Pregel [47]、GraphLab [43] 和 PowerGraph [24]。他们通常遵循“像顶点一样思考”的哲学[47],将图计算编码为以顶点为中心的程序,以并行处理顶点并跨边通信
  另一方面,现实世界图的分布往往是多样化的并且不断发展[41]。例如,一些现实世界的数据集表现出倾斜的幂律分布 [21, 52],其中少量顶点具有大量相邻顶点,而其他一些现有数据集(例如道路网络)表现出更平衡的分布。图数据集内部和之间的不同属性给有效划分和处理此类图带来了新的挑战[1,24,42]。
  不幸的是,现有的图并行系统通常采用“一刀切”的设计,不同的顶点被同等地处理,导致性能和可扩展性不佳。划分点通过将顶点均匀分布到机器来完成的,这可能会导致度数高的顶点(即相邻顶点的数量)的计算和通信不平衡。相比之下,PowerGraph [24] 和 GraphX [26] 专注于通过在机器之间划分边来均匀并行计算,即使度数较低,这也会在分割的顶点之间产生较高的通信成本。
  此外,先前的图划分算法可能会导致倾斜和非倾斜(即规则)图的性能不佳。例如,边割[36,61,68,72],通过切割子图之间的跨分区的边来划分图,其目标是均匀分布顶点,通常会导致边的过度复制以及高度顶点的不平衡消息。相比之下,顶点切割[8,24,31]在子图之间切割顶点,目标是均匀分布边,但会在切割的顶点之间产生较高的通信开销和过多的内存消耗。
  在本文中,我们对倾斜图上现有的图并行系统进行了全面分析,并认为不同图的不同属性和倾斜顶点分布需要对低度和高度顶点进行差异化计算和划分。根据我们的分析,我们推出了 PowerLyra,这是一种新的分布式图形处理系统,它融合了现有系统的优点。PowerLyra 的关键思想是根据不同顶点的度数自适应地处理它们
  PowerLyra遵循PowerGraph [24]的GAS(即Gather、Apply和Scatter)编程接口,可以无缝支持在同步和异步执行模式下运行的现有图算法。在内部,PowerLyra 区分了低度和高度顶点的处理:它对低度顶点采用集中计算以避免频繁的通信,并且仅对高度顶点进行分布式计算以平衡工作负载
  为了有效地划分倾斜图,PowerLyra 采用平衡 p 路混合切割算法来构建倾斜图的不同类型的顶点。随机(即基于哈希的)混合割在机器之间均匀分布低度顶点及其边(如边割),并在机器之间均匀分布高度顶点的边(如点割)。我们进一步提供了一种贪婪启发式方法来改进倾斜图中低度顶点的划分
  最后,PowerLyra 通过在混合割之上构建的局部性敏感数据布局优化,缓解了通信阶段线程之间较差的局部性和高干扰。它以少量增加预处理时间来换取图计算过程中显着加速
  我们基于 GraphLab PowerGraph v2.2(2015 年 2 月发布)实现了 PowerLyra,其中包含约 3,000 行 C++ 代码。自 2015 年首次发布 PowerLyra 以来,出现了许多受我们的混合方法启发的图结构系统 [10,56,64,73,91,95],采用混合分区算法 [32,84,93,94] ,或者直接基于PowerLyra实现[33,40,75,77]。微信是全球最大的社交平台之一,拥有超过 10 亿活跃用户,该算法也被用于其社交平台的异常检测 [70]。
  我们使用各种图形分析和 MLDM 应用程序对三个不同集群进行的评估表明,对于真实世界和合成图形,PowerLyra 的性能分别比 PowerGraph 高出 5.53 倍(从 1.24 倍)和 3.26 倍(从 1.49 倍),并且由于显着降低的复制因子、更少的通信成本以及更好的计算和通信局部性,消耗的内存更少。将混合割移植到 GraphX 进一步证实了 PowerLyra 的效率和通用性。

  本文做出以下贡献:

  • 揭示现有图并行系统的一些性能问题的全面分析;
  • PowerLyra模型支持低度和高度顶点的差异化计算,以及在不牺牲通用性的情况下以最少消息进行自适应通信;
  • 具有启发式的混合割算法,可提供更高效的分区和计算,以及局部性数据布局优化;
  • 展示 PowerLyra 性能优势的综合评估

背景和动机

  许多图并行系统(包括 PowerLyra)将计算抽象为以顶点为中心的程序 P,该程序在稀疏图 G = {V, E} 中的每个顶点 vV 上并行执行。每个 P(v) 中的计算和通信范围仅限于通过边的相邻顶点 n,其中 (v,n)∈E

倾斜图

  自然图,例如社交网络、电子邮件和即时消息图或网络图,通常表现出倾斜分布,例如幂律度分布[ 21]。这意味着大部分顶点具有相对较少的邻居(即低度顶点),而一小部分顶点具有大量邻居(即高度顶点)。给定正幂律常数 α,幂律分布下顶点具有度 d 的概率为:
 
P ( d ) ∝ d − α P(d) \propto {d^{ - \alpha }} P(d)dα
 
其中,较低的指数 α 意味着图具有更高的密度和更多的高度顶点,图更倾斜。尽管还有其他用于倾斜图的模型[41,58,59,82],但由于空间限制,我们将讨论限制在幂律分布上。然而,PowerLyra 不受这种分布的约束,并且应该也有利于具有倾斜分布(具有高度和低度顶点)的其他模型(例如,二部图 [13, 14])。

图分区的问题

  图分区在减少通信和确保负载平衡方面发挥着至关重要的作用。传统的平衡 p 路边切割 [61,68,72] 将图的顶点均匀分配给 p 台机器,以最大限度地减少跨越机器的边数。在图 3 中的边割下,六个顶点被随机(即哈希模 #machine)分配给三台机器。边割创建复制的顶点(例如,镜像)和边,以在每台机器中形成局部一致的图状态。然而,具有倾斜分布的自然图很难使用边割[1]进行划分,因为高度顶点会导致通信成本和工作不平衡的爆发。图 3 中的顶点 1 贡献了大约一半的顶点和边的副本,并导致机器 1 上的负载不平衡,该机器具有接近一半的边。
在这里插入图片描述
  平衡 p 路点割[24]均匀地分配边,使顶点副本最小化。与边割相比,点割避免了边的复制,并通过允许将单个顶点的边分配到多台机器上来实现负载平衡。然而,随机构造的点割会导致更高的复制因子(λ)(即顶点的平均副本数),因为它会导致低度顶点的放置不良。图 3,随机方式的点割为顶点 3 创建镜像,即使它只有两条边。
  为了减少复制因子,PowerGraph 使用贪婪启发式 [24] 来累积同一台机器上的相邻边。在实践中,将贪婪启发式应用于所有边(即协调[24])会在图分区[29]期间产生显着的惩罚,这主要是由机器之间交换顶点信息引起的。然而,在每台机器上独立使用贪婪启发式(即 Oblivious [24])将显着增加复制因子。
  一些先前的工作(例如,[29])认为智能图放置方案可能会主导并损害总执行时间。然而,这样的论点仅部分适用于贪婪启发式分区和简单图算法。首先,由于创建过多镜像需要很长的时间,因此朴素的随机分区方案并不一定意味着预处理时间的高效率。其次,随着图算法(例如 MLDM)的日益复杂,与整体计算时间相比,预处理时间将变得相对较小。此外,与图计算不同,图分区只需对每个图执行一次,并且生成的分区可以在以后重用,以在多次运行中分摊预处理时间。
  表 2 展示了 48 个分区的 PowerGraph 各种最先进的点割方法的比较。由于复制因子最高,随机顶点切割在预处理和计算时间方面表现最差。协调顶点切割实现了较小的复制因子和执行时间,但代价是过多的预处理时间。Oblivious顶点切割减少了预处理时间(但仍然比随机慢),同时使复制因子和总体执行时间加倍。网格顶点切割在预处理时间方面优于协调顶点切割 2.8 倍,但会降低图计算性能。此外,具有 10 次图计算迭代的 Twitter 关注者图上的 PageRank 预处理时间百分比范围为 24.2% 到 56.8%,而 Netflix 电影推荐图上的 ALS 的预处理时间百分比仅为 3.6% 到 22.8%。PowerLyra 的随机混合切割通过显着减少执行时间而仅略微增加预处理时间(即使与网格相比)来提供最佳性能。
在这里插入图片描述

图并行抽象

  不失一般性,本文的其余部分将使用顶点的入度来介绍 PowerLyra 混合计算模型的设计。与其他程序一样,PowerLyra 中的顶点程序 P有向图 G = {V, E} 上运行,并在每个顶点 vV 上并行计算。用户可以关联任意顶点数据 Dv(其中 vV)和边数据 Ds,t(其中(s,t)∈E)。顶点 v 上的计算可以从相邻顶点 n 收集数据或将数据分散到相邻顶点 n,其中 (v, n)∈E。PowerLyra 复制顶点以在每台机器上构建本地图,所有这些都称为副本。与 PowerGraph 一样,PowerLyra 也随机选择一个副本(使用顶点的哈希)作为主副本,并选择其他副本作为镜像。PowerLyra仍然严格遵循GAS模型,因此可以无缝运行PowerGraph中的所有现有应用程序。
在这里插入图片描述

  PowerLyra采用简单的循环来表达图算法的迭代计算,并根据顶点度数对顶点进行不同的处理。图5(b)说明了高度和低度顶点的详细顶点计算语义。
在这里插入图片描述

  处理高度顶点:为了利用顶点计算的并行性,PowerLyra 遵循 PowerGraph 中的 GAS 模型来处理高度顶点。在Gather阶段,主节点(以下简称“master”)发送两条消息来激活所有镜像在本地运行Gather功能,并将结果累加回master。在Apply阶段,master运行Apply函数,然后将更新后的顶点数据发送到其所有mirrors。最后,所有镜像执行Scatter函数来激活它们的邻居,并且主镜像将类似地接收来自激活镜像的通知。与 PowerGraph 不同,PowerLyra 在 Apply 和 Scatter 阶段将主控到镜像的两条消息分组(参见图 4 的左侧部分),以减少消息交换。
  处理低度顶点:为了保留顶点计算的访问局部性,PowerLyra 引入了一种新的类似 GraphLab 的计算模型来处理低度顶点。然而,PowerLyra 不提供像 GraphLab 这样的双向(即进出)访问局部性,这需要边副本和双倍消息。我们观察到大多数图算法仅在一个方向上收集或分散数据。例如,PageRank 仅沿入边收集数据并沿出边分散数据。PowerLyra 利用这一观察结果,通过仅在一个方向上放置顶点和边(这已由应用程序代码指示)来提供单向访问局部性。由于计算后(在Apply阶段)不可避免地需要从master到mirror的更新消息,PowerLyra采用本地聚集和分布式分散的方式来最小化通信开销。如图 4 右侧所示,由于收集所需的所有边都已放置在本地,因此收集和应用阶段都可以由主设备在本地完成,而无需其镜像的帮助。在应用阶段,激活镜像(沿出边进一步分散其邻居)的消息与更新顶点数据(从主镜像发送到镜像)的消息相结合。
  最后,在分散阶段不再需要从镜像到主控的通知。与 GraphLab 相比,PowerLyra 不需要复制边,并且在低度顶点的每次迭代中每个镜像最多只产生一条(更新)消息。此外,从主控到镜像的单向消息避免了通信接收端的潜在冲突[11],因为每个镜像在每次迭代中最多会接收一条消息(来自其主控)。

文章大量介绍了图划分系统,但这里只重点介绍PowerLyra的混合割图划分思想

分布式图分区

  对于分布式图处理系统,图分区在减少通信和确保工作负载平衡方面发挥着至关重要的作用。现有的边割和点割通常使用“一刀切”的设计,统一处理所有顶点和边。然而,自然图中倾斜的幂律度分布需要不同的机制来处理高度和低度顶点以及边。此外,PowerLyra 的抽象依赖于图分区来为低度顶点提供单向访问局部性
  本节介绍一种新的混合切割算法,该算法对低度和高度顶点使用不同的划分策略,它包含边割的局部性和点割的并行性。基于此,提供了一种名为 Ginger 的新启发式方法来进一步优化 PowerLyra 的分区。最后,提供理论分析和实证验证,以将新的混合方法与先前的点割算法进行比较。

平衡 P 路混合切割

  由于点割将边均匀地分配给机器,并且仅复制顶点以在每台机器内构建局部图,因此内存和通信开销高度依赖于复制因子(λ)。因此,现有的顶点切割算法主要旨在减少所有顶点的平均复制因子 λ。然而,我们观察到关键是减少低度顶点的 λ,因为高度顶点不可避免地需要在大多数机器上进行复制。然而,当前许多顶点切割的启发式方法都偏向于高度顶点,而很少关注低度顶点。
  我们提出了一种平衡 p 路混合割方法,重点是减少低度顶点的 λ。它对低度和高度顶点使用差异化分区。为了最大限度地减少边的复制,每条边都专门属于其目标顶点(边的目的地)。对于低度顶点混合割采用低切割,通过散列目标顶点,将顶点和入边均匀地分配给机器。对于高度顶点混合切割采用高切割,将高度顶点的所有入边根据其源顶点进行哈希分布到机器上。之后,混合割创建副本并构建局部图,就像典型的点割中所做的那样。其中一个副本也被随机指定为主副本(通过哈希),其余副本为镜像。
在这里插入图片描述

  如图7所示,假设用户自定义顶点度阈值(θ)为3,哈希函数为hash(X) = (X − 1)%3。所有顶点及其入边都被指定为低度顶点,但顶点 1 除外,其入边被指定为高度顶点。例如,边(1,4)和(3,4)被放置在机器0中,根据低度顶点4散列得到,而边(2,1)和(5,1)被放置在机器1中,根据高度顶点1的入度边的源顶点散列得到的,且机器1中有顶点1的镜像副本。混合切割构建的分区仅产生四个镜像,并实现了良好的负载平衡。
  混合切割解决了倾斜图上的边切割和顶点切割的主要问题。首先,混合割可以提供低得多的复制因子。对于低度顶点,所有入边都与其目标顶点分组,不需要为它们创建镜像。对于高度顶点,由于分配新的高度顶点及其所有入边而增加的镜像的上限等于分区(即机器)的数量而不是顶点的度; 这完全避免了低度顶点的新镜像,限制了复制因子的爆发式增长。其次,混合割为低度顶点提供单向访问局部性,混合计算模型(第 3 节)可以使用它来减少运行时的通信成本。第三,混合切割在分布式预处理中非常有效,因为它是一种完全基于哈希的低度和高度顶点划分方案。所有的顶点和边都可以独立地分配给指定的机器,无需协调。最后,基于散列(随机)混合割构建的分区在顶点和边上自然平衡。低度顶点的随机放置导致顶点的平衡,这几乎相当于低度顶点的边平衡。对于高度顶点,所有入边都分配给源顶点的所有者机器,源顶点也通过哈希分配给随机机器

启发式混合切割(只对低度顶点使用)

  为了进一步减少低度顶点的复制因子,我们提出了一种新的贪婪启发式算法,即 Ginger,受到 Fennel [72] 的启发(这是一种贪婪、流式、边割框架)。
  形式上,假设分配的低度顶点的分区集合为 P = (S1, S2, … , Sp ),低度顶点 v 被分配给分区 Si ,使得 δ g ( v , S i ) ≥ δ g ( v , S j ) \delta g(v,Si) \ge \delta g(v,Sj) δg(v,Si)δg(v,Sj),对于所有 j ∈ {1, 2, … ,p}。我们定义分数公式 δ g ( v , S i ) = ∣ N ( v ) ∩ S i ∣ − δ c ( ∣ S i V ∣ ) \delta g(v,Si) = |N(v) \cap Si| - \delta c(|S_i^V|) δg(v,Si)=N(v)Siδc(SiV),其中 N(v) 表示顶点 v 的入边的源顶点的集合, ∣ S i V ∣ |S_i^V| SiV 表示 Si 中的顶点数。前一个分量 |N(v) ∩ Si | 对应于顶点 v 的入边的源顶点在分区 Si 中的个数。平衡公式 δ c ( x ) \delta c(x) δc(x) 可以解释为将顶点 v 添加到分区 Si 的边际成本,用于平衡分区的大小。为了改善边的平衡,我们添加归一化的边数 μ ∣ S i E ∣ \mu |S_i^E| μSiE 代入平衡公式的参数,其中 μ 是顶点与边的比率, ∣ S i E ∣ |S_i^E| SiESi 中的边数。复合平衡参数变为 ( ∣ S i V ∣ + μ ∣ S i E ∣ ) / 2 (|S_i^V| + \mu |S_i^E|)/2 (SiV+μSiE)/2

  • 23
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值