一周一论文(翻译 总结)—— [NSDI 17] TUX2: Distributed Graph Computation for Machine Learning 面向机器学习的分布式图处理系统

1. Introduce

        在图形引擎(如GraphLab [29])上的早期工作是基于机器学习的动机,基于观察到许多机器学习问题可以用图形自然而有效地建模,并通过迭代收敛算法解决。
        问题:然而,大多数后续的图形引擎工作都采用简单的图计算模型,由PageRank等基本图形基准测试驱动。 由此产生的图形引擎缺乏高效分布式机器学习的灵活性和其他关键功能。
  1.  Heterogeneous vertices
        在机器学习中,顶点都有不同的属性。然而在图计算中,图引擎一般都只含有一个属性的顶点。这样对于机器学习算法来说,会带来更多的编程复杂性和性能低下。

  1.  Mini-Batch
        Mini-Batch是一个十分重要的概念在机器学习中。但是在图计算中缺没有这样的概念,Min-Batch意味着在机器学习中,训练一部分子集然后更新整个模型。

  1. Flexible consistency
       在分布式图处理系统中,多个Worker一起工作处理整个图。在每次迭代的结束,图引擎会有一个很严重的Barrier限制。然而在Min-Bach中,Hard Barrier在多个Mini-Batch中会造成太多的同步开销。由于机器算法可以容忍这样的状态。所以它们使用这样一种Soft Barrier的机制 进行同步

        作者提出TUX2,一个分布式图形引擎,用于在图模型中表示的机器学习算法。 TUX2保留了图计算的好处,同时还支持过时同步并行(SSP)模型[20,11,42,13],异构数据模型和新的MEGA(小批量,Exchange,GlobalSync和 应用)图形模型以实现高效的分布式机器学习

2. TuX2 Desgin

        TUX2旨在保留图形引擎的优势,同时将其数据模型,编程模型和调度方法扩展到分布式机器学习。

        TUX2使用顶点切割方法(vertex-cut),其中(高度)顶点的边集可以分成多个分区,每个分区保持顶点的副本。其中一个副本被指定为Master顶点;它维护顶点数据的主版本。所有剩余的副本都称为Mirror顶点,并且每个副本都维护一个本地缓存副本。我们采用顶点切割是因为它在处理幂律图中被证明是有效的,并且它自然地连接到参数服务器模型(paraemter-server model)[26,11]:所有顶点数据的主版本可以被视为(分布式)全局状态存储在参数服务器中。在每个分区中,TUX2将顶点和边保持在单独的数组中。Edge数组中的Edge按source vertex分组。每个顶点都有一个索引,给出它在Edge数组中的边集的偏移量。每条边都包含诸如包含目标顶点的分区的ID和相应顶点数组中该顶点的索引等信息。该图形数据结构适用于遍历,并且使用查找表优于顶点索引。

        每个分区都由一个进程管理,该进程在逻辑上同时扮演一个Worker角色,计算分区中的顶点并沿着Edge传播顶点数据,以及一个Server角色,以同步镜像顶点与其相对应Master顶点之间的状态。 在进程内部,TUX2使用多个线程进行并行化,并将分区的Server角色和Worker角色分配给同一个线程。 然后每个线程负责计算用于本地计算的Mirrors顶点子集,并维护进程拥有的分区中Master顶点子集的状态。 图2显示了数据在TUX2中如何分区,存储和分配给执行角色。

2.1 Heterogenous Data Layout


        虽然传统图形引擎简单地假设了一个同质图,但TUX2支持多种数据布局维度的异构性,包括顶点类型和分区方法; 它甚至支持主点和镜像顶点数据类型之间的异构性。 

        Tux2重点介绍二分图上的优化,因为许多机器学习问题自然地映射为具有两个不相交顶点集的二部图,例如MF中的用户和项目,LR中的特征和样本等等。 因此这两组顶点通常具有不同的属性。 例如,在LR的情况下,只有特征顶点包含权重字段,并且只有样本顶点包含目标标签字段。 而且,在像BlockPG [27]这样的LR变体中,特征顶点也维护着过去的历史信息。因此,TUX2允许用户定义不同的顶点类型,并将不同类型的顶点放置在不同的数组中。 这导致紧凑的数据表示,从而改善计算过程中的数据局部性。此外不同的顶点类型可能包含不同的顶点度数。例如,在用户项目图中,项目顶点可以链接到数千个用户,但用户顶点通常仅链接到数十个项目。TUX2使用PowerLyra [7]和BiGraph [8]中提出的二分图感知分区算法,以便只有高度顶点才具有Mirror 顶点。

        在二分图中,TUX2可以通过扫描一个类型的顶点来列举所有的边。列举边类型的选择有时具有显著的性能影响。用Mini-Batch来扫描镜像顶点会导致更有效的同步步骤,只要TUX2能够识别有更新的镜像集合,这些镜像会与它们的Master同步,因为这些顶点被连续地放置在数组中。相比之下,如果TUX2在一个Mini-Batch中扫描没有镜像的顶点,那么在扫描过程中为其他顶点类型更新的镜像将被分散,从而更昂贵的定位。因此,TUX2允许用户指定在计算过程中需要计算的顶点集。

        Figure3 显示了如何在二分图下组织顶点数据,并以用户-项目图中的MF为例。由于用户顶点的度数一般都比较小,所有只有项目顶点使用点划分方法切割顶点。因此,Server角色中的Master顶点数组只包含项目顶点,而worker角色只管理用户顶点。这样,用户顶点也就没有镜像副本,也不需要分布式同步。在工作者角色中,项目和用户顶点的镜像存储在两个独立的数组中。

        另一种类型的异质性来自顶点的主副本副本上执行的不同计算,这可能需要不同的数据结构以实现同步效率。 例如,BlockPG算法访问和更新小批量中的一组特征的权重,而在采样顶点计算的目标函数可能取决于不在该块中的特征的权重。 这导致镜像上的辅助特征顶点属性,以记录特征权重的历史增量以递增地计算目标函数的值。 但是,主属性上不需要此增量属性,因此不需要在同步期间进行交换。 同样,主顶点也维护一些镜像上不需要的额外属性。 因此,TUX2允许用户为同一个顶点的主副镜像定义不同的数据结构。

2.2 Scheduling with SSP


        TUX2支持过时的同步并行(SSP)模型[11],有有界的过时和小批量。SSP是基于每个clock的概念,其中一个clock对应于一个mini-Batch的迭代,并且由一组并发任务完成。迭代批处理可以看作是一个特殊的情况,每个迭代都使用所有的输入数据。SSP引入了一个显式的松弛参数,它指定了一个clock全局共享状态的视图的停顿。因此,这一空缺决定了任何任务可能取得进展的最慢的任务。随着s的松弛,时钟t上的任务保证会看到从时钟1到t-s-的所有更新,它可能会看到从时钟t-s到t-1的更新。图4展示了一个SSP执行,其松弛度为1。
        TUX2在具有指定大小的Mini-Batch上执行每个迭代。每个工作人员首先选择一组顶点或边作为当前的小批量执行。在小批处理完成后,TUX2通过继续列举顶点或边缘数组的连续段,获取下一个小批量的另一组顶点或边。TUX2在小批处理粒度中支持SSP。它跟踪每个小批量迭代的进度,以便计算时钟。如果在所有的工作人员上完成相应的小批处理(包括主和镜像之间的同步),并且如果结果更新被应用到并在状态中反映出来,那么工作人员就会认为时钟t已经完成了。一个工人可以执行一个任务在时钟t只有它知道所有时钟t -s -1已经完成,其中s是允许松懈。

2.3 MEGA Model in TUX2 TUX2

        TUX2引入了一个新的基于Stage的MEGA模型,其中每个阶段是对一组顶点及其Edge的计算。 每个阶段都有用户定义的函数(UDF)应用于在其中访问的顶点或边。 TUX2支持四种类型的阶段:Mini-Batch,Exchange,GlobalSync和Apply(因此命名为MEGA); 它允许用户构建任意阶段的顺序。 该引擎负责调度每个阶段中多个CPU core或机器上的UDF并行执行。

        MEGA模型保留了GAS模型的简单性,同时引入了更多的灵活性来解决支持机器学习算法的GAS模型的缺陷。 例如,在诸如MF和LDA的算法中,处理一条边涉及更新两个顶点。 这需要两个GAS阶段,但是可以在我们的模型的一个Exchange阶段中完成。 对于LR,两个方向上的顶点数据传播之后应该跟一个Apply阶段,但是不需要Scatter阶段; 这可以在MEGA模型中避免,因为MEGA允许任意阶段的顺序。 接下来我们详细阐述不同类型的阶段。

2.3.1 Exchange
        Exchange()在每个列举的边上执行。 Du和Dv分别是顶点u和v的数据。 D(u,v)是与边缘(u,v)相关的数据。 au,av和a(u,v)是顶点数据和边缘数据的相应累积增量,τ是与每个工作线程相关联的用户定义的共享上下文,并在整个计算过程中保持不变。 所有这些参数都允许在此UDF中更新。 用户可以使用它为顶点和边缘生成新的积累变化量,或者直接更新它们的状态。由于点划分的切割策略,Exchange()只能更新顶点的镜像版本数据(即局部状态)。用户也可以使用τ来计算和存储一些算法特定的非图上下文数据,这可能会 通过全球聚合共享。 默认情况下,未为枚举指定的顶点受顶点级锁保护,但TUX2还允许用户为某些应用程序实现其自己的无锁语义[14,21,37]。 这个阶段比GAS模型中的聚集/散布阶段更灵活,因为它不暗示或强制顶点数据沿着边缘传播的方向,并且它可以更新同一UDF中两个顶点的状态。 从而提高LDA和MF等算法的效率。

2.3.2 Apply
        这个阶段枚举一组顶点并同步它们的Master版本和Mirror版本。 对于每个顶点,Master从Mirror中累积增量,调用Apply(Du,au,τ)来更新其全局状态,然后更新Mirror上的状态。 为了支持Master和Mirror之间的异构,TUX2允许用户为需要同步的顶点的全局状态定义基类VertexDataSync; Master和Mirror可以定义不同的子类,每个子类继承自基类,以包含其他信息。 引擎仅同步Master顶点和Mirror顶点之间的VertexDataSync中的数据。

2.3.3 GlobalSync
        该阶段负责同步跨作业者线程的上下文和/或通过一组顶点聚合数据。 有三个UDF与这个阶段相关联:
        Aggregate()将跨顶点的数据聚合到Workers上下文τ中。 Combine()将Worker的上下文τ聚合到一个特殊的Worker中,该Worker为不同的时钟维护多个版本的上下文τ以支持SSP。 Apply()完成全局聚合的τ(例如,用于重新缩放)。 执行Apply()后,最终的聚合τ会同步回所有Workers。 如果未提供Aggregate()函数,则此阶段将仅在Worker中汇总和同步上下文τ。
2.3.4 Mini-Batch
        这是一个包含一系列其他阶段的复合阶段; 它定义了每个小批量迭代执行的阶段。 MiniBatch根据要在每个最小批次中枚举的版本或边的数量来定义最小批量大小,对于双边图,则列出要枚举的顶点类型(请参见§4中的示例)。

3 Conclusion

        通过TUX2,我们提倡图计算和分布式机器学习的融合。 TUX2代表了朝这个方向迈出的关键一步,不仅展示了这种融合的可行性,而且展示了这种融合的潜力。 我们通过将重要的机器学习概念引入图计算来实现这一点; 定义一个新的灵活的图模型来有效地表达机器学习算法; 并通过对代表性机器学习算法进行广泛的评估来证明其优点。 展望未来,我们希望TUX2将为进一步研究图计算和分布式机器学习提供一个共同的基础,从而允许更多的机器学习算法和优化能够被轻松高效地表达和实现。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值