分布式机器学习第3章——分布式机器学习框架

Posted 小卢的成长见证

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分布式机器学习第3章——分布式机器学习框架相关的知识,希望对你有一定的参考价值。


Q:并行化、分布式机器学习技术主要研究的是什么?
1.如何划分训练数据
2.分配训练任务
3.调配计算资源
4.整合分布式的训练结果
目的是达到训练速度和训练精度的完美平衡

Q:需要使用到分布式机器学习有哪三种情形?
1.计算量太大
2.训练数据太多
3.模型规模太大

Q:对于计算量太大时的分布式机器学习解决办法:
基于共享内存(或虚拟内存)的多线程或多机并行运算

Q:对于训练数据太多时的分布式机器学习解决办法:
对数据进行划分,并分配到多个节点上进行训练,每个工作节点根据局部数据训练出子模型后,按照一定规律和其它工作节点进行通信(主要是子模型参数或参数更新),以保证最终有效整合各个工作节点的结果并得到全局的机器学习模型

Q:对于模型规模太大时的分布式机器学习解决办法:
对模型进行划分,由于模型并行框架下的各个子模型之间的依赖非常强,所以对通信的要求极高

Q:目前分布式机器学习领域的主要矛盾是?
由于训练数据量过大导致的训练速度慢,所以采用数据并行是最常见情形

Q:分布式机器学习的主要组成模块有哪四个?
1.数据与模型划分模块
2.单机优化模块
3.通信模块
4.数据与模型聚合模块

Q:分布式机器学习对数据划分的两个操作角度是什么?
1.对训练样本进行划分
2.对每个样本的特征维度进行划分

Q:分布式机器学习的数据划分中,对训练样本进行划分的两种做法是什么?
1.基于随机采样
2.基于置乱切分

Q:分布式机器学习的数据划分中,对训练样本进行划分的随机采样方法是怎么做的?
把原训练集作为采样的数据源,通过有放回的方式进行随机采样,然后按照每个工作节点的容量为其分配相应数目的训练样本

Q:分布式机器学习的数据划分中,对训练样本进行划分的随机采样方法的目的是什么?
能保证每台机器上的局部训练数据与原数据是独立同分布的,训练效果有理论保证

Q:分布式机器学习的数据划分中,对训练样本进行划分的随机采样方法的两个弊端是什么?
1.训练数据量大,导致全局采用的代价比较高
2.低频的训练样本很难被选出来,没有充分利用样本数据

Q:分布式机器学习的数据划分中,对训练样本进行划分的置乱切分方法是怎么做的?
将训练数据乱序排列,然后按照工作节点的个数将打乱后的数据顺序划分成相应的小份,随后将这些小份数据分配到各个工作节点上。每个工作节点在进行模型训练的过程中,只利用分配给自己的局部数据,并且定期地(如完成一个完整的训练周期)将局部数据再打乱一次。到一定阶段,还可能需要再进行全局的数据打乱和重新分配。

Q:分布式机器学习的数据划分中,对训练样本进行划分的置乱切分方法的目的是什么?
让各个工作节点上的训练样本更加独立并具有更加一致的分布,以满足机器学习算法对训练数据独立同分布的假设。
当然即使真的定期进行了局部和全局的乱序操作,数据打乱等价或者接近于无放回的随机采样,而独立同分布的假设则暗示着有放回的随机采样。

Q:分布式机器学习的数据划分中,对特征维度的划分是怎样的?
假设训练数据是以d维向量的方式给出的,将这d维特征顺序切分成K份,然后把每份特征对应的子数据集分配到K个工作节点上。
注意该方法需要与特定的优化方法(如坐标下降法)配合使用,否则如果优化算法需要同时利用分配到不同工作节点的多个维度,就会带来很大的通信代价。

Q:分布式机器学习的模型划分做法是怎样的?
将机器学习模型切分成若干子模型(一部分模型参数对应于一个子模型),然后把每个子模型放在一个工作节点上进行计算。
如此划分的子模型之间会有一定的依赖关系,并且不同的子模型划分方法会影响到各个工作节点之间的依赖关系和通信强度。

Q:分布式机器学习的对线性模型进行划分的结构特点是什么?
对线性模型进行划分的时候,可以直接针对不同的特征维度进行划分,与基于维度的数据划分相互配合。

Q:分布式机器学习的对深层神经网络进行模型划分的3种方式是什么?
1.逐层的横向划分
2.跨层的纵向划分
3.随机的模型划分

Q:分布式机器学习对深层神经网络进行横向的模型划分的优缺点是什么?
优点:接口清晰、实现简单
缺点:受到层数限制,并行度不够高,并且在极端情况下,单层的模型参数可能已经超出了一个工作节点的能力

Q:分布式机器学习对深层神经网络进行纵向的模型划分的优缺点是什么?
优点:可以将模型切分成更多份
缺点:各子模型之间的依赖关系会更加复杂,实现难度更大,并且通信代价较高

Q:神经网络中的骨架网络是什么?
神经网络具有一定的冗余性,给定一个神经网络,往往存在一个规模更小的网络可以达到与其类似的函数你和效果。这个小网络成为骨架网络。

Q:分布式机器学习对深层神经网络进行随机的模型划分是怎么做的?
即把骨架网络存储于每个工作节点,此外,各个工作节点互相通信的时候,还会随机传输一些属于非骨架网络的神经元参数,从而起到探索原网络全局拓扑结构的作用。
骨架网络的选择可以是周期性更新的,对全局拓扑结构的探索也是动态、随机的。这样可以显著减小模型并行的通信代价,而且理论上对于模型并行的效果也有一定的保证。

Q:分布式机器学习的单机优化模块的作用是什么?
完成数据或模型划分之后,每个工作节点只需要根据分配给自己的局部训练数据和子模型来进行训练。

Q:分布式机器学习的通信模块的作用是什么?
当单机优化模块利用局部数据求得了本地模型的更新以后,就会涉及多机、多线程协作的问题,因为只有信息共享,才能把各个工作节点有机地组合在一起。要实现多机协作,就需要通信。

Q:分布式机器学习的通信模块的通信内容有哪三种?
1.子模型或子模型的更新(如梯度)
2.重要的样本(如支持向量机中的支持向量)
3.计算的中间结果(某个子模型的输出是另外一个模型输入)

Q:分布式机器学习的通信模块的有哪三种通信拓扑结构?
1.基于迭代式MapReduce的通信拓扑
2.基于参数服务器的通信拓扑
3.基于数据流的通信拓扑

Q:MapReduce中的Map和Reduce的作用是什么?
Map:完成数据分发和并行处理
Reduce:完成数据的全局同步和聚合

Q:迭代式的MapReduce的实现方式及优点?
1.完全基于内存实现,大大缩减了计算过程中的I/O代价。
2.引入永久性存储,以适应机器学习任务中数据的多次迭代
3.仍然保留经典MapReduce的拓扑结构和编程模式,可利用现有的系统简单高效地完成分布式机器学习任务。

Q:迭代式的MapReduce的两个弊端是什么?
1.运算节点和模型存储节点没有很好的逻辑隔离,只支持同步的通信模式:即只有当所有的Mapper都完成任务后才能进入Reduce过程,反之亦然
2.需要对已有的单机优化算法进行较大的改动,才能完全符合Map和Reduce的编程接口

Q:目前较广泛应用的迭代式MapReduce系统有哪3个?
1.Spark MLlib
2.Vowpal Wabbit
3.Cloudera

Q:基于参数服务器的通信拓扑是怎样的?
参数服务器(parameter Server)的构架把工作节点和模型存储节点在逻辑上区分开,因此可以更加灵活地支持各种不同的通信模式。
各个工作节点负责处理本地的训练数据,通过参数服务器的客户端API与参数服务器通信,从而从参数服务器获取最新的模型参数,或者将本地训练产生的模型更新发送到参数服务器上。

Q:基于参数服务器的通信拓扑的好处有哪两个?
1.参数服务器将各个工作节点之间的交互过程隔离开,取而代之的是工作节点与参数服务器之间的交互。因此,计算快的节点可以不用等待计算比较慢的节点,从而取得更高的加速比。
2.可以采用多个参数服务器来共同维护较大的模型。模型参数会被划分到多个参数服务器上进行存储,工作节点对全局参数的访问会被拆分开来,分别提交到不同的参数服务器上。可以平衡负责、提高通信的效率。

Q:目前影响力较大的参数服务器系统有哪3个?
1.CMU的Parameter Server和Pletuum
2.谷歌的DistBelief
3.微软的Multiverso

Q:基于数据流的通信拓扑是怎样的?
在数据流系统中,计算被描述成一个有向无环图。图中每个节点进行数据处理或者计算,图中的每条边代表数据的流动。当两个节点位于两台不同的机器上时,它们之间便会进行通信。

Q:基于数据流的通信拓扑中的数据流系统中,每个节点有哪两个通信通道?
1.控制消息流
2.计算数据流

Q:基于数据流的通信拓扑中的数据流系统中,计算流的作用是什么?
主要负责接收模型训练时所需要的数据、模型参数等,再经过工作节点内部的计算单元,产生输出数据(这里的数据可以是中间计算结果,也可以是参数更新),按需提供给下游的工作节点。

Q:基于数据流的通信拓扑中的数据流系统中,控制消息流的作用是什么?
决定了工作节点应该接收什么数据,接收的数据是否已经完整,自己所要做的计算是否完成,是否可以让下游节点继续计算等。
在工作节点定义时,需要指定工作节点的状态转换流程,从而在需要的时候生成一些信息,通过控制消息流通知后续节点准备进入消息接收和计算的状态。

Q:目前影响力较大的基于数据流的系统是什么?
谷歌的Tensorflow

Q:基于同步通信的算法有哪些?
1.基于BSP的随机梯度下降法(BSP-SGD)
2.模型平均法
3.ADMM
4.弹性平均随机梯度下降法(EA-SGD)

Q:通信的步调中同步通信方式的局限性有哪两个?
1.当各个工作节点的计算性能显著不同时,全局的计算速度会被哪些比较慢的节点拖累。
2.当有些工作节点不能正常工作时(如系统死机),整个集群的计算将无法完成,会导致最终分布式学习任务的失败。

Q:通信的步调中的异步通信是怎么做的?
每个工作节点在完成一定量的本地模型训练之后不需要等待其他节点,而是直接将自己的阶段性训练结果(如本地模型或模型更新)推送到参数服务器上,随即继续本地的模型训练(在需要的时候,会从参数服务器上拿回最新的全局模型,作为本地训练的起点)
参数服务器在逻辑上隔离了各个工作节点,使得即便个别工作节点速度慢或出现故障也不会对整体的学习过程产生太大影响。

Q:有锁的异步通信是怎样的?
指虽然各个工作节点可以异步地进行本地学习,但是当它们把局部信息写入全局模型时,会通过加锁来保证数据写入的完整性,但这样可能会限制系统在参数更新方面的吞吐量。

Q:无锁的异步通信是怎样的?
在工作节点讲局部信息写入全局模型时,不保证数据的完整性,以换取更高的数据吞吐量。

Q:目前基于异步通信的算法有哪些?
1.异步随机梯度下降法(ASGD)
2.HogWild!
3.Cyclades

Q:异步通信的"延迟"表现和原因是什么?
原因:各个工作节点没有同步,它们的步调可能会相差很大。
表现:如某个节点速度很快在全局模型的基础上训练了100轮,另一个节点只训练了1轮,此时后者把模型或更新写入全局模型的时候可能会严重影响全局模型的收敛速度

Q:对异步通信的延迟问题的解决方法有哪些?
1.对延迟不敏感的异步通信方法:AdaptiveRevision和AdaDelay
2.从本质上补偿延迟的异步通信方法,如带有延迟补偿的异步随机梯度下降法(DC-ASGD)

Q:半同步(SSP)的基本思想是什么?
当最快和最慢的工作节点的始终周期相差(延迟)不太大的时候,工作节点各自异步地进行训练;而当系统检测到延迟过大的时候,会要求最快的工作节点停下手边的工作等待较慢的节点,知道延迟小于某个阈值之后,才允许最快的节点继续工作。

Q:混合同步方法是什么?
将工作节点按照某种准则进行分组,组内的节点之间采用同步通信的模式,而组间则采用异步的通信模式。

Q:在当前的参数空间下尽量减少要发送的数据量的方法有哪些?
1.模型压缩,如对模型矩阵作低秩分解
2.模型量化,如对模型参数进行低精度量化(如一比特量化),或者对模型参数进行随机丢弃(weighted dropout)

Q:数据与模型聚合模块获得全局模型的两个方法是什么?
1.对模型参数进行简单平均来获得全局模型,也可以通过解一个一致性优化问题来获得全局模型(如ADMM,BMUF)
2.通过模型集成(ensemble)来获得全局模型

Q:模型聚合时是否所有的子模型都需要被聚合,理由是什么?
不需要
1.从全局模型的精度出发,如果某些本地模型(或其更新)有明显的延迟,那么把这样的模型聚合起来可能影响全局模型的最终质量。
2.从分布式机器学习的效率出发,如果某些工作节点速度比较慢,等待它们的子模型可能会拖垮整个学习过程,不过跳过它们而只对那些响应速度比较快的工作节点的子模型进行聚合。如带有备份工作节点的同步随机梯度下降法以及异步ADMM

Q:参数服务器将聚合出来的全局模型推送回每个工作节点时,工作节点的两种做法是什么?
1.无条件信任全局模型,并在其基础上利用本地数据继续迭代下去
2.部分信任全局模型,只在一定概率上利用全局模型来更新本地模型。如:弹性平均随机梯度下降法(EA-SGD)

Q:三种典型分布式机器学习系统的灵活性比较:迭代式MapReduce的Spark MLlib、参数服务器的Multiverso、数据流的Tensorflow
1.MapReduce的灵活度最低,需要遵从系统的特殊执行流程,即Map+Reduce步骤
2.参数服务器灵活度最高,因为它只提供了全局存储的服务器和访问全局存储的API,对分布式程序自身执行的流程以及具体的运算都没有作要求
3.数据流系统灵活度居中,因任务需描述成DAG的形式,比MapReduce还是要灵活

Q:三种典型分布式机器学习系统的运行效率比较:迭代式MapReduce的Spark MLlib、参数服务器的Multiverso、数据流的Tensorflow
1.基于同步逻辑的MapReduce效率较低
2.基于异步通信逻辑的参数服务器或者数据流的系统会好一些
决定系统效率的还有系统的实现方式、编程语言、网络通信库和架构等

Q:三种典型分布式机器学习系统的处理的任务比较:迭代式MapReduce的Spark MLlib、参数服务器的Multiverso、数据流的Tensorflow
1.Spark MLLib支持的机器学习方法一般都采用比较千层的模型,如逻辑回归、LDA、矩阵分解等
2.TensorFlow提供了很多矩阵运算的算子和优化器,可以让用户自由搭建深度学习这类比较复杂的计算模型
3.Multiverso对于单机学习过程没有限制,可支持所有类型的学习任务,当然需要用户自己实现机器学习算法

Q:三种典型分布式机器学习系统的用户使用比较:迭代式MapReduce的Spark MLlib、参数服务器的Multiverso、数据流的Tensorflow
1.Spark MLlib和Tensorflow比较完善,与之配套的上下游工具比较丰富,如数据IO、执行引擎、数据预测等。
2.Multiverso通过python绑定,对不同算法也有较好的支持,不过由于生态系统相对薄弱,需要用户自己建立其它配套功能

以上是关于分布式机器学习第3章——分布式机器学习框架的主要内容,如果未能解决你的问题,请参考以下文章

TensorFlow机器学习:如何正确的掌握Google深度学习框架TensorFlow(第二代分布式机器学习系统)?

绪论

绪论

机器学习资料《分布式机器学习算法理论与实践》+《白话机器学习算法》+《Python机器学习基础教程》

机器学习中的概率模型和概率密度估计方法及VAE生成式模型详解之四(第2章)

一个高效易用的分布式机器学习框架