MindSpore分布式并行训练—概述

MindSpore分布式并行训练位于MindSpore架构的前端表示层部分。它是对MindSpore计算图的优化。 

image-20210831175923701.png

并行模式概述

在深度学习发展的过程中为了更好的网络学习能力和泛化能力,数据集和模型规模都呈指数式提高。在NLP领域随着Transformer层的堆叠,模型的精度确实有所提高,但与此同时,模型参数所需的内存很快达到了性能上线。在人脸识别领域,因为全连接层的参数规模收到分类数量的影响,因此大规模人脸识别的参数也受到了内存的限制。而在推荐领域,由于人类网络活动的增加,使得基础数据的特征过多,在较为经典的wide&deep等模型中会使得模型头部的Embedding层规模巨大。

因此,突破内存限制,进行多机器的分布式并行模式计算是有必要的。同时这也有利于加速人工智能的训练。

目前主流的并行训练模式有:数据并行、模型并行和混合并行。

数据并行

数据并行在应用最为广泛。其在数据层面进行分割,具体而言将总的训练batch分成了多个batch。其将模型复制到多个设备,随后多个设备对分发到的数据进行训练。随后对多个模型的样本梯度结果进行梯度聚合,依据梯度聚合的结果更新参数,完成一轮迭代训练,达到分布式并行的结果。

image-20210831204732955.png

数据并行从数据层面分割,加快了模型对大量数据的训练,通过减少每个模型的数据量减少内存消耗。然而,对于模型本身过于复杂的超大型模型效果有限。

模型并行

在模型层面进行任务分割。模型并行大概可以分为两种:层间模型并行和层内模型并行。层间模型并行,将计算图进行分割,各设备执行不同层次的计算任务。层内模型并行,将每层的参数进行切分,从而实现计算任务分布式进行。MindSpore便是层内模型并行架构。

模型并行难度一般更高,主要体现在三个方面:内存上限,通信代价,张量排布。现在主流框架做法都是通过手动切分的方式来做模型并行,手动切分模型难度非常大,对开发者的要求非常高,甚至需要专家经验。

混合并行

混合并行有非常多维度的并行选择。混合并行,有以下几个主要难点:

  1. 模型切分难,不同维度的模型切分会引入不同的通信量,性能不同,要从海量切分策略中分析出一个性能较好的策略,难度高,需要专家经验;要考虑内存上限让切分后的子模型能够在卡中运行;要考虑切分后各子模型的计算量,保持计算相对均衡,从而避免性能短板。
  2. 需要理解底层硬件网络组网的拓扑,节点内和节点间的设备分布方式,把子模型间通信量多的放到节点内,通信量小的放到节点间,以提高网络的利用效率。一般来讲,集群网络有三层,服务器内多卡间互联、机柜内服务器间互联及机柜间互联,带宽和时延依次降低。
  3. 在编码方面,手动模型并行,用户需要显式地写很多设备绑定以及通信代码,比较繁复,并行逻辑与算法逻辑耦合在一起,加重了算法科学家的开发工做量。
posted @ 2021-12-20 15:17  MS小白  阅读(159)  评论(0)    收藏  举报