分布式机器学习里的 数据并行 和 模型并行 各是什么意思?

论坛 期权论坛 期权     
DeepJet   2018-9-28 00:20   11002   5
尤其是模型并行,求白话解释
分享到 :
0 人收藏

5 个回复

倒序浏览
2#
李哲龙  4级常客 | 2018-9-28 00:20:06
很巧这个问题出现在我的推荐上,一打开知乎就看到,遂答一发。
首先说下为什么要并行,众所周知目前的深度学习领域就是海量的数据加上大量的数学运算,所以计算量相当的大,训练一个模型跑上十天半个月啥的是常事。那此时分布式的意义就出现了,既然一张GPU卡跑得太慢就来两张,一台机器跑得太慢就用多台机器,于是我们先来说说数据并行,放张网上copy的图


在上面的这张图里,每一个节点(或者叫进程)都有一份模型,然后各个节点取不同的数据,通常是一个batch_size,然后各自完成前向和后向的计算得到梯度,这些进行训练的进程我们成为worker,除了worker,还有参数服务器,简称ps server,这些worker会把各自计算得到的梯度送到ps server,然后由ps server来进行update操作,然后把update后的模型再传回各个节点。因为在这种并行模式中,被划分的是数据,所以这种并行方式叫数据并行。
然后呢咱们来说说模型并行,深度学习的计算其实主要是矩阵运算,而在计算时这些矩阵都是保存在内存里的,如果是用GPU卡计算的话就是放在显存里,可是有的时候矩阵会非常大,比如在CNN中如果num_classes达到千万级别,那一个FC层用到的矩阵就可能会大到显存塞不下。这个时候就不得不把这样的超大矩阵给拆了分别放到不同的卡上去做计算,从网络的角度来说就是把网络结构拆了,其实从计算的过程来说就是把矩阵做了分块处理。这里再放一张网上盗的图表示下模型并行:


最后说说两者之间的联系,有的时候呢数据并行和模型并行会被同时用上。比如深度的卷积神经网络中卷积层计算量大,但所需参数系数 W 少,而FC层计算量小,所需参数系数 W 多。因此对于卷积层适合使用数据并行,对于全连接层适合使用模型并行。 就像这样:


关于这个更多地可以参考这篇博客,说的挺详细的卷积神经网络的并行化模型--One weird trick for parallelizing convolutional neural networks
3#
Menooker  4级常客 | 2018-9-28 00:20:07
数据并行就是把train set分布给不同的worker,每个worker通过缓存在本地的,分配到的数据集来更新一个共有的parameter,比如mini-batch中每个worker随机从本地数据集中选出一个batch,更新parameter。 关键点在于如何管理共有的paramter,比如有经典的ps和petuum 的ssp改进。petuum的bosen就是这种数据并行方式。

模型并行我只有大体的了解。比如一个model有1000维的parameter,那么通过某种算法让10个worker中的每个只负责10维的parameter的更新。 petuum的strads是模型并行的。

最后安利下我自己的基于c++分布式平台Dogee,使用DSM模型,管理本地内存数据和管理分布式内存一样简单
http://github.com/Menooker/Dogee
4#
周健  1级新秀 | 2018-9-28 00:20:08
数据并行是把训练数据分成多份,在不同机器训练,然后参数更新到parameter server;
模型并行会把模型分区,分配到不同的机器分别运行(按功能,层次),因为参数间存在依赖关系,需要调度器;


之前看到的一篇文章的一个比喻:
如果要修两栋楼,有一个工程队,怎么操作?第一个方案是将人分成两组,分别盖楼,盖好了就装修;第二种做法是一组人盖楼,等第一栋楼盖好,另一组装修第一栋,然后第一组继续盖第二栋楼,改完以后等装修队装修第二栋楼。乍一看,第二种方法似乎并行度并不高,但第一种方案需要每个工程人员都拥有“盖楼”和“装修”两种能力,而第二个方案只需要每个人拥有其中一种能力即可。第一个方案和数据并行类似,第二个方案则道出了模型并行的精髓。
5#
Alan  5级知名 | 2018-9-28 00:20:09
明天考试正好也刚看完……首答的答主咱们是校友吗?
简而言之核心思想是当单机性能瓶颈的时候通过多台机器来分担工作量(也就是现在云计算平台的思路了)
Model Parallelism:



当模型巨大,单机内存不足的时候,将计算工作 partiton,同一个大模型的不同部分交给不同机器负责(比如多层网络的各个节点),这样就会有很大的通信开销。(通常 Model parallelism 的定义不包括 data partition 但实际上很多框架都同时也有 data parallelism 的思想)

Data Parallelism:



当数据巨大的时候,通过网络来回搬运全部数据到多台机上工作是不现实的,因此我们可以将数据分片,让不同的机器运算不同的数据分片,然后对所求目标进行收集处理,这就需要一个 sever 来完成这步工作。这种 parameter server 可以是 average 也可以是 update-based 的。
6#
沧海一粟  5级知名 | 2018-9-28 00:20:10
早上刚刚看到。数据并行是指对训练数据做切分,同时采用多个模型实例,对多个分片的数据并行训练。要完成数据并行需要做参数交换,通常由一个参数服务器(Parameter Server)来帮助完成。在训练的过程中,多个训练过程相互独立,训练的结果,即模型的变化量ΔW需要汇报给参数服务器.数据并行有同步模式和异步模式之分。
模型并行将模型拆分成几个分片,由几个训练单元分别持有,共同协作完成训练。当一个神经元的输入来自另一个训练单元上的神经元的输出时,产生通信开销。多数情况下,模型并行带来的通信开销和同步消耗超过数据并行,因此加速比也不及数据并行。但对于单机内存无法容纳的大模型来说,模型并行是一个很好的选择
数据并行的训练程序太多时,不得不减小学习率,以保证训练过程的平稳;模型并行的分片太多时,神经元输出值的交换量会急剧增加,效率大幅下降。因此,同时进行模型并行和数据并行也是一种常见的方案。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:
帖子:
精华:
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP