开源图计算框架GraphLab介绍
GraphLab介绍
GraphLab 是由CMU(卡内基梅隆大学)的Select 实验室在2010 年提出的一个基于图像处理模型的开源图计算框架。框架使用C++语言开发实现。
该框架是面向机器学习(ML)的流处理并行计算框架,可以运行在多处理机的单机系统、集群或是亚马逊的EC2 等多种环境下。框架的设计目标是,像MapReduce一样高度抽象。可以高效运行与机器学习相关的、具有稀疏的计算依赖特性的迭代性算法,并且保证计算过程中数据的高度一致性和高效的并行计算性能。该框架最初是为处理大规模机器学习任务而开发的,可是该框架也相同适用于很多数据挖掘方面的计算任务。在并行图计算领域,该框架在性能上高出非常多其它并行计算框架(比如,MapReduce、Mahout)几个数量级。GraphLab 自成立以来就是一个发展非常迅速的开源项目,其用户涉及的范围也相当广泛,全球有2 000 多个企业、机构使用GraphLab。
GraphLab的长处
GraphLab 作为一个基于图处理的并行计算框架,可以高效地运行机器学习相关的数据依赖性强,迭代型算法。其设计具有例如以下特点和长处。
- 统一的API 接口。
对于多核处理器和分布式环境,採用统一的API 接口,一次编敲代码就可以高效地运行在共享内存环境或者分布式集群上。
- 高性能。优化C++运行引擎,在大量多线程操作和同步I/O 操作之间进行了非常好的平衡。
- 可伸缩性强。GraphLab 可以智能地选择存储和计算的节点,原因是GraphLab 对于数据的存储与计算都使用了精心设计的优良算法。
- 集成HDFS。GraphLab 内置对HDFS 的支持。GraphLab 可以直接从HDFS中读数据或者将计算结果数据直接写入到HDFS 中。
- 功能强大的机器学习类工具集。GraphLab 在自身提供的API 接口之上实现了大量的开箱即用的工具集。
GraphLab在Windows下的安装
GraphLab如今还不支持Windows,临时仅仅能通过VMware Player运行linux的虚拟机,官方给出了已经配置好的GraphLab Create的VM文件。可以免去编译等步骤。
下载GraphLab Create,并依照要求配置安装
- 首先下载GraphLab Create VM文件
- 然后安装VMware Player。导入GraphLab Create VM文件详见文档
- 最后通过ipython查看能否正常导入graphlab库详见文档
GraphLab和MapReduce的对照
一般的机器学习类算法有下面两个特性:
- 数据依赖性非常强。运算过程中參与计算的各个机器之间常常须要交换大量的数据。
- 流处理复杂。主要表如今整个处理过程须要重复地迭代计算,数据处理分支非常多。非常难实现真正的并行。
在GraphLab 出现之前。针对这些机器学习的算法,普遍的编程方法是採用MPI 和PThread 这些已有的底层开发库来完毕这类计算问题。採用这样的编程模型的开发应用,针对详细的应用,须要开发人员实现相应的算法来完毕计算过程中集群计算节点之间主机通信和数据同步等底层操作。这样的开发方法的优势在于,可以针对详细的应用对代码进行深度的优化。以达到非常高的性能。
可是对于不同的应用,须要重写代码实现底层的数据分配、数据通信等细节,这就导致了代码重用率非常低,可拓展性差。对编程人员要求高。这样的编程模型显然不适合当前敏捷的互联网开发。而当前被广泛使用的MapReduce 计算框架,在并行运行多任务的时候,要求各个任务之间相互独立。任务运行期间不须要相互之间进行数据通信。所以MapReduce 不适合数据依赖性强的任务,并且MapReduce 并行计算模型也不能高效表达迭代型算法。
这样的计算模型在处理如日志分析、数据统计等数据独立性的任务时具有明显的优势,可是在机器学习领域。MapReduce框架并不能非常好地满足机器学习计算任务。
GraphLab 的出现不是对MapReduce 算法的替代,相反,GraphLab 借鉴了MapReduce 的思想,将MapReduce 并行计算模型推广到了对数据重叠性、数据依赖性和迭代型算法适用的领域。本质上,GraphLab 填补了高度抽象的MapReduce 并行计算模型和底层消息传递、多线程模型(如MPI 和PThread)之间的空隙。
当前流行的并行计算框架MapReduce 将并行计算过程抽象为两个基本操作。即map 操作和reduce 操作。在map 阶段将作业分为相互独立的任务在集群上进行并行处理。在reduce阶段将map的输出结果进行合并得到终于的输出结果。GraphLab 模拟了MapReduce 中的抽象过程。对MapReduce的map操作,通过称为更新函数(Update Function)的过程进行模拟,更新函数可以读取和改动用户定义的图结构数据集。用户提供的数据图代表了程序在内存中和图的顶点、边相关联的内存状态,更新函数可以递归地触发更新操作。从而使更新操作作用在其它图节点上进行动态的迭代式计算。GraphLab 提供了强大的控制原语,以保证更新函数的运行顺序。GraphLab对MapReduce的reduce操作也通过称为同步操作(Sync Operation)的过程进行模拟。同步操作可以在后台计算任务进行的过程中运行合并(Reductions),和GraphLab 提供的更新函数一样,同步操作可以同一时候并行处理多条记录,这也保证了同步操作可以在大规模独立环境下运行。
GraphLab并行框架
GraphLab将数据抽象成Graph结构,将算法的运行过程抽象成Gather、Apply、Scatter三个步骤。其并行的核心思想是对顶点的切分。
上图演示样例中,须要完毕对V0邻接顶点的求和计算,串行实现中。V0对其全部的邻接点进行遍历。累加求和。而GraphLab中,将顶点V0进行切分,将V0的边关系以及相应的邻接点部署在两台处理器上。各台机器上并行进行部分求和运算。然后通过master顶点和mirror顶点的通信完毕终于的计算。
Graph的构造
顶点是其最小并行粒度和通信粒度。边是机器学习算法中数据依赖性的表现方式。
对于某个顶点,其被部署到多台机器,一台机器作为master顶点,其余机器上作为mirror。Master作为全部mirror的管理者,负责给mirror安排详细计算任务;mirror作为该顶点在各台机器上的代理运行者,与master数据的保持同步。
对于某条边。GraphLab将其唯一部署在某一台机器上,而对边关联的顶点进行多份存储,解了边数据量大的问题。
同一台机器上的全部edge和vertex构成local graph,在每台机器上,存在本地id到全局id的映射表。
vertex是一个进程上全部线程共享的,在并行计算过程中,各个线程分摊进程中全部顶点的gather->apply->scatter操作。
GraphLab的运行模型
每一个顶点每一轮迭代经过gather->apple->scatter三个阶段。
- Gather阶段
工作顶点的边 (可能是全部边。也有可能是入边或者出边)从领接顶点和自身收集数据,记为gather_data_i。各个边的数据graphlab会求和,记为sum_data。这一阶段对工作顶点、边都是仅仅读的。 - Apply阶段
Mirror将gather计算的结果sum_data发送给master顶点,master进行汇总为total。Master利用total和上一步的顶点数据,依照业务需求进行进一步的计算,然后更新master的顶点数据,并同步mirror。
Apply阶段中。工作顶点可改动,边不可改动。
- Scatter阶段
工作顶点更新完毕之后,更新边上的数据,并通知对其有依赖的邻结顶点更新状态。这scatter过程中,工作顶点仅仅读,边上数据可写。
在运行模型中,graphlab通过控制三个阶段的读写权限来达到相互排斥的目的。在gather阶段仅仅读,apply对顶点仅仅写。scatter对边仅仅写。并行计算的同步通过master和mirror来实现,mirror相当于每一个顶点对外的一个接口人。将复杂的数据通信抽象成顶点的行为。
參考资料
p=215">GraphLab:新的面向机器学习的并行框架
GraphLab百度百科
轻松搞定TB级数据。开源GraphLab突破人类图计算“极限值”
GraphLab:将大数据分析从理念运用到生产
转载请注明作者Jason Ding及其出处
GitCafe博客主页(http://jasonding1354.gitcafe.io/)
Github博客主页(http://jasonding1354.github.io/)
CSDN博客(http://blog.csdn.net/jasonding1354)
简书主页(http://www.jianshu.com/users/2bd9b48f6ea8/latest_articles)
百度搜索jasonding1354进入我的博客主页
$(function () {
$('pre.prettyprint code').each(function () {
var lines = $(this).text().split('\n').length;
var $numbering = $('
$(this).addClass('has-numbering').parent().append($numbering);
for (i = 1; i ').text(i));
};
$numbering.fadeIn(1700);
});
});
开源图计算框架GraphLab介绍的更多相关文章
- 腾讯正式开源图计算框架Plato,十亿级节点图计算进入分钟级时代
腾讯开源再次迎来重磅项目,14日,腾讯正式宣布开源高性能图计算框架Plato,这是在短短一周之内,开源的第五个重大项目. 相对于目前全球范围内其它的图计算框架,Plato可满足十亿级节点的超大规模图计 ...
- 开源实体映射框架EmitMapper介绍
开源实体映射框架EmitMapper介绍 综述 EmitMapper是一个开源实体映射框架,地址:http://emitmapper.codeplex.com/. Emit ...
- GraphLab介绍[转]
GraphLab介绍 原文链接:http://blog.jasonding.top/2015/06/08/Machine%20Learning/%E5%BC%80%E6%BA%90%E5%9B%BE% ...
- Spark入门实战系列--9.Spark图计算GraphX介绍及实例
[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .GraphX介绍 1.1 GraphX应用背景 Spark GraphX是一个分布式图处理 ...
- 腾讯开源进入爆发期,Plato助推十亿级节点图计算进入分钟级时代
腾讯开源再次迎来重磅项目,14日,腾讯正式宣布开源高性能图计算框架Plato,这是在短短一周之内,开源的第五个重大项目. 相对于目前全球范围内其它的图计算框架,Plato可满足十亿级节点的超大规模图计 ...
- 明风:分布式图计算的平台Spark GraphX 在淘宝的实践
快刀初试:Spark GraphX在淘宝的实践 作者:明风 (本文由团队中梧苇和我一起撰写,并由团队中的林岳,岩岫,世仪等多人Review,发表于程序员的8月刊,由于篇幅原因,略作删减,本文为完整版) ...
- 图计算 on nLive:Nebula 的图计算实践
本文首发于 Nebula Graph Community 公众号 在 #图计算 on nLive# 直播活动中,来自 Nebula 研发团队的 nebula-plato 维护者郝彤和 nebula-a ...
- Spark(十七)图计算GraphX
一.图概念术语 1.1 基本概念 图是由顶点集合(vertex)及顶点间的关系集合(边edge)组成的一种数据结构. 这里的图并非指代数中的图.图可以对事物以及事物之间的关系建模,图可以用来表示自然发 ...
- GraphX 图计算实践之模式匹配抽取特定子图
本文首发于 Nebula Graph Community 公众号 前言 Nebula Graph 本身提供了高性能的 OLTP 查询可以较好地实现各种实时的查询场景,同时它也提供了基于 Spark G ...
随机推荐
- iOS依据字符串计算UITextView高度
iOS计算字符串高度,有须要的朋友能够參考下. 方法一:ios7.0之前适用 /** @method 获取指定宽度width,字体大小fontSize,字符串value的高度 @param value ...
- 关于android多点触控
最近项目需要一个多点触控缩放的功能.然后上网查了下资料 总结一下: 首先android sdk版本很重要,比如你在AndroidManifest.xml中指定android:minSdkVersion ...
- linux内核中send与recv函数详解
Linux send与recv函数详解 1.简介 #include <sys/socket.h> ssize_t recv(int sockfd, void *buff, size_t n ...
- java泛型接口详解
/* * 泛型接口 */ interface Tool<T> { public void show(T t); //泛型方法 public <E> void print(E e ...
- asp.net下利用MVC模式实现Extjs表格增删改查
在网上看到有很多人写extjs下的表格控件的增删改查,但是大多数都是直接从后台读取数据,很少有跟数据库进行交互的模式. 今天就来写一个这样的例子.欢迎大家交流指正. 首先简单介绍一下MVC模式,MVC ...
- 用Delphi实现Windows的鼠标钩子函数
Delphi是基于PASCAL语言的Windows编程工具,功能十分强大.然而在Delphi的帮助文件中,对Windows API函数的说明沿袭了 VC 的格式,和VC一样,对很多API函数的用法没有 ...
- 聊天气泡的绘制(圆角矩形+三角形+黑色边框,关键学会QPainter的draw函数就行了),注意每个QLabel都有自己的独立坐标
头文件: #ifndef GLABEL_H #define GLABEL_H #include <QLabel> #include <QPainter> #include &l ...
- XML 关键字
SGML--Standard Generalized Marked Language 标准通用标记语言GML--Generalized Marked Language 通用标记语言XML--Extes ...
- 体系结构复习2——指令级并行(分支预測和VLIW)
第五章内容较多,接体系结构复习1 5.4 基于硬件猜測的指令级并行 动态分支预測是在程序运行时.依据转移的历史信息等动态确定预測分支方向.主要方法有: 基于BPB(Branch Prediction ...
- 关于CopyU!的常见问题解答
拷优(CopyU!)常见问题解答 本常见问题解答列举了一些常见的疑问及其解释,如果您对CopyU!有任何问题,请您首先查看本解答! 本解答将会保持随时更新! 一.使用篇: 1.问:我的杀毒软件 ...