摘要

腾讯TEG在大数据机器学习以及数据挖掘方面,基于Spark,结合参数服务器PS开发了新平台Angel,在图计算方面对比Spark GraphX形成了新的训练模式,结合PS对参数的更新迭代,分布式环境下的数据通信做了新的设计。GraphX在分布式数据通信时,使用join操作导致多个worker之间的数据shuffle,使得模型更新变慢,而且临时数据导致空间利用率下降。而PSGraph使用PS可以有效降低这方面的时空消耗。

模型介绍

论文把图上的问题分为3类:

  1. 传统的图算法:PageRank,KCore,等
  2. 图嵌入算法:LINE,等
  3. 图神经网络算法:GCN,GraphSAGE,等
    [PaperReading]*PSGraph: How Tencent trains extremely large-scale graphs with Spark?

首先介绍一下PSGraph针对图算法的大致处理思路:worker处理部分子图,需要的信息从ps上拉取,处理结束后更新ps,更新当前结果。

PSGraph模型为处理图问题,跟其它分布式图处理系统GraphX一样,需要将图进行partition的划分,只不过其多了参数服务器的数据划分过程。图的partition划分基于节点的index,每个partition中存储部分节点,以及该部分节点的邻居列表。ps上存储的数据存节点id与参数数据的map,ps上的partition可根据行和列进行划分。

算法举例

文章挑选了5个不同的算法:PageRank,CommonNeighbor,Fast Unfolding,Line,GraphSAGE,介绍了其在PSGraph上的编程流程。
[PaperReading]*PSGraph: How Tencent trains extremely large-scale graphs with Spark?

PageRank

pagerank需要频繁获得节点的邻居节点的pr值,因此ps上存节点index以及其对应pr值,每个batch拉取相关的节点pr值,然后计算新的pr值,最后push到ps上。这里可以有个优化,注意到大部分的pr值是不变的,可以将Δ\Deltapr作为ps上存储的更新参数。ps上存有两个向量,分别是pr值以及上轮的Δ\Deltapr值,每一轮节点pullΔ\Deltapr,计算新的Δ\Deltaps,并pushΔ\Deltapr到ps,然后根据Δ\Deltapr更新ps上的pr值,之后再重置ps上的Δ\Deltapr向量。

CommonFriends

只计算有连接边的两个顶点的共同好友。ps上存储顶点的neighbor table。处理两个顶点时从ps上拉取neighbor table,计算重复的元素个数。

Fast Unfolding

基于模块度的社区发现算法。流程上首先将每个点看成单独的社区,之后每个顶点分别尝试与其邻居节点所在的社区结合,计算结合前后模块度的变化,如果模块度变化大于0,则将节点归属为是的模块度增大最多的邻居节点的社区,如果小与0则不变。循环迭代,直到所有的值都不变化。在这个过程中,ps上存节点的社区id,同时也要记录每个社区所包含的节点的权重之和,因此社区上存了vertex2com,和com2weight。

Line

将embedding向量和contex向量存在ps上,需要时从ps上拉取到worker。一些简单的计算可以通过内置的psFunc进行自定义计算。每一轮迭代,每一个batch从ps上拉取需要的向量,然后通过随机梯度下降更新向量然后再push到ps上。一些简单的计算可以放到ps上执行,调用自定义的psf。

GraphSAGE

经典的sampler和aggregator任务。从节点的邻居,二阶邻居,k阶邻居中sample一部分,然后通过aggregator将这些节点的信息与当前节点信息结合,之后送入全连接的圣经网络得到新的embbeding。ps上存权重,以及embbeding值,以及节点的neighbor table。Angel开发了pytorch on angel版本,可以在torch环境下使用angel的api,而不用关心底层的实现。

[PaperReading]*PSGraph: How Tencent trains extremely large-scale graphs with Spark?

效果对比

相对于GraphX的算法,执行超大图的时候GraphX的效率很低,很多会因为OOM而终止。而PSGraph执行时全部任务都能以更小的空间代价跑出来,并且速度上有数倍乃至数十倍的优化。
[PaperReading]*PSGraph: How Tencent trains extremely large-scale graphs with Spark?

相关文章:

  • 2021-04-25
  • 2022-01-20
  • 2021-04-10
  • 2021-08-05
  • 2021-12-04
  • 2021-11-28
  • 2021-05-28
  • 2021-05-16
猜你喜欢
  • 2021-07-20
  • 2021-08-13
  • 2021-12-29
  • 2021-09-05
  • 2022-01-20
  • 2021-04-02
  • 2022-12-23
相关资源
相似解决方案