基于图结构高性能计算框架:GraphLab

偶然觉得有必要关注下大规模机器学习和数据挖掘方法

刚阅读完 CMU的一篇《Distributed GraphLab;A Framework for Machine Learning and Data Mining in the Cloud》论文,虽然自己还木有分布式计算框架的经验,但还是想在这里抛砖引玉,望路过的大大们不吝啬赐教。自己开通博客,一方面记录并分享所学的东西,另一方面自己还是菜鸟,有讨论才能进不。


文章的摘要部分就说明了,高性能数据并行框架,像MapReduce,简化了大规模数据处理系统的设计和执行过程,但是他们没有很好的支持许多重要的数据挖掘和机器学习算法,会导致降低学习系统的效率。GraphLab框架是种基于图结构,拥有异步迭代计算,动态计算,很好序列化等特点。

CMU的GraphLab小组把GraphLab部署在Amazon的EC2云平台,并跟几个主流的大规模数据处理框架进行PK。在文章中主要有以下几点分析:


1,概括了机器学习和数据挖掘算法的共有特性和现有的大规模计算框架的局限性。

2,实现了GraphLab架构和具有分布式能力的执行模块

3,两个具有分布式执行模块:Chromatic Engine:实现部分异步数据处理

                                                      Locking Engine :能够实现完全异步数据处理

4,容错分析

5,通过部署GraphLab在EC2平台上,和Hadoop,Pregel,MPI进行性能比较,评估GraphLab的表现


PS:我非专业从事大规模数据处理人员,文中盖不会出现对大规模计算框架的个人意见,怕误人子弟,内容实为阅读该论文的部分总结,若对该框架感兴趣,可以参考原论文,我会在文章最后附上参考资料。

MLDM = Machine Learning and Data Mining

先来看下GraphLab小组对MLDM算法属性的分析,其实也是GraphLab的优势分析,该部分非常好的干货,总结的经验对想了解大规模机器学习的人很有帮助


1,图结构计算( Graph Structured Computation)

       最近在MLDM领域中有很多关于数据关联性( dependencies between data )的研究,通过获得数据的关联性,可以从噪音很多的数据中抽取有用的信息。比如,通过为购物者之间的关系建模,就能很快找到口味相似的用户,并为之推荐商品,而不是仅分析单个用户的数据。不幸的是,现有的并行计算框架像MapReduce还无法满足在MLDM算法中的关联性计算。

      GraphLab和Pregel都是图的框架,但是他们两个的通信机制上存在差别,Pregel是基于大块的消息传递机制,GraphLab是基于内存共享机制。所谓图结构,就是把输入的数据看成图G = (V,E,D) V = vertex     E = edge   D = data 也就是权重,我的理解是如果基于该结构的话就能保存数据之间的关联性.


2,异步迭代计算( Asynchronous Iterative Computation)

搞过机器学习的人都知道,很多MLDM的算法都需要迭代更新参数。由于GraphLab是基于图结构,参数的更新就需要依赖其他的参数更新。同步数据更新需要根据 并行更新得到的 T 时刻的数据结果来更新  T + 1 时刻的数据,由于每步的执行长度都有执行最慢的机器决定,同步更新方式会使性能大打折扣。跟同步更新不一样的是,异步系统会使用最近的一些数据作为输入更新参数。 异步更新会为MLDM提供很大好处,提高算法的执行效率。文中还讨论了影响机器执行速度的各种因素,感兴趣的可以去观摩下喔。


3,动态计算( Dynamic Computation)

        在很多MLDM算中需要对参数进行迭代计算,不同的参数之间存在的收敛速度差异性,比如有些参数可能只要执行几步就能收敛,有些参数要执行很多步才能收敛。拿PageRank举例,把所有的网页的PageRank权重看成一个维度很高的向量 P 的话,在采用 Power Method 进行更新 P  ,直到 P 收敛的过程中,把每个维度看成是一个参数的话,不同维度的收敛速度也是不一样的,如果能实现动态计算的话,可以大大减少计算次数,提高系统的性能。

           该图为PageRank中收敛次数的分布图,横轴为迭代次数,纵轴为参数个数

基于图结构高性能计算框架:GraphLab_第1张图片

说了这么多,何为动态计算呢?

就是在进行迭代更新参数的同时能检测不同参数的收敛情况,只对还为收敛的数据进行计算,这里会根据一定的阀值进行判断收敛程度,如上面所述,P 中只有3%的参数是需要经过10步以上才能收敛,大部分都只需要很少的迭代次数就能收敛。


4,序列化能力(Serializability)也就是保证所有并行模块能够并行执行的能力。


论文中所描述的GraphLab大概具备的优势就如上所述啦,下面来看下GraphLab框架。

主要包括了Data Graph构建,Update function(更新函数,看文中描述应该会采用递归策略),还有执行模块。

Data Graph可以表示成 G = (V,E,D),D表示数据权重,图为有向图,D既可以表示节点的权重,也表示有向边的权重

后续部分内容需要一些专业知识,我将一些资料放上,感兴趣的可以自己去看看喔。


没有大规模处理经验,只好先借鉴,初步窥探大规模计算所需考虑东西。

1,如何考虑数据分割,组织

2,采用何种策略进行更新参数,异步或同步,如何组织自己的计算框架满足策略需求呢?

3,分析机器学习算法,提取可迭代,可收敛步骤或者参数,将循环任务进行分割

4,如何序列化执行模块,保证更新函数能够并行执行,而且保证数据结果的一致性(依我的理解,在图结构的基础上,某个节点在更新T 时刻的值的时候,只需要关注邻居节点是否更新足以,但不能拿T- 2时刻的值来更新 T 时刻的值)

该部分的内容有待考虑,还需要不断的学习才行。

Distributed GraphLab- A Framework for Machine Learning and Data Mining in the Cloud.pdf

GraphLab主页

更多关于机器学习,个性化推荐技术更新可以关注微博小飞鱼_露

你可能感兴趣的:(mapreduce,mapreduce,框架,算法,数据挖掘,asynchronous)