Angel是腾讯开源的一个分布式机器学习框架。是一个PS模式的分布式机器学习框架。

https://github.com/Angel-ML/angel   这是github地址。

我了解的分布式机器学习概述:

对于分布式机器学习,有些简单的了解,听过一些概念。最近正在看《分布式机器学习 算法、理论与实践》这本书,我觉得这本书很不错。一下内容也是我的一个读书总结。

分布式机器学习分为 数据和模型划分模块,单机优化模块,通信模块,数据和模型的聚合模块。

分布式机器学习从并行方式来说分为数据并行和模型并行。数据并行是指训练数据规模太大,无法存储在一个节点上,需要把这些数据分配到各个机器上。

数据划分的方式分为对训练样本进行划分和对每个样本的特征维度进行划分。

对训练样本进行划分也分为随机采样法和基于置乱切分的方法。随机采样法是通过有放回抽样,根据每个节点的容量为期分配相应的样本数。这种方式可以保证每个节点的局部数据和整体数据是独立同分布的。但是这么做也有弊端就是如果数据量大,代价比较高。另一个是某些低频的样本可能会在抽样的过程中被遗漏。

另一种是根据基于置乱切分的方法,也就是将样本乱序排列,然后根据每个节点机器的容量,为其分配相应数量的样本。这个方法实现简单,效率相对较高。每个节点在训练的时候仅适用本地数据。在训练一定轮数之后也可以再重新合并数据,重新划分一次。这种方式无限等价于无放回抽样,但是独立同分布的假设是等价于有放回抽样。但是这种方式应该是实际使用比较多的方式。

模型并行,主要是指模型如何在分布式环境下进行并行,是一个节点上包含整个模型还是每个节点只包含一部分模型。主要是线性模型的并行和神经网络的并行。在Angel1.5的LR和FM中模型是保存在参数服务器,每次节点从参数服务器获取所需的一部分参数,在需要更新参数时候将更新的部分推送到参数服务器。深度模型的话一般可以按网络的层次进行划分。

对于分布式机器学习的学习算法,我理解有两种情况。一种是每个节点使用本地的单机机器学习优化算法,然后将各个节点训练的模型进行融合。这种在Angel1.4实现FM LR是这种方式。这种模型融合的方式对于线性模型来说,如果损失函数关于参数是凸函数时,各个部分的模型之间直接加和求平均是比单个模型要好,并且有收敛的理论保证。但是对于神经网络这种就不成立了。另一种是使用分布式机器学习算法,根据各个节点计算的梯度来更新权重。这种我能想到比较直观的就是PS模式,由参数服务器来接受梯度更新模型的参数。

通信部分的话,通信部分按拓扑结构划分,可以分为1、基于迭代Map/Reduce的通信拓扑,比如SparkMLib。优点是可以利用现有的分布式系统,简单高效的完成分布式学习任务。但是运算节点和模型存储节点没有很好的隔离,只能支持同步的通信方式,也就是所有mapper完成之后才开始进入reduce阶段。

2、基于参数服务器的通信拓扑。这种是把工作节点和模型节点分开。工作节点负责处理本地的训练样本,从参数服务器获取最新的参数,或者将参数更新发送到参数服务器。这种的好处是各个工作节点之间不需要保持同步了,工作节点与服务器之间的通信方式更加灵活。多个参数服务器可以分开存储一个较大的模型,每个参数服务器存储模型的一部分。

3、基于数据流的通信拓扑,这种的代表是tensorflow。这种我理解是把模型抽象成一个计算图模型,用一个有向无环图来表示。图中的每个节点表示一个数据处理的算子,边表示数据流动的方向。

Angel 实现FFM 一、对于Angel 和分布式机器学习的简单了解的更多相关文章

  1. Spark MLBase分布式机器学习系统入门:以MLlib实现Kmeans聚类算法

    1.什么是MLBaseMLBase是Spark生态圈的一部分,专注于机器学习,包含三个组件:MLlib.MLI.ML Optimizer. ML Optimizer: This layer aims ...

  2. 分布式机器学习系统笔记(一)——模型并行,数据并行,参数平均,ASGD

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入. 文章索引::"机器学 ...

  3. 微软分布式机器学习工具包DMTK——初窥门径

    在现在机器学习如日中天的大背景下,微软亚洲研究院的实习岗位中,机器学习组的工作也是维护DMTK,参与算法改进,那么在此之前我们得了解DMTK是个啥. DMTK由一个服务于分布式机器学习的框架和一组分布 ...

  4. Adam:大规模分布式机器学习框架

    引子 转载请注明:http://blog.csdn.net/stdcoutzyx/article/details/46676515 又是好久没写博客,记得有一次看Ng大神的訪谈录,假设每周读三篇论文, ...

  5. 分布式机器学习框架:MxNet 前言

           原文连接:MxNet和Caffe之间有什么优缺点一.前言: Minerva: 高效灵活的并行深度学习引擎 不同于cxxnet追求极致速度和易用性,Minerva则提供了一个高效灵活的平台 ...

  6. 8.6.zookeeper应用案例_分布式共享锁的简单实现

    1.分布式共享锁的简单实现 在分布式系统中如何对进程进行调度,假设在第一台机器上挂载了一个资源,然后这三个物理分布的进程都要竞争这个资源,但我们又不希望他们同时 进行访问,这时候我们就需要一个协调器, ...

  7. 分布式机器学习:逻辑回归的并行化实现(PySpark)

    1. 梯度计算式导出 我们在博客<统计学习:逻辑回归与交叉熵损失(Pytorch实现)>中提到,设\(w\)为权值(最后一维为偏置),样本总数为\(N\),\(\{(x_i, y_i)\} ...

  8. 分布式机器学习:同步并行SGD算法的实现与复杂度分析(PySpark)

    1 分布式机器学习概述 大规模机器学习训练常面临计算量大.训练数据大(单机存不下).模型规模大的问题,对此分布式机器学习是一个很好的解决方案. 1)对于计算量大的问题,分布式多机并行运算可以基本解决. ...

  9. 分布式机器学习:模型平均MA与弹性平均EASGD(PySpark)

    计算机科学一大定律:许多看似过时的东西可能过一段时间又会以新的形式再次回归. 1 模型平均方法(MA) 1.1 算法描述与实现 我们在博客<分布式机器学习:同步并行SGD算法的实现与复杂度分析( ...

随机推荐

  1. CEIL与FLOOR

    SQL> SELECT 666.88,CEIL(666.88),FLOOR(666.88) FROM dual;    666.88 CEIL(666.88) FLOOR(666.88)---- ...

  2. Eclipse中将Java项目转换成Web项目的方法(转)

    前言: 用Eclipse开发项目的时候,把一个Web项目导入到Eclipse里会变成了一个java工程,将无法在Tomcat中进行部署运行. 方法: 1.找到.project文件,找到里面的<n ...

  3. 【node】---multer模块实现图片上传---【巷子】

    1.安装muterl第三方模块 cnpm install multer --save 2.使用 multer在解析完成后,会向request对象中添加一个body对象和一个file或者files对象( ...

  4. 查看、关闭登录到linux的终端

    基本概念: tty(终端设备的统称):tty一词源于Teletypes,原来指的是电传打字机,是通过串行线用打印机键盘阅读和发送信息的东西,后来这东西被键盘和显示器取代,所以现在叫终端比较合适.终端是 ...

  5. 170630、springboot编程之普通类中调用spring管理的bean对象

    我们知道如果我们要在一个类使用spring提供的bean对象,我们需要把这个类注入到spring容器中,交给spring容器进行管理,但是在实际当中,我们往往会碰到在一个普通的Java类中,想直接使用 ...

  6. Oracle SQL开发 之 Select语句完整的执行顺序

    查询语句语法: Select 属性 From 表 Where 条件 Group by 分组条件 Having 分组选择条件 Order by 排序条件 1.from子句组装来自不同数据源的数据: 2. ...

  7. MySQL Bugs: #34354: Feature request: EXPLAIN ALTER TABLE https://bugs.mysql.com/bug.php?id=34354

    MySQL Bugs: #34354: Feature request: EXPLAIN ALTER TABLE https://bugs.mysql.com/bug.php?id=34354 [SQ ...

  8. LoadRunner-常用的函数

    LoadRunner中,常用的函数有很多,这里只介绍编写性能测试脚本过程中那些必然用到的函数.本文重点关注这些典型函数的应用场合及注意点,至于函数详细使用说明请参见LoadRunner帮助文档. 1. ...

  9. 【查看】mysql 常规书写注意事项(那些坑)

    mysql 常规书写注意事项,mysql注意事项 1. 注释:  -- 后面一定要加一个空格,否则会报错 2.注释:/*! content */ 在mysql中是会执行的,但是其他数据库不会.   例 ...

  10. android 的 ExpandableListView Example Tutorial

    https://www.journaldev.com/9942/android-expandablelistview-example-tutorial Welcome to Android Expan ...