我是靠谱客的博主 无辜朋友,最近开发中收集的这篇文章主要介绍分布式机器学习1、Why分布式2、分布式计算的类型3、分布式计算中的计算部分4、分布式计算中的通信部分5、几种分布式机器学习框架的介绍,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

分布式机器学习

  • 1、Why分布式
  • 2、分布式计算的类型
  • 3、分布式计算中的计算部分
  • 4、分布式计算中的通信部分
  • 5、几种分布式机器学习框架的介绍
    • 5.1 MapReduce
    • 5.2 Parameter Server

参考文献: B站上面Shusen Wang的课程

这部分内容对于分布式机器学习入门来说,非常适合~~~~清楚简洁!

1、Why分布式

(1)数据越来越多,模型越来越复杂,一台机器的性能有限,多台机器同时运行节省时间;
(2)数据私密性:把所有数据集中在一个中心进行处理会侵犯个人隐私。

2、分布式计算的类型

  • 模型并行:由于网络参数量的巨大或者是网络中不同结构的计算方式不同(比如说CNN网络中的全连接层和卷积层),网络的不同部分的参数被分配给不同的计算节点去执行,比如说可以将网络分层部署在不同的节点中;
    模型并行

  • 数据并行:不同的计算节点之间分配到的数据不同,但模型相同。不同节点在本地数据集上对模型进行优化迭代,最终所有节点的计算结果以指定的方式被融合;
    数据并行

  • 混合并行:简单的混合并行常常被应用在数据并行的架构中,通过对每个计算节点进行多GPU的配置,在单节点中将神经网络模型拆解到多个处理器中完成。而更为复杂的混合并行框架,如ADMM(Alternating Direction Method of Multipliers)算法,则是从算法的角度将全局优化问题拆分成多个子优化问题,每个计算节点都拥有本地独立的优化模型和本地数据,通过全局参数的一致性来约朿分布式节点之间的参数关系,这种框架适用的优化算法并不局限于深度神经网络。

3、分布式计算中的计算部分

以数据并行为例子,看一下梯度的计算。
比如损失函数: L ( w ) = ∑ i = 1 n ( x i T w − y i ) L(bf{w}) = sum_{i=1}^n ({bf{x}}_i^T {bf{w}} - y_i) L(w)=i=1n(xiTwyi), 一共有n个样本,每个样本的特征是 x ∈ R d bf{x} in mathbb{R}^d xRd,标签是 y ∈ R y in mathbb{R} yR。机器学习要通过梯度下降来求得参数 w bf{w} w
那么,参数 w bf{w} w的梯度为:
g ( w ) = ∂ L ( w ) ∂ w = ∑ i = 1 n ( x i T w − y i ) x i g(bf{w}) = frac{partial L({bf{w}})}{partial bf{w}} = sum_{i=1}^n (x_i^Tw-y_i)x_i g(w)=wL(w)=i=1n(xiTwyi)xi

可以看出,其实梯度可以在样本上单独求,然后再求和。 g ( w ) = ∑ i g i ( w ) g(bf{w}) = sum_i g_i(bf{w}) g(w)=igi(w),其中, g i ( w ) = ( x i T w − y i ) x i g_i(bf{w}) = (x_i^T w - y_i) x_i gi(w)=(xiTwyi)xi是第i个样本在 w bf{w} w处的梯度。 所以是可以将数据分布到各个计算节点去单独求本地的梯度,最后再合成一个整体的梯度的。
还可以看出,这个梯度是 w bf{w} w的函数,而机器学习就是循环迭代的求 w bf{w} w的过程,即:
w t + 1 = w t − α ⋅ g ( w t ) bf{w}_{t+1} = bf{w}_t - alpha cdot g(bf{w}_t) wt+1=wtαg(wt)
因此,如果将训练数据划分到若干个节点上同时计算,当节点计算完本地数据对应的梯度之后,所有的节点都把本地梯度汇集给一个处理中心,处理中心把梯度加起来,就可以得到 t t t时刻总共的梯度 g ( w t ) g(bf{w}_t) g(wt),然后运行参数更新,得到新的参数 w t + 1 bf{w}_{t+1} wt+1,再把新的参数传递给各个计算节点,进行梯度计算。
在这里插入图片描述
以上图为例,假设用两个处理器来并行计算,第一个处理器用了前半部分的数据,计算出了一个梯度 g ~ 1 tilde{g}_1 g~1, 第二个处理器用了后半部分的数据计算出了梯度 g ~ 2 tilde{g}_2 g~2,那么两者加起来就是总的梯度,这样理论上就可以节省一半的时间同时来求梯度了。

但实际上,因为需要将计算结果传输,因此有通信开销。分布式计算中的通信是很重要的部分。

4、分布式计算中的通信部分

大部分分布式计算采用的通信方式:message passing。节点之间把要传输的信息打包成package,然后进行传输。
在这里插入图片描述
有两种通信架构:

  • 中心化的通信架构:在中心化的通信架构中,一般都具有一个中心节点,这个中心节点和每个非中心节点之间都有双向的通信链路,节点之间只能通过中心化的链路进行通信。通常在这类架构中,中心节点充当着中心服务器的作用,负责模型参数的融合、更新和分发以得到全局模型的收敛。

在这里插入图片描述

  • 非中心化的通信架构:在非中心化的通信架构中,并不具有中心节点,网络中的节点的地位是等效的,节点和节点之间互相进行数据的传输。由于通信链路的非中心化分布,这类架构可以降低中心的通信阻塞造成的瓶颈,由于每个节点只能与邻接节点通信,虽然节点之间单次通信的时延会得到降低,但全局模型的收敛所需的通信次数往往要高于中心化的架构。
    在这里插入图片描述

5、几种分布式机器学习框架的介绍

5.1 MapReduce

特点:中心化的架构、同步通信

在这里插入图片描述
基于MapReduce的并行梯度下降:

  1. 广播:Server广播当前时刻的参数 w t bf{w}_t wt
  2. Map:Worker利用参数 w t bf{w}_t wt,结合本地的数据,计算本地的梯度 g ~ k tilde{g}_k g~k
  3. Reduce: Worker将本地的梯度传递给Server
  4. Server计算全局梯度 g = ∑ k g ~ k g = sum_k tilde{g}_k g=kg~k, Server按照梯度下降更新参数 w t + 1 bf{w}_{t+1} wt+1

在这里插入图片描述
注意到,如果采用m个并行的worker,那么运行时间不会降低到理论值 1 m frac{1}{m} m1,因为有通信和同步的代价。

加速比(评价并行计算的效率提升):下图是采用m个节点并行,得到的实际加速比。节点数目增多时候,因为通信开销提升,所以实际上加速比远小于 m m m了。
在这里插入图片描述

通信代价:
包括通信复杂度和网络延迟。
-通信复杂度:传输的参数越少越好,工作节点越少通信复杂度越低;
-网络延迟:与网络状态有关
在这里插入图片描述
同步代价:
在这里插入图片描述

5.2 Parameter Server

特点:中心化的架构、异步通信
在这里插入图片描述
在这里插入图片描述

对比一下同步和异步
在这里插入图片描述

在这里插入图片描述
异步的梯度下降:
Worker:

  1. 从Server获得参数 w bf{w} w
  2. 利用本地数据和 w bf{w} w计算梯度 g ~ i tilde{g}_i g~i
  3. 把梯度 g ~ i tilde{g}_i g~i传递给Server
    在这里插入图片描述
    Server:(不等待所有的worker都计算完)
    监听worker的需要,如果worker需要当前的参数,就传递给他;
    如果worker给他发送梯度,就接收并更新参数。

在这里插入图片描述
实际中异步算法效率更高。

最后

以上就是无辜朋友为你收集整理的分布式机器学习1、Why分布式2、分布式计算的类型3、分布式计算中的计算部分4、分布式计算中的通信部分5、几种分布式机器学习框架的介绍的全部内容,希望文章能够帮你解决分布式机器学习1、Why分布式2、分布式计算的类型3、分布式计算中的计算部分4、分布式计算中的通信部分5、几种分布式机器学习框架的介绍所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(31)

评论列表共有 0 条评论

立即
投稿
返回
顶部