创新点:在pregel上执行了各种以前未执行过的算法,找出其低效的地方并提出了优化技术。其通用的技术基于在图的小区域上执行连续计算的思想,从而完善了Pregel的顶点中心模型。
理论基础
一、 计算的开销
- 通信开销,超级步的数量,内存类的开销,顶点间的计算开销
- 优化: 一般优化前两个。 系统层面优化 & 算法层面优化。
二、 系统封装类
- Vertex class :父类,用户定义的顶点函数通过继承该类而实现。
- VertexValue class:封装了与各顶点相关的状态,由用户定义
- Message class :封装了各顶点之间传送的信息。
- Aggregators :全局对象,所有顶点可见,用于数据共享、协调和数据聚合。当多个顶点在一个superstep同时更新某对象的本地副本时,系统会使用用户定义的该聚合函数来聚合数据的更新。
- Master class:在GPS和Giraph中引进,可被继承后实现 master.compute() ,在每个超级步的开头被调用,可以存储本地数据,也可以在全局对象被广播至各顶点前更新之。
图算法
每个图算法会有多个计算步骤,我们将其看做多个"phase",每个阶段会由多个超级步完成,而其协调由master.compute完成
一、Strongly Connected Components(SCC,强连通分量,4 phase)
- Transpose Graph Formation
- Trimming:图中各顶点仅有出边或入边,或为独立顶点。
- Forward-Traversal:MaxForwardReachable() ,从所有顶点并行地遍历图G,找到每个顶点可达的最远的顶点,形成SCC1, SCC2,...
- Backward-Traversal:遍历G.T,对每个SCC,判断其是否强连通。
二、 Minimum Spanning Forest(MSF,最小生成森林)
- Min-Edge-Picking:为每个顶点选择其最小权重的邻边。
-
Supervertex-Finding:conjoined-tree & supervertex & subvertices, 图中v5是supervertex,其余顶点是subvertices。该阶段就是指每各subvertex都要找到其对应的supervertex。
- Edge-Cleaning-and-Relabeling:
- Supervertex-Formation:在每个supervertex处合并其所有重标记的subvertices的邻接列表
三、Approximate Maximum Weight Matching(MWM,近似最大权匹配)
- Max-Weight-Edge-Picking:顶点选择其权重最大的邻边,暂存邻点信息且给邻点发信息。
- Match-Discovery:两点匹配后,给其邻点发消息,变为inactive
- Removing-Matched-Neighbors:未匹配的点将已匹配的邻点从自己的邻接列表中删除。
四、 Weakly Connected Components (WCC,弱连接分量)
优化技术
一、Finishing Computations Serially (FCS)
-
通过对输入图的一小部分执行一些串行计算来解决算法的缓慢收敛问题
-
活跃子图(active-subgraph):会执行大量超级步的非常小的输入图子图。其中的顶点分为两类:potentially-active(在后面的计算中依然有作用)& certainly-inactive
-
思想:通过在master.compute()内部连续地在一个小的活动子图上完成计算,从而避免大量的这些小的超步执行。
FCS会设置阈值,监控图中活动子图的尺寸,一旦低于预设的阈值,就将活跃子图发送给master,在master.compute()中完成其连续计算,并将结果发回给workers。
-
适用:活跃子图在 整个计算过程中 或者 某个单独阶段(phase) 会收缩的图算法。当原图算法收敛特别慢的时候,FCS效果比较好:FCS-SCC,在其反向遍历阶段适用。
由于图的结构特性,有可能会出现,频繁地仅在输入图的某一个极小区域上多次执行超级步的情况。而顶点中心模型,每一个超级步中,不同顶点之间都会交换同步和协调信息,因此这种情况会造成性能的降低,收敛地会很慢
FCS针对这种情况做优化,将本应在一系列超级步中完成的计算,发送到master,由其完成串行计算后直接发给各worker。
二、Storing Edges At Subvertices (SEAS)
- 通过以分布式的方法存储supervertex的邻接表信息来解决MSF算法中合并各顶点邻接列表的所造成的高开销问题。
-
适用:在计算过程中形成超顶点的算法。
————>MSF:在 supertex formation 阶段适用,改为 New-Supervertex-Notification 阶段,即在第 i 次迭代时,① 刚结束第 i - 1 次迭代的每一个子顶点(subvertex)向其最近更新的超级顶点(supervertex)发消息,包含其ID;② 第 i - 1 次迭代的每一个超级顶点(此轮或许不再是超级顶点)给其原来的子顶点回发消息,包含其新的超级顶点的ID;③ 这些子顶点更新其信息,存储新的超级顶点ID。
由于超级顶点的存在,在MSF算法第四阶段,需要接收并合并其所有子顶点的邻接列表,已完整存储最小生成森林,导致了操作上的高额开销,SEAS针对这种情况进行优化,将超级顶点的边信息以分布式的方法存储在所有子顶点间
三、Edge Cleaning On Demand (ECOD)
- 根据请求执行边清理,解决开销过大的问题。
- “Edge cleaning”:常见图操作,当顶点删除其邻接顶点时所必须的操作,要清理掉其相关的边。
- MWM上的实现:在“Removing-Matched-Neighbors”阶段,只有向v提出了匹配请求的邻居顶点修改其邻接列表,其它邻居顶点保持原样假装无事。若某次迭代时顶点 z 通过待删边e来向v发出请求,则此时才将 z 邻接列表中的该边删除。
在类pregel的系统上edge cleaning的自然实现中,顶点在一个超步中向它们的邻居发送消息,可能基于消息内容会在另一个超步中删除该邻居。通信成本与图中边的数量成正比,可能很昂贵。此外,有时不需要执行删除操作,因为边e不删除也可能永远不会被再次使用或影响计算。ECOD针对这种情况做优化,即假装所有的边都合法,默认对这些该清理的边不做操作,只有当某顶点试图使用这些边做计算时,才执行删除操作。
四、Single Pivot (SP)
- 找出倾斜图中的巨大的部件。
- WCC上的实现:先随机选定一个顶点,只对该顶点执行前向遍历,找出该顶点所属的component,接着对剩下的部分重新执行SP。
网友评论