乐趣区

关于深度学习:大规模并行分布式深度学习

作者:林伟

最新的十年是人工智能爆炸的十年,人工智能曾经在社会各个领域如图片,语音,语言了解,举荐算法获得重大突破,使得其判断的后果曾经靠近或者超过了人类。这个背地的次要起因是是互联网的一直倒退使咱们可能疾速地积攒了海量数据,再加上硬件的疾速倒退以及神经网络训练形式的变革,使咱们越来越有能力训练深且宽的神经网络,产出了超过人类“智能”的模型,并失去广泛应用。所以如何实现大规模并行分布式深度学习就成为深度学习的钻研热点,从而成为推动算法翻新的要害的人工智能工程能力。

并行分布式深度学习的历史倒退历程和范式

最开始推动分布式训练的场景是大规模搜寻广告举荐模型。随着互联网的倒退,咱们须要建设一个可能满足互联网用户以及数据规模一种搜寻广告举荐模型,须要通过训练可能很好对用户,网页进行无效的向量化,从而可能通过不同人或者网页的特色,找出更加相干的信息,进步人们在海量数据中匹配数据的效率。而这类模型往往须要学习进去一个十分大的特色矩阵,比方古代零碎这种特色规模以及从最开始百亿 [1] 曾经倒退到千亿乃至于万亿[2],这就须要一种分布式的零碎来撑持这种机器学习的模型训练。而且因为这种特色矩阵因为人群和网页这种互联网的个性,具备显著的热点效应,是十分稠密的,使得其在拜访时候经常具备在工夫和空间上的不平均性。这也是 2014 年谷歌等团队在 OSDI 发表一个分布式系统《Scaling Distributed Machine Learning with the Parameter Server》[3] (相干其余钻研还有[4] [5]),该零碎(Figure 1)建设一个分布式 Key-Value 的存储系统来保留海量的特征向量,而后咱们把海量训练数据散发到多个没有状态的训练工作节点(worker),每个工作节点从分布式 KV 的参数服务器获得最新的参数,在以后这批数据进行训练算出在这批数据上做出的预计和心愿的答案(个别是把用户最初实在点击的网页或者商品作为指标答案)的差距,从而计算出须要对于参数调整的梯度,而后在把这些梯度推送会参数服务器进行相干加权均匀,汇总后再调整参数,使得整个模型的预测可能更加贴近目标值。因为稠密的个性,为了可能充分发挥零碎的性能,也因为这类模型往往谋求的指标是一个动静的指标,因为人的趣味和网页自身都是时刻在变动的。所以咱们能够利用这个个性进行异步训练,也就是在训练时候能够适当应用过期的参数以及利用异步的形式来更新参数,从而可能更好的,在更大范畴来容忍参数服务器参数拜访的不平均性以及分布式场景下容错以及网络通讯的压力,使得分布式训练效率更优。更加具体的能够参照 NIPS 2013 年的《More effective distributed ml via a stale synchronous parallel parameter server》等论文[5]。


图 1 参数服务器(选自[3])

于此同时,在图片,语音和语言等感知类畛域,随着海量数据的积攒以及算力倒退,神经网络算法终于能够获得突破性的后果,随着 AlexNet[6], GoogleNet[7],Resnet[8],模型的规模和深度也是越来越大,从而机器学习畛域从神级网络算法诞生出一支独立学派:深度学习,并失去了疾速爆炸性的倒退,以至于现在人们议论人工智能往往和深度学习画上了等号。然而因为 GPU 等硬件也是疾速倒退,显存大小也是同步在变大,使得这类模型还是可能在单块显卡可能放的下,加上咱们能够通过 ZeRO optimizer[25],CPU-offload 等技术进一步提高 GPU 显存的应用效率,以至有文章 [26] 说实用的模型总是可能在单卡可能放下并且失去训练。然而即便如此,模型的参数还是有上亿的规模,须要海量的数据来训练,为了减速训练,咱们还是须要应用数据并行来分布式训练,因为感知类模型往往是浓密的参数,训练每批数据后,简直是所有的参数都须要更新,这样使得在通信行为上有着十分显著不同于稠密模型的特点,于是咱们有了另外一种并行分布式形式:AllReduce[27]的同步的数据并行。这种分布式训练模式其实从高性能集群 HPC 畛域来,也就是每个训练参与方都保护一个模型的正本,而后在训练时候,每个工作节点分到 N 分之一的数据,通过前向和反向计算,失去这个数据下模型估计值和指标指的差距,从而失去这批数据上参数须要变换的梯度,而后利用高性能 HPC 集群的通信库原语 AllReduce 使得每个节点同时加权均匀所有节点部分梯度变动,使得每个工作节点都失去全局梯度变动的正本,最初同时将该梯度变动使用于模型参数上,使得其每个工作节点上的模型正本同步失去雷同的更新。AllReduce 的有能够细分为 Ring-AllReduce[26]和 Reduce-Scatter 的形式来做,其中 Ring-Allreduce 因为去中心化以及十分确定性的消息传递,使得 Nvidia 能够依据这个个性构建多个 GPU 卡的物理拓扑 NVLink[9],从而可能高效进行 Ring 的 Allreduce,并且将这个通信原语集成到本人软件 NCCL 库[10],从而大大推动同步的数据并行模型训练的发展和人工智能利用的倒退。当然也有其余钻研比方字节跳动的 BytePS[11] 利用参数服务器的分布式架构来进行浓密模型的 AllReduce 这个计算,以便在没有良好 NVLink 拓扑上一样可能进行高效的同步的数据并行训练。

随着深度学习演进,在搜寻举荐广告畛域也从原来逻辑回归等传统机器学习算法向深度学习演进,最有影响力以及创始深度学习模型在这个畛域的模型训练的是谷歌 2016 年发表于 DLRS 的《Wide & Deep Learning for Recommender System》[12]。为了可能无效反对感知类以及举荐类模型两者的须要,谷歌团队推出 TensorFlow 深度学习框架[13],从而可能把多种并行分布式训练范式都可能对立在 Tensor 流图的深度学习计算引擎上。

尽管 TensorFlow 从一开始就对于整个分布式深度学习训练做了十分根底和实质的形象,该形象能够反对任意的大规模的分布式训练形式,并且在这个框架根底上很快在 2018 年就呈现了 流水并行 [14] 和算子拆分 [15] 的模型并行的形式。流水并行是将模型层和层之间横向分成多个阶段,从而能够将模型的不同局部调配到不同的节点(GPU)中,从而咱们能够训练单个 GPU 存储放不下的大模型。这种模式下不同 GPU 之间传递是层和层之间的计算结果,然而咱们晓得整个神经网络的训练过程是前向和反向的计算过程,所以这些 GPU 因为计算依赖是顺次进行计算的 (图 2 中的 b 所示),并不能在计算进行很好并行,无奈充分利用 GPU 的算力。所以 Gpipe[14] 进一步把计算进行 mini-batch 的切割,从而进一步让计算在 GPU 间相似微流水(图 2 中 c 所示)的形式进行并行。进一步提高 GPU 的利用率。另外一种并行形式是算子拆分,就是将神经网络纵向宰割(如图 3 所示),把一个算子计算切割到不同节点进行计算,这种形式克服了流水因为计算依赖关系造成的 GPU 闲置的问题,然而不同算子分布式计算须要不同计算和拆分形式能力无效进行并行化,并且并行效率也和算子类型非亲非故,所以这种形式往往须要十分大开发成本能力很好对模型进行并行训练。其实大规模举荐稠密模型也是一种算子拆分的形式,只是这个算子是一个简略的稠密特色的 lookup 算子而已。尽管钻研人员很快在 TensorFlow 这个框架根底上给出多样的并行形式从而可能训练任意大的模型,然而因为 GPU 的硬件倒退也很快,GPU 的显存大小也失去疾速的倒退。所以在很长的工夫,除了举荐类大规模稠密模型训练,感知类模型训练只是须要数据并行形式进行训练,直到 2019 年有一篇分量性工作《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》[16]的发表。


图 2 流水并行(选自[14])


图 3 算子拆分
Bert 推动超大规模预训练模型疾速倒退,这种 transformer 为根底的模型构造推动着感知类模型的参数规模从亿级别迅速进入到千亿以及万亿规模,例如 GTP-2[17],GTP-3[18],T5[19],M6[20] 等等。终于简单的模型并行从学术研究畛域进入到企业界理论落地过程中。以后的超大规模模型往往须要依据模型的特点,进行多种并行训练形式的混合并行。这也是大家有时候叫做 3D,4D,5D 分布式训练,其实实质上就是把所有这些技巧综合在一起。

所以总结起来分布式并行训练的范式分为

  • 大规模稠密模型训练:参数服务器形式,异步训练为主
  • 大规模浓密模型训练
  1. 数据并行:AllReduce 或者参数服务器进行梯度汇总,利用极致的显存优化(CPU-offload,Zero 梯度优化器优化,checkpoint 等)进一步扩充单节点的模型大小
  2. 流水并行
  3. 算子切分
  4. 混合并行

大规模并行分布式训练的倒退方向

主动分布式训练 :模型混合并行日益重要,然而混合并行往往须要依据模型的特点和集群资源现状,抉择不同并行形式在模型不同局部,如果这个都须要模型的构建者来进行抉择,整个问题是一个 NP 问题,会给模型构建者带来微小的研发老本,使得很难进行疾速算法研发迭代,为了更加零碎的解决这个混合并行的寻优问题,产研界进行踊跃相应的钻研,比方 GShard[21],OneFlow[22],Whale[23] 等。其外围思路就是利用动态图逻辑性地形容一个网络训练步骤,执行的时候再进行系统化的分图和分布式训练,利用反映了事实束缚的老本分析模型(Cost Model)对于不同并行策略进行评估,最初主动抉择最优的并行计划。

这些工作中,GShard 更多关注于谷歌的 TPU 集群,OneFlow 从从新构建一个面向分布式的深度学习生态,而 Whale 其实采取的理念是让算法同学利用现有深度学习生态,如同构建一个单卡的模型训练的形式去构建,并且可能在异构资源(不同能力的加速卡能力)环境找到更优的混合并行计划。图 4 展现了 Whale 的整体架构图。Whale 会把模型训练脚本转换成一个的 DAG 动态图,而后进一步转化成自有中间代码(Intermediate Representation,IR)形容的逻辑执行打算,而后零碎进行主动布局,再依据布局进去的并行策略对执行打算进行切图,并且把系统资源进行相应的划分,再把切图的后果和资源绑定,最初让 Cost Model 在多个可能并行策略上进行抉择,从而主动寻找到靠近最优的分布式策略。


图 4 Whale 整体构架图

更大规模异构多模态多任务的模型训练: 随着模型算法,数据以及算力的倒退,研究者终于能够开始构建神经网络算法最后的构想,就是建设相似大脑多任务综合在一起学习的形式,从而使得机器学习可能进一步仿真人脑的认知过程,把语言,视觉,听觉等多个认知工作关联在一起来进行整体训练,这个就要求更加异构的训练过程。Pathways[24] 就是在这个方向最新的摸索。

总之,随着互联网的蓬勃发展,人们开始积攒十分多的有价值的数据,同时随着半导体行业的形式使得咱们具备足够算力使得模型研究者可能更敢去构建更加大型的模型,从而大大晋升了模型的成果,产生可能媲美人类认知的人工智能模型,而大规模分布式训练的工程成为可能粘合数据,算力和算法的要害。

参考文献
[1] KunPeng: Parameter Server based Distributed Learning Systems and Its Applications in Alibaba and Ant Financial. KDD 2017.

[2] Persia: An Open, Hybrid System Scaling Deep Learning-based Recommenders up to 100 Trillion Parameters.CoRR 2021.

[3] Scaling Distributed Machine Learning with the Parameter Server. OSDI 2014.

[4] Parameter server for distributed machine learning. NIPS 2013.

[5] More effective distributed ml via a stale synchronous parallel parameter server. NIPS 2013.

[6] ImageNet Classification with Deep Convolutional Neural Networks. NIPS 2012.

[7] Going deeper with convolution. CVPR 2015.

[8] Deep Residual Learning for Image Recognition. CVPR 2016.

[9] https://www.nvidia.com/en-us/…

[10] https://developer.nvidia.com/…

[11] A Unified Architecture for Accelerating Distributed DNN Training in Heterogeneous GPU/CPU Clusters. OSDI 2020.

[12]Wide & Deep Learning for Recommender System. DLRS 2016.

[13] https://www.tensorflow.org

[14] GPipe: Efficient Training of Giant Neural Networks using Pipeline Parallelism. NIPS 2019.

[15] Mesh-TensorFlow: Deep Learning for Supercomputers. NIPS 2018.

[16] BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. NAACL-HLT 2019

[17] https://huggingface.co/docs/t…

[18] https://openai.com/blog/gpt-3…

[19] Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer. Mach. Learn. Res. 2021.

[20] M6: Multi-Modality-to-Multi-Modality Multitask Mega-transformer for Unified Pretraining. KDD 2021

[21] GShard: Scaling Giant Models with Conditional Computation and Automatic Sharding. CoRR 2020.

[22] OneFlow: Redesign the Distributed Deep Learning Framework from Scratch. CoRR 2021

[23] Whale: Scaling Deep Learning Model Training to the Trillions. https://arxiv.org/pdf/2011.09…

[24] https://blog.google/technolog…

[25] ZeRO: memory optimizations toward training trillion parameter models. SC 2020

[25] DeepSpeed: https://www.microsoft.com/en-…

[26] https://andrew.gibiansky.com/…

[27] Horovod: fast and easy distributed deep learning in TensorFlow. arXiv preprint arXiv:1802.05799 (2018)

退出移动版