分布式训练

9.1为什么分布式训练越来越流行

随着时代的发展,深度学习被应用到许多领域,包括计算机视觉,语言理解,语言识别以及广告推荐等。这些领域的共同特点是,模型越来越大。但是随着规模的扩大,对硬件的提出更高的要求。然而对于单一设备,由于处理器与内存之间的不匹配,也就是内存墙限制。为了处理这个问题,人们采用多节点集群进行分布式训练。下面是部分采用分布式训练的模型。

  1. Transformer:Transformer 是一种用于自然语言处理任务的重要模型,如机器翻译和语言模型。由于 Transformer 模型的计算和参数量庞大,通常需要分布式训练来加速优化过程。

  2. ResNet:ResNet 是一个非常深的卷积神经网络模型,用于图像分类和目标检测等计算机视觉任务。对于较深的 ResNet 模型,采用分布式训练可以减少训练时间和资源消耗。

  3. GPT-3:GPT-3 是一种非常大的自然语言处理模型,具有数十亿个参数。为了处理如此大规模的模型,GPT-3 使用了分布式训练来并行计算和优化模型参数。

  4. BERT:BERT 是一种用于自然语言处理的预训练模型,具有多达 3.3 亿个参数。为了高效地训练 BERT 模型,采用了分布式训练来加速训练过程。

  5. PPO:PPO(Proximal Policy Optimization)是一种用于强化学习的策略优化算法。PPO 算法可以并行训练多个智能体,在分布式环境中学习复杂的控制策略。

9.2常见的并行策略

分布式训练不仅仅是简单的机器堆叠,它不仅仅需要多个设备进行计算,还涉及到设备之间的数据传输。假设我们利用逻辑上的乘法例子:
设输入x为4 * 5的矩阵,模型参数w为5 * 8的矩阵,则输出形状为4 * 8的矩阵。这个地方主要是利用线代中矩阵乘法的知识。单机单卡的训练中,以上的矩阵乘法,先得到out,进入下一层计算,最终是得到loss。然后在反向传播的过程中,对loss进行求w的偏导,用来更新w。
在分布式训练中,我们根据x还是w的不同,分为“数据并行”和“模型并行”的策略。

9.2.1数据并行

数据并行,是将数据x进行切分,但每个模型上的w是一样的。我的理解是有n个设备,每个设备上的输入x为4/n * 5的矩阵,由于模型参数的w不变,那么最终的输出为4/n * 8的矩阵。但是在反向传播过程中,各自得到用来更新w的偏导数都会不同。那我们这个时候需要在每个设备上进行AllReduce,来确保每个设备上的模型始终一致。
ps:这个是AllReduce算法的工作流程。

  1. 每个计算节点上的模型副本在本地进行前向传播和反向传播,计算梯度。

  2. 各个节点将自身的梯度值通过网络通信发送给其他节点。

  3. 每个节点接收其他节点发送的梯度值,并将它们相加聚合成全局梯度值。

  4. 每个节点将聚合得到的全局梯度值应用于自身的模型副本,更新模型参数。

9.2.2模型并行

当神经网络十分巨大,数据并行同步梯度的代价太大了,甚至网络无法存到同个设备中,这个时候就可以采用模型并行来解决问题。所谓的模型并行就是每个设备上的数据是一样的,但是每个设备只有模型的一部分,所有设备上的模型拼在一起才是个完整的模型。模型并行的好处就是,省去多个设备上的AllReduce:但是每个设备都是需要完整的数据输入,因此数据会在多个设备中进行广播,产生通信代价。
前面提及的BERT,常采用模型并行。

9.2.3流水并行

除了上面的模型并行之外,还可以采用流水并行。这个方法就如同他的名字,就像水流一般,流过一个个计算设备,前面设备的输出就是后一个设备的输入,每个设备都在进行接力赛。但在实施时需要考虑任务划分、数据流和同步、任务调度和调优、错误处理和容错性、数据依赖和版本一致性,以及性能监控和调优等问题。

9.2.4混合并行

在网络训练中,也可以才采用多个并行策略使用。以GPT-3为例,它分为64个阶段,采用了流水并行。每个阶段都运行在6台DGX-A100主机上,6台主机之间采用的是数据并行,每个主机有八张GPU,每个GPU之间采用的是模型并行训练.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值