分布式机器学习中的数据并行(Data Parallelism)和模型并行(model parallelism)

分布式机器学习中的数据并行(Data Parallelism)和模型并行(model parallelism)

前言:

现在的模型越来越复杂,参数越来越多,其训练集也在剧增。在一个很大的数据集集中训练一个比较复杂的模型往往需要多个GPU。现在比较常见的并行策略有:数据并行和模型并行,本文主要讨论这两个并行策略。

数据并行(Data Parallelism):

在现在的深度学习中,有时候因为数据集太大而无法装在一个节点上,所以我们就会把数据进行划分。

在数据并行中,每一个节点都有一份模型,各个节点取不同的数据(通常是一个batch_size),然后各自完成前向和后向的计算得到梯度,这些计算梯度的进程成为worker,还有一个参数服务器,简称ps server。 worker会将计算得到的梯度送到ps server, 然后 ps server 会按照某种方式进行合并梯度【such as: 所有梯度的加权平均值】, 然后再将得到的梯度传回worker。

缺点: 在这个过程中每一次迭代需要梯度同步,也就是说每一次迭代都要等待所有的worker计算完它的梯度才能进行下一次迭代。

模型并行(model parallelism)

在现在的深度学习中,模型越来越复杂,其层数越来越多、参数也越来越多,有时候无法将一个模型装入一个节点中,所以需要模型并行。

在模型并行中,会将模型分成几个部分,将连续的一些层放入一个节点中,该节点单独计算其梯度。模型并行组的各个卡读取相同的数据。

比如:用10个GPU来训练ResNet50,可以将第一个5层分配给GPU1,第二个5层分配给GPU2,以此类推,最后5层分配给GPU10。那么在模型的训练中,forward阶段:首先是GPU1进行训练,GPU2等待GPU1的输出作为输入进行训练,是一个串行的方式。当forward结束,在GPU10计算梯度并更新参数,然后梯度往后传递给GPU9。每一个节点就像流水线上的产品,等待前一个的输入,并且处理完毕之后将输出送给下一个节点。

缺点:节点之间的通信开销很大。

参考:

Data Parallelism VS Model Parallelism in Distributed Deep Learning Training

分布式训练一(入门介绍)

深度学习中的分布式并行介绍

posted @ 2022-09-29 17:02  EchoZQN  阅读(1492)  评论(0编辑  收藏  举报