【分布式计算】MapReduce的替代者-Parameter Server

原文:http://blog.csdn.net/buptgshengod/article/details/46819051

首先还是要声明一下,这个文章是我在入职阿里云1个月以来,对于分布式计算的一点肤浅的认识,可能有些地方不够妥善,还请看官可以指出不足的地方,共同进步。

一.背景

随着互联网的发展,数据量的增大,很多对于数据的处理工作(例如一些推荐系统、广告推送等)都迁移到了云端,也就是分布式计算系统上。衍生了很多牛逼的分布式计算的计算模型,比较著名的就是MapReduce、MPI、BSP等。后来也产生了一些分布式计算系统,大家耳熟能详的Hadoop就是基于MapReduce实现的。

本文的主人公是Parameter Server,其实也不算是新宠了,这个模型已经被提出好几年了,只不过在国内还不是特别热。不过最近一些云服务巨头们开始了对于PS的深入开发和研究。

引用一位算法大神的话简单描述下什么事Parameter Server:总结是一种计算模型SSP+一种分布式设计看板模式Client+Server(partitioned table)+基于算法的调度策略(Scheduler)。可能有些同学还不太理解这句话,没关系,下面通过一个实例来介绍一下PS。

二.场景

因为我在学习PS的过程中是对照Map Reduce来学习的。所以也通过一个机器学习算法的并行计算的实例,来比较Map Reduce和PS。为了更好地突出PS的优势,这里用到的算法是一个梯度逼近最佳结果的一种算法-逻辑回归(Logical Regression)。

为了更好地帮大家理解这些内容,我也罗列了一些必须的知识储备:
1.逻辑回归算法-最好fork里面的代码看一下 
2.随机梯度下降SGD 
3.李沐大神实现的一个PS开源库,上面有一个论文,一定要读 
4.并行逻辑回归-等会会借用里面的内容来讲 
5.ps开源代码网站

三.Work Flow

首先还是要补充几句,Map-Reduce在实现并行算法的过程中有它的优势,但是也有很大的弊端,它在处理梯度问题上没有很好的效率。这一点PS通过client+server的模式很好的解决了这个问题。


1.Map-Reduce处理LR

首先来看下Map-Reduce是如何解决逻辑回归(下文统一称为LR)的。首先是map的过程,将很大的数据切割成key-value的形式,我们在这里假设所有的数据都是稠密的。比如说你有100行数据,切割成5份,那么每一个worker就处理其中的20行数据。Reduce主要是负责统一worker的计算结果。下面具体到LR的算法实现来讲解下Map-Reduce的过程。

先来看看整体的流程图: 
这里写图片描述

第一步:首先是进行map阶段对于长尾数据的分割,我们假设数据是稠密非稀疏的。逻辑回归的并行计算的数据分割,可以按行分、按列分或者行列一起分。分好的数据通过key-value的形式传到每一个worker中,对应上图的map phase阶段的worker。当然,map里也包含LR的计算逻辑,逻辑请大家看上面的资料自己学习下。分割图如下:这里写图片描述

第二步:利用随机梯度(SGD)方法逼近最优解,在凸函数中LR是可以无限接近最优模型的,可以通过限定循环次数和收敛条件来实现。这其中就有一个问题,认真研究LR的同学可能会发现,如果我们使用SGD的话,因为worker之间虽然有一定的通信机制,但是并不是实时同步的,所以每一个worker并不知道对方的梯度是多少,形象的描述一下就是我们可以把SGD看成一个下坡问题。 
这里写图片描述 
每个worker都在往终点方向下山(收敛模型),但是它们彼此间并不能实时协作,也就是说A不知道B爬到哪里,C不知道A爬到哪里。传入一个路径,我就接着向下爬一点,可能会走重复的路径。所以说Map-Reduce的SGD是一种范围的梯度。每个worker不一定一直往下走,可能走走停停甚至往后走一点,但是因为数据量巨大总是可以走到终点的。 但是这样就会浪费了很多效率,这也就是Parameter Server重点解决的问题。

第三步:负责reduce的服务器统一出一个模型输出。


2.Parameter Server的一些机制

下面我们看下Parameter Server是怎么解决这个问题。首先看下PS的总体架构,PS是由client和server组成的,client对应于上文的worker,负责计算。server是负责统一所有的client它们的参数,server间是联通的。 
如下图: 
这里写图片描述 
总体来看,PS的优势是通过server来协同client的输出,如上一节的下山问题,PS可以协同每一个client按照一个方向直线下山,从而提高了效率。而这其中也有很多的技术细节需要考虑。

1).并行化设计 
PS可以运用很多并行化的思想从而提高效率。 
(1)首先在client端,计算和上传数据是采用的多线程机制,计算和数据传输在不同的线程中进行从而增加了效率。同时server并不是等待所有参数都上传完成,才向下分发的。如果一个client_a计算比较慢,server可以暂时不采用client_a的数据,而采用历史数据。 
(2)数据上传也可以用树状结构代替直接上传,在client和server之间增加一层树状结构可以提高数据传输效率,节约server的处理资源。可以从下图的左边,变为右边。 
这里写图片描述

2).pull和push机制 
首先,是在client端应该上传怎样的数据,因为每个client节点都会不停的接受和反馈数据给server,那么到底应该push怎样的数据上去呢?这个一般来讲是选择步长最长的参数,也就是最大的梯度值的参数push上去。

3).server端的异构形式 
因为每个client只处理一部分参数,server端需要将这些参数拼接起来,所以server端是一个异构的组成形式。 
这里写图片描述


3.Parameter Server处理LR

上面讲了很多PS的机制,这里具体说一下PS怎么实现LR。因为LR的输出是一个线性的回归模型。输出的结果是下面的这种式子: 
z=w1*x1+w2*x2…..+w10*x2+…. 
我们要求的是里面的w1,w2,w3….这些参数,在PS中每个client计算的是其中的某些△w。通过server将这些△w同步上去,然后再push下去继续迭代计算。这样的好处是对于梯度问题,每个client可以沿着一个方向走。 
这里写图片描述


后话:我的理解还很浅,具体实现还有非常多的技术细节要敲定,部署在集群上也会出现各种问题,如:log怎么输出,有的client挂了怎么办等等。建议有空可以看下李沐的开源项目的代码,还有上面提到的一些文档。

本文来自博客 “李博Garvin“ 
转载请标明出处:http://blog.csdn.net/buptgshengod]

转载于:https://www.cnblogs.com/zhizhan/p/4803471.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/459760.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iOS开发多线程篇—线程安全

iOS开发多线程篇—线程安全 一、多线程的安全隐患 资源共享 1块资源可能会被多个线程共享,也就是多个线程可能会访问同一块资源 比如多个线程访问同一个对象、同一个变量、同一个文件 当多个线程访问同一块资源时,很容易引发数据错乱和数据安全问题 示例…

Android Ion 框架 文件下载

为什么80%的码农都做不了架构师?>>> ion是的一个安卓异步网络和图片加载库。 特性 异步下载:下载图片 (用ImageViews 或者 Bitmaps显示);下载JSON文件 (通过Gson解析);下载字符串;下载文件;Flu…

CSS基础----元素分类

2019独角兽企业重金招聘Python工程师标准>>> 块级元素特点: 1、每个块级元素都从新的一行开始,并且其后的元素也另起一行。 2、元素的高度、宽度、行高以及顶和底边距都可设置。 3、元素宽度在不设置的情况下,是它本身父容器的100…

Linux 高可用(HA)集群之keepalived

一、keepalived介绍1、Keepalived 定义Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以利用其来避免单点故障。一个LVS服务会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器&#…

java 将要死亡_人在即将死亡的时候,能意识到自己将要死亡了吗?科学家给出答案...

引言:自然界内大多数生物都敬畏生命,也害怕死亡。毕竟,死亡意味着结束与告别,将死之人多会留恋世间的人或事。那么,在临死之前,人会意识到自己将走向死亡吗?人类对长生不老的追求古已有之&#…

C#开发微信门户及应用(24)-微信小店货架信息管理

C#开发微信门户及应用(24)-微信小店货架信息管理 原文:C#开发微信门户及应用(24)-微信小店货架信息管理在前面微信小店系列篇《C#开发微信门户及应用(22)-微信小店的开发和使用》里面介绍了一些微信小店的基础知识,以及《C#开发微信门户及应用(23)-微信小店商品管理…

【百度地图API】——如何用label制作简易的房产标签

【百度地图API】——如何用label制作简易的房产标签 原文:【百度地图API】——如何用label制作简易的房产标签摘要: 最近,API爱好者们纷纷说,自定义marker太复杂了!不仅定义复杂,连所有的dom事件都要自己重新定义。有没…

【svn】设置过滤文件

2019独角兽企业重金招聘Python工程师标准>>> .classpath target .project .settings *.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo *.rej *~ #*# .#* .*.swp .DS_Store 转载于:https://my.oschina.net/sourcecoding/blog/509169

php开启错误日志,PHP开启error_log 错误日志

对于一些访问没有明显错误提示的PHP页面,我们可以通过error_log来做进一步的判定。但出于种种原因,有些服务器并没有开启PHP的error_log功能。可以暂时开启一下错误日志:编辑php.ini,将log_errors设置为on:log_errors …

unity3d-小案例之角色简单漫游

准备资源 我这里从网上下载一个角色模型,里面有一组动画。有站立、奔跑、杀怪等 我们来实现角色的前后左后移动,即键盘上的WSDA键,这里因为没有行走的动画。索性就用奔跑代替了!! 暂时先不计较代码冗余的情况。因为我也…

PopupWindow在项目中的使用 并指定位置及加入动画效果

2019独角兽企业重金招聘Python工程师标准>>> 项目做到一期收尾阶段,突然要用到弹出窗口,于是自然而然的就想起了PopupWindow这个组件了,才发现平时用的少,对这个组件几乎是完全无知的状态啊。 于是恶补一番 现在放出学…

php 图片无法删除,php如何删除上传的图片

php删除上传的图片的方法:首先检查上传文件是否在允许上传的类型;然后获取图片的完整路径;最后通过“unlink(“uppic/”.$img);”方法删除图片即可。简单的PHP上传图片和删除图片示例代码分享一例简单的PHP上传图片和删除图片示例代码&#x…

贝克汉姆-囚

转载于:https://www.cnblogs.com/andyxl/p/4215954.html

Androida规划nt打包

1.准备工作 (1)首先安装好ant工具 (2)生成keystore 在jdk的bin文件夹下 输入keytool -genkey -alias android.keystore -keyalg RSA -validity 20000 -keystore android.keystore 按操作输入就可以,记住password。 &am…

[树结构]平衡二叉树AVL

平衡二叉树是一种二叉排序树,其中每一个节点的左子树和右子树的高度至多等于1,平衡二叉树又称为AVL树。 将二叉树节点的左子树深度减去右子树深度的值称为平衡因子BF,平衡二叉树上所有节点的平衡因子只可能是-1,0或者1。 距离插入点最近的&am…

发布《Linux工具快速教程》

发布《Linux工具快速教程》 阶段性的完成了这本书开源书籍,发布出来给有需要的朋友,同时也欢迎更多的朋友加入进来,完善这本书; 本书Github地址:https://github.com/me115/linuxtools_rst 在线阅读 缘起 Linux下有很多…

linux 部署php svn,Linux服务器搭建svn环境方法详解

下面由Linux教程栏目给大家介绍Linux服务器搭建svn环境的方法,希望对需要的朋友也是帮助!1、安装svn服务端sudo apt-get install subversion2、安装svn在ubuntu的本地客户端sudo apt-get install libapache2-svn3、在根目录home下面建一个文件夹svn&…

pfsense 2.2RC版本应用

为什么要上RC版本呢?因为华硕主板有一个RTL8111G驱动在2.15中还没有识别。。。。 公司双线WAN,一个PPPOE一个静态IP。 开了端口转发, 要求对不同的IP进行相关限速, 到达指定网站用固定IP, 两根线带宽均衡使用。 相关设…

我的Android进阶之旅------Android利用温度传感器实现带动画效果的电子温度计

要想实现带动画效果的电子温度计,需要以下几个知识点:1、温度传感器相关知识。2、ScaleAnimation动画相关知识,来进行水印刻度的缩放效果。3、android:layout_weight属性的合理运用,关于android:layout_weight属性的讲解&#xff…

mybatis中的#和$的区别

为什么80%的码农都做不了架构师?>>> 1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是…