阅读论文:Distributed GraphLab
这篇论文介绍了分布式图计算框架GraphLab及其在机器学习和数据挖掘中的应用。作者指出当前主流的分布式系统(如Mapreduce)不支持处理大规模图数据中的关键特征(如数据相关性、异步更新等)。GraphLab通过将图划分为多个分区并采用染色算法或分布式锁实现并行更新,在保证可串行化的同时提高计算效率。此外,该框架还提供了基于快照的容错机制以保障系统稳定运行,并通过Netflix推荐系统、视频分割等实际应用验证了其可扩展性和性能优势。
最近一周阅读了一篇2012年发表在期刊PVLDB上的论文《Distributed GraphLab:面向云中的机器学习和数据挖掘的一个框架》。尽管目前主流的数据并行处理框架如MapReduce在处理大规模数据时确实便捷实用,然而这些框架并不支持一些关键的机器学习与数据挖掘算法,因此导致整个系统的数据处理效率显著降低。该论文继作者于2010年在UAI期刊上发表的《GraphLab:一种新型并行机器学习框架》一文中继续开展工作,并将GraphLab框架从共享内存环境迁移至分布式环境的同时维持了系统的强一致性保障。
- 关于作者
作者 Joseph Gonzalez 博士获得计算机科学领域的博士学位,并在分布式图分析领域具有卓越的专业素养,在学术界享有盛誉。现为加州大学伯克利分校计算机科学系客座教授,并与美国Dato科技公司共同创立
GraphX代表了图计算领域的一项创新方法,在分布式并行处理框架中实现了高效的图分析任务。该研究论文《GraphX: Graph Processing in a Distributed Dataflow Framework》发表于第十四届OSDI会议(OSDI 2014),会议论文集中的具体页码为599-613,并附有详细的引用链接:OSDI 2014。
该文提出了一种基于分布式图并行计算的高效算法框架,并在 OSDI 会议的首次公开演示中获得了广泛的认可
- GraphLab: A New Framework For Parallel Machine Learning. UAI 2010: 340-349
本文主要探讨了如何在分布式图计算平台中应用各种机器学习算法与数据挖掘技术。其中一些项目如PowerGraph已公开开源。
- 机器学习和数据挖掘(ML&DM)
大规模并行的ML&DM系统通常具有如下的关键特征:
- 数据相关性:在图模型中,节点不仅携带自身数据(图中体现为节点属性),边的存在及其权重同样具有重要意义。例如PageRank算法就需要考虑边的数值信息,在大规模数据处理中提取更有价值的信息。
- 异步更新:大多数机器学习与数据分析方法(ML&DM)都需要通过迭代更新顶点和边的状态。具体而言,在同步更新模式下(如Pregel),所有参数会被一次性更新后才被应用到下一轮计算中;而异步更新则允许后续结果立即用于参数计算。这种差异导致了同步方法可能存在的效率问题——系统运行时间由最慢的部分决定。
- 动态调度:由于不同节点计算复杂度及收敛速度存在差异,在均匀地执行所有节点时可能会浪费大量时间在已经满足收敛条件的节点上。目前一些并行框架尝试解决这一问题——例如Pregel允许某些节点跳过计算步骤;PowerGraph则通过优先级机制将资源集中于部分高优先级节点。
- 可串行化:可串行化处理确保了所有并行执行都能得到与顺序执行相同的结果。许多算法在这种保证下能够加速收敛过程,并且某些情况下必须满足这一特性才能获得正确结果——例如常见的Gibbs抽样算法就要求满足可串行化条件。
- 数据图(Data Graph)
在现实中存在许多元素,并且这些元素之间的关联性非常复杂。如何以一种高效的方式表达这些数值及其相互关联呢?自然想到使用图。一个数据图实际上是由顶点、边和数据所组成的集合:
G = (V,E,D)
在图中定义E为顶点集合,D为边集合,则它们共同反映了元素间存在的结构关系。以搜索引擎优化中的PageRank算法为例,在这一算法中通常会将每个网页节点赋值给图中的一个顶点,并将这些网页之间的超链接关系映射为图中的边连接。其中每个顶点的数值属性代表该网页的排名权重,则这些连接关系对应的边上所赋定的数值属性则表示该链接所具有的重要性权重或影响力程度。
GraphLab的数据图由两个特点:
- 图中的边是不具有方向性的。
- 尽管图中的数据是可以变化的,但其结构(即连接关系)却是静态不变的,在整个执行过程中都不会改变。
- 更新函数(Update Function)
该更新函数的作用域中心为某一特定顶点,并在此区域内执行操作,在完成当前区域内数据修改后会触发相邻节点进行相应调整。其覆盖区域定义为其自身存储的数据以及与其相连的所有边和节点的数据(见下文)。例如,在图中展示了节点1的作用域范围(如图所示),由节点1负责处理其邻接关系中的所有数据变化。

一个更新函数可以表示为:
Update : f(v , Sv) -> (Sv , T)
其中s_v即表示为顶点v所限定的范围;而T则代表GraphLab输出需进行动态调整的一个顶点集合。

一个利用PageRank算法设计的更新函数如上图所示,在对所有相邻节点进行加权求和后确定每个节点的新排名数值。这种调整仅在当前节点排名的变化幅度超过预先设定的标准时才会触发邻居节点的信息传播过程
- 执行模型
GraphLab的执行模型遵行了一种简单的单循环模式,如下图所示:

在第一页上提取待更新的顶点位置,在第二页上调整被处理区域的范围,在第三页将新生成的节点加入到调度队列中。需要注意的是,在处理过程中若有重复项也会被系统自动过滤掉。
- 可串行化
通过多处理器协同更新多个顶点集的方式,显著提升了数据处理效率。但在确保并行模式下系统的可串行化方面存在挑战。最为直接有效的办法是将互不干扰的任务范围并行执行。基于此原则,GraphLab设计了三种一致性的模型方案。
- 完全一致模型(Full Consistency)
在这种模式下,并行更新作用域彼此分离。如图所示,在这种情况下,“更新函数可实现对顶点3及其关联的所有边和节点的信息读写”。然而,在大多数机器学习与数据挖掘算法中,“并未要求实现全范围内信息的全面访问”。例如PageRank仅需关注邻接边及其对应节点的数据量。因此,在这种情形下,“模型的一致性将直接影响并行计算的能力”。

- 边一致模型(Edge Consistency)
在这种模式下,在相邻范围内存在的邻接顶点都可以实现重叠共存状态。如图所示,在这种情况下,在线更新机制对于中心节点以及连接边段实现了全面的读写能力;而对于那些仅属于节点本身的邻居节点,则仅具备读取权限。这种设计使得在线更新过程略显受限但仍然保持了一定程度上的高效性

- 顶点一致模型(Vertex Consistency)
在这种模式下,在涉及范围内的相邻顶点及其关联边均被允许相互重叠。如图所示,在这种架构中,系统设计仅能实现对中心节点的读写操作能力,并赋予连接边仅能执行读取操作的能力。然而,在这种情况下,系统完全不具备对相邻节点进行任何读写操作的能力。因此,在这种一致性架构下,所有参与节点能够同步完成一次完整的状态更新过程。

从对比分析可知,在各种一致性模型中,完全一致模型在保持数据完整性方面的表现最为突出;相比之下,在分布式系统设计中占据重要地位的顶点一致模型则以其卓越的处理能力领先于其他类型的一致性架构;而边一致模型则综合考虑了两者的优点,在实际应用中展现出平衡的特点。选择何种一致性方案往往要根据具体的系统设计需求和对性能指标的具体要求来权衡取舍;这种权衡关系不仅体现了CAP原则的核心思想(即一致性、可用性和强处理能力三者之间的不断平衡),而且在实际应用中展现出显著的优势。

关于如何实现相应一致性模型下的可串行化,文章中提到了两种方法:
- 顶点染色算法 :例如,给图中的每个顶点染色并要求相邻顶点的颜色不能相同,每次执行集合中一种颜色顶点的更新,在该颜色顶点的更行新完成后再进入下一种颜色的更新,这就满足了边一致性模型下的可串行化要求。再比如,给图中的每个顶点染色并要求距离为2的顶点颜色不能相同,就满足了完全一致性模型下的可串行化。如果给图中每个顶点染同样的颜色,则满足了顶点一致性模型下的可串行化。
- 分布式锁 :关于每种一致性模型的锁要求,前面已经提及,这里不在重复。为了避免出现死锁的情况,需要维持一个分布式的框架(分配者)来负责机器之间对于数据的锁请求。每台机器上维护一个顶点的管道,如果管段中的顶点获得了它需要的锁,就将该顶点移除管道,并对它进行更新。
- 分区
考虑到一张图所包含的数据量极为庞大,在单机内存环境中处理整个图的所有元素存在巨大的挑战因此有必要将整个图迁移到分布式环境中进行管理该系统采用了基于顶点的计算模式其核心思想是以顶点作为划分依据并按边进行分配策略使得各节点能够保持其邻接关系及关联数据副本这种设计有助于提高资源利用率同时还能有效降低跨节点操作带来的通信成本差别的划分会影响任务资源分配的一致性进而带来额外的数据传输和存储负担具体实现细节如图所示

在处理过程中,GraphLab采用了特定的分区策略,并利用ParMetis这一工具对初始数据图进行了划分。这种划分过程生成了一系列子任务(即所谓的原子文件),每个子任务都包含了一些生成指令如AddVertex(id,data)和AddEdge(id,data)等信息。值得注意的是,在这种划分下,每个子任务都被独立地存储在一个单独的磁盘上,并且此时k值远超机器数量。此外,在完成划分后还创建了一个详细的索引结构来记录所有子任务之间的关联关系和存储位置信息(即Atom Index)。随后将这些k个子任务分配至各计算节点,并采用简单的哈希算法进行负载均衡配置。最终这一操作使得整个数据划分与资源管理过程能够高效同步配置并完成运行。
该方案的优势在于能够依据节点数量的变化及时适应分区决策,并无需进行一次全面的重新划分。在当今流行于弹性云计算环境下的情况下,这一特性显得尤为关键。
- 容错
该系统采用了基于快照的容错机制。在故障发生后,系统能够从上一次保存的检查点中恢复。该系统提供了两类具体的快照方法:
- 同步快照:它阻止了所有更新函数的执行以及节点间的通信,并将系统发生的更改记录到日志文件中。值得注意的是这种方法效率较低;
- 异步快照:异步快照作为一个顶点内的函数,在每个顶点上独立运行,并不影响整个系统的执行。下图展示了在顶点v上实施异步快照的具体算法。
特别提示:在释放相关锁之前必须先进行快照操作;此外本方案中的快照优先级高于一般的更新任务。

- 总结
在论文的末尾部分提到了对GraphLab框架进行测试研究。其中主要处理的任务包括Netflix电影推荐系统、视频分割算法以及实体识别技术等几个关键领域。其对比的对象为Hadoop框架及其基于MPI实现版本,在实验中重点评估了这三个系统的扩展能力、运行效率以及容错性能。鉴于篇幅限制,在此不做进一步详细阐述
本文探讨了ML&DM问题的核心特性,并揭示了现有分布式系统(例如Hadoop)未能满足这些关键特性。为此,作者开发了一种名为Distributed GraphLab的新系统。该系统采用了二阶分区策略作为基础架构,并基于着色算法与分布式锁机制实现高效的并行计算能力。此外,在容错机制方面,该系统采用了两种不同的快照方式:同步快照与异步快照。
