Angel 实现FFM 一、对于Angel 和分布式机器学习的简单了解

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。这种我理解是把模型抽象成一个计算图模型,用一个有向无环图来表示。图中的每个节点表示一个数据处理的算子,边表示数据流动的方向。

 

      

 

posted @ 2019-03-08 15:42  Earendil  阅读(1159)  评论(0编辑  收藏  举报