乐趣区

关于人工智能:飞桨分布式训练又推新品4D混合并行可训千亿级AI模型

最近,飞桨提出了 4D 混合并行策略,以训练千亿级浓密参数模型。

近几年,深度学习畛域的开发者们对模型成果的谋求愈演愈烈,各大榜单纪录一直刷新,而这个景象的背地都有着“大规模训练”的身影。简略来说,就是应用大规模的数据或大规模参数量的模型来做训练。大规模的数据能够让模型有足够的“教材”用于“学习”,而大规模的参数量则能够让模型“学习能力”更强,更容易“学习”到“教材”中的“常识”。在数据和参数规模增长的过程中,惯例的单机训练因为硬件资源的限度慢慢显得顾此失彼,而分布式训练则成为了宽广开发者的必然选择。

所谓分布式训练,就是应用多台机器共同完成训练任务,这其中波及多机工作拆分、集群训练资源配置、均衡训练速度和收敛速度、弹性训练与容错等多项重要技术,同时也是各大深度学习框架彰显技术实力的重要“策略洼地”。

飞桨是我国首个开源凋谢、自主研发、性能齐备的产业级深度学习平台,其英文名“PaddlePaddle”正是“Parallel Distributed Deep Learning”并行分布式深度学习的字母缩写组合。飞桨不仅在业内最早反对了万亿级稠密参数模型的训练能力,而且近期又创新性的提出了 4D 混合并行策略,以训练千亿级浓密参数模型,能够说分布式训练是飞桨最具特色的技术之一。那么飞桨是如何做到的呢?这与理论业务的锻炼密不可分。

▲ 图 1 百度丰盛业务场景

飞桨的分布式训练技术在对外提供之前就曾经在百度外部广泛应用,如搜索引擎、信息流举荐、百度翻译、百度地图、难看视频、文心 ERNIE 等等,既蕴含网络简单、浓密参数特点的计算机视觉(CV)/ 自然语言解决(NLP)模型训练场景,又笼罩了有着宏大的 Embedding 层模型和超大数据量的举荐搜寻训练场景,堪称是分布式训练技术得天独厚的“练功房”。

▲ 图 2 大规模训练场景

历经搜寻举荐业务磨炼 最成熟万亿稠密参数模型训练技术一骑绝尘

搜寻举荐场景常常面临数据量大、特色维度高且稠密化的问题。而分布式训练的参数服务器模式采纳了一种将模型参数中心化治理的形式来实现模型参数的分布式存储和更新,该模式有两个角色 Server 与 Worker:Worker 用于执行模型的前向与反向计算;Server 负责从各个 Worker 收集汇总梯度并更新参数,因而对于存储超大规模模型参数的训练场景非常敌对,常被用于训练领有海量稠密参数的搜寻举荐畛域模型。

▲ 图 3 传统参数服务器

百度搜寻作为寰球最大的中文搜索引擎,对模型的规模、性能等要求十分高。为了应答严苛的理论业务挑战,早在 2018 年,飞桨的纯 CPU 参数服务器模式就能够反对万亿规模稠密参数的模型训练。之后随着模型中网络结构更加简单,以及对训练效率和性价比的进一步谋求,飞桨参数服务器技术也在更新换代:从晚期 Worker 节点的硬件型号必须统一的纯 CPU 参数服务器到纯 GPU 参数服务器,再到 CPU、GPU、其它 AI 硬件混布调度训练的异构参数服务器,始终引领参数服务器技术的倒退;同时也失去了更多的利用落地,如 OPPO 利用商店举荐、网易云音乐主播举荐等等。

从传统纯 CPU 参数服务器到纯 GPU 参数服务器

传统的纯 CPU 参数服务器,由高性能异步训练 Worker、高效通信策略和高性能 Server 组成。通常能够应用的 CPU 数量较多,训练中可能充沛展现 CPU 多核的吞吐量劣势。在异步训练模式下训练简略模型能够极大晋升数据吞吐量,整体训练速度十分杰出。

▲ 图 4 传统参数服务器工作流程

然而随着模型网络越来越简单,对算力要求越来越高,在数据量不变的状况下,CPU 计算性能差的弱势就会浮现,尽管能够通过减少 CPU 机器数量来解决,甚至能够减少上百台,然而这种办法不仅老本大幅提高,而且集群的稳定性和扩展性也存在较大的问题。因而飞桨引入了纯 GPU 参数服务器来晋升计算性能,之前 100 台 CPU 机器能力训练的模型,仅需 1 台多卡 GPU 机器即可实现训练。当然,同时也要解决因为硬件更替所带来的问题。

GPU 弱小的算力毋庸置疑能够晋升集群的计算性能,但随之而来的是,不仅模型规模会受到机器显存和内存的制约,而且通信带宽也会因为集群网卡数量升高而成为瓶颈。为了解决这两个问题,飞桨引入了两大亮点技术 SSD-MEM-HBM 三级存储和 RPC&NCCL 混合通信,造成了飞桨特有的纯 GPU 参数服务器(PaddleBox)【1】:

  • SSD-MEM-HBM 三级存储容许全量参数应用 SSD 硬盘存储,高频参数存储于内存,以后 Batch 训练所用参数应用显存,并且同时反对 SSD 的参数在硬盘、内存、显存之间疾速拷贝。这样通过异步流水线执行机制,荫蔽了 IO 带来的额定性能开销,在保障训练速度的同时,使训练的模型大小不再受制于显存和内存,极大晋升模型的规模。
  • RPC&NCCL 混合通信能够将局部稠密参数采纳 RPC 协定跨节点通信,其余参数采纳卡间 NCCL 形式实现通信,充分利用带宽资源。

▲ 图 5 纯 GPU 参数服务器工作流程

飞桨纯 GPU 参数服务器尽管解决了之前纯 CPU 模式所面临的问题,但新的问题又呈现了——如何进步训练资源的利用率?

从传统纯 GPU 参数服务器到异构参数服务器

在纯 GPU 的参数服务器下,所有的训练都在 GPU 中,当模型中局部网络层比较复杂的时候,GPU 利用率很难被打满,而 GPU 机器中 CPU 与 GPU 的硬件配比是固定的,无奈灵便调整。针对这种状况,有两种解决方案:

  • 定制化 GPU 机型,调整机器内 CPU 与 GPU 的硬件配比。
  • 混布 CPU 和 GPU 机器节点,来调整机器间的硬件配比。

基于这两种解决方案,飞桨框架 2.0 版本创新性地推出了通用异构参数服务器性能。一举解除了传统参数服务器模式下,Worker 节点必须严格应用同一种硬件型号的桎梏,使训练任务对硬件型号不敏感,即能够同时应用不同的硬件混合异构训练,如 CPU、AI 专用芯片(如百度昆仑 XPU)以及不同型号的 GPU 如 v100、P40、K40 等。同时还能够解决大规模稠密特色模型训练场景下 IO 占比过高导致的芯片资源利用率过低的问题。通过异构参数服务器训练模式,用户能够在硬件异构集群中部署分布式训练任务,例如云服务器集群,高效利用不同算力芯片,为用户提供更高吞吐、更低资源耗费的训练能力。

▲ 图 6 异构参数服务器示意图

异构参数服务器的最大亮点是硬件感知的工作切分。如图 6 所示,针对相似 ERNIE+CTR 这样计算密集型与 IO 密集型兼有的训练任务,能够被切分成多个子工作。其中的 IO 密集型工作(如数据读取、Embedding 查问)切分给 CPU 机器,计算密集型工作切分给 GPU 机器;用户能够依据子工作的计算复杂度来灵便决定机器配比,并且还能够兼容传统纯 CPU 参数服务器和纯 GPU 参数服务器所反对的训练任务。

助力文心 ERNIE 疾速迭代 独创 4D 混合并行引领超大规模预训练潮流

在 NLP 畛域中,依靠飞桨打造的“语义了解技术与平台文心 ERNIE”曾取得过有数殊荣:去年 3 月一举拿下 SemEval 2020 的 5 项冠军;5 月公布语言生成预训练模型 ERNIE-GEN,刷新语言生成 SOTA;6 月公布多模态模型 ERNIE-ViL,刷新 5 项工作纪录,登顶权威榜单 VCR;7 月亮相 2020 世界人工智能大会,摘取最高荣誉 SAIL 奖;11 月取得中国人工智能学会优良科技成果奖。在文心 ERNIE 这些闪耀问题的背地,也有飞桨的分布式训练技术的奉献。

首先对于 NLP 和 CV 这类领有简单网络、浓密参数特点的模型,飞桨分布式训练技术的汇合通信模式能够很好的反对这类模型的训练。该模式没有治理模型参数的核心节点,每个节点都是 Worker,每个 Worker 负责模型训练的同时还须要把握以后最新的全局梯度信息。汇合通信模式对计算芯片的算力和芯片之间的网络互联要求较高,如高性能计算的 GPU、芯片之间的高速网络互联 NVLINK 和 InfiniBand 等,因而非常适合 CV 和 NLP 畛域计算密集型训练任务。

然而在晚期的汇合通信架构中,多节点间的参数信息的传输通常是各个 Worker 之间屡次点对点通信实现的,通信效率较低。百度在 2016 年突破性地提出并应用 Ring-AllReduce 多 GPU 训练,通过较少的点对点通信轮数就实现了全局节点的模型参数传输,让同步并行训练的多 GPU 扩大能力失去极大冲破,大幅晋升汇合通信模式的训练速度,使这种模式在 NLP 和 CV 畛域失去更宽泛的利用。

▲ 图 7 汇合通信训练

4D 混合并行策略反对文心 ERNIE 文新 ERNIE 千亿语言模型训练

以后飞桨汇合通信模式曾经能够反对文心 ERNIE 千亿语言模型的训练能力,其 Sharding-DP 策略更是在近期助力文心 ERNIE 的多项工作分数刷新 GLUE 榜单。而这个 Sharding-DP 策略正是飞桨汇合通信模式为了训练 ERNIE 这样的大规模简单模型所反对的多种并行策略中的一种。那么飞桨是应用哪些策略胜利反对文心 ERNIE 千亿语言模型训练的呢?这些策略是如何工作的呢?接下来将为大家具体介绍。

ERNIE 千亿级模型采纳 100 多层 Transformer 网络结构,计算简单,训练须要占用 T 级显存资源,如果想用更少的机器高效训练,必须采取一系列性能优化和显存优化措施。

首先看如何性能优化。咱们通过一个公式来看哪些因素能够影响训练速度,在固定的硬件环境下:

总训练速度 ∝ 单卡速度 卡数 多卡减速比

其中单卡速度由数据读取和计算速度决定;多卡减速比由计算 / 通信效率决定。不言而喻,这三个是关键因素。除了单卡能够应用的算子交融、混合精度之类的根底性能优化策略之外,分布式训练还引入一系列并行策略。并行策略的核心思想是将数据和计算无关的图 / 算子切分到不同设施上,同时尽可能升高设施间通信所需的代价,正当应用多台设施资源,实现高效的并发调度训练,最大化晋升训练速度。常见并行策略有数据并行 DP(Data Parallel)、Layer 间并行(流水线并行 PP,Pipeline Parallel)、Layer 内并行(模型并行 MP,Model Parallel)。如下表所示。咱们从设施资源和计算 / 通信效率来剖析三种策略的优缺点:

  • 数据并行训练减速比最高,但要求每个设施上都备份一份模型,显存占用比拟高。为此咱们的改良计划是分组参数切片数据并行策略(具体原理后文介绍),兼容了 MP+DP 的劣势,但毛病是通信量大。
  • 模型并行,通信占比高,适宜在机器内做模型并行且反对的模型类型无限。
  • 流水线并行,训练设施容易呈现闲暇状态,减速效率没有 DP 高;但能缩小通信边界反对更多的层数,适宜在机器间应用。

其次看显存问题,通过下表剖析的显存占用起源能够看出,上述的并行策略同样能够很好地应答不同起源的显存占用,更多的层数能够通过流水线并行和分组参数切分策略来解决;某层参数很大能够通过模型并行来解决;其次飞桨还提供一些其它灵便的优化形式,例如每层输入占用的显存,能够通过重计算和 Offload 来解决。

综上所述,针对性能优化和显存优化,几种并行策略都有用武之地,然而同时也有各自的局限性,所以如果想高效训练千亿模型,须要这几种策略互相组合,舍短取长,施展各自的劣势。

那么如何组合呢?飞桨研发人员首先在单机内应用模型并行和分组参数切片组合的 2D 策略,这么抉择的起因是这两个策略通信量较大,适宜应用机器内的卡间通信;而后为了承载千亿规模模型,再叠加流水线并行策略,应用多台机器独特分担;最初为了做到高效,在外层又叠加了数据并行来减少并发数量,晋升整体训练速度。这样业内首个 4D 混合并行策略就诞生了。

▲ 图 8 4D 混合并行策略示意图

上面咱们再来简略介绍下几个并行策略的原理。

模型并行策略指的是将某一层网络切成多份,并分给不同的卡并行计算,每张卡仅须要计算局部后果。对于 ERNIE 中的 Transformer 网络结构,模型并行就能够对全连贯层 FC 切分,而后通过通信操作合并计算结果【2】。

流水线并行策略反对将模型的不同层搁置到不同的设施上,通过多个设施来独特分担显存耗费,实现超大规模模型训练。相邻设施间通过通信链路传输数据。因为各个设施间传输的仅是相邻设施间的输入张量,因而通信量较小,相对来说较为适宜机器间通信的场景。

值得注意的是,流水线并行能够说是狭义模型并行的一种特例,本文中的模型并行仅指 Tensor 切分,也就是会呈现同一层网络交由不同卡来计算的状况,而流水线并行则是依照网络层的粒度切分。

▲ 图 9 流水线并行策略示意图

流水线并行策略自身也有很大的优化空间。如图 10(a)所示,优化前,任意时刻只有单个计算设施处于计算状态,其它计算设施则处于闲暇状态,这个闲暇工夫咱们称之为 Bubble 工夫【3】。为了缩小 Bubble 工夫,如图 10(b)所示,飞桨进一步将 mini-batch 切分成若干更小粒度的 micro-batch,每个设施顺次计算单个 micro-batch 的后果,从而减少了设施间的并发度,升高了流水线并行 Bubble 工夫比例。

此外飞桨研发人员通过对流水线并行训练过程更加深刻的分析,发现还能够进一步优化显存的利用率。采纳如图 10(c)中所示的形式,在一个 micro-batch 实现前向计算后,提前调度实现相应后向计算,这样就能开释局部显存,用以接收新的数据,晋升整体训练性能。应用 ERNIE 模型实测,从 10(b) 到 10(c),总 BatchSize 能够晋升 32 倍,性能能够晋升 9 倍。

▲ 图 10 流水线并行时序图

最初再来看下飞桨的分组参数切片策略,其特色是在应用参数切片形式节俭显存的根底上,与数据并行策略组合成更加弱小的 Sharding-DP 策略。简而言之,这种组合后的策略领有很强的灵活性,用户能够依据现有硬件环境状况,自在设定模型参数切分的数量(sharding_degree)和数据并行的路数(dp_degree),仅须要确保 sharding_degree × dp_degree = 总卡数即可。

举个例子,假如用户有 4 台单机四卡的机器(共 16 张卡),训一个 16 层网络的模型。如果模型参数规模能够应用一台机器承载,则举荐应用 dp_degree=4 & sharding_degree=4 的形式,如图 11 所示。这种形式的劣势在于只有机器内卡间通信,然而模型最大不能超过单台机器所能接受存储范畴。

▲ 图 11 dp_degree=4 & sharding_degree=4 的 Sharding-DP 示意图

如果模型大小超过了单台机器,问题也不大,用户能够灵便地抉择 dp_degree=2 & sharding_degree=8 形式,如图 12 所示。与上一种形式相比,这种形式反对的模型参数规模翻倍。

▲ 图 12 dp_degree=2 & sharding_degree=8 的 Sharding-DP 示意图

然而在一些非凡的状况下,如果模型参数规模十分大,半数机器都无奈承载,则能够进一步应用 dp_degree=1 & sharding_degree=16 形式,行将整个模型参数交由全副机器承载,这也是规范的 ZeRO-DP【4】形式,如图 11 所示。这种形式跨机器通信数十分高,对训练速度影响很大。其实 Sharding-DP 能够说是 ZeRO-DP 的一种升华,让用户能够应用更加高效形式应答非凡场景之外的绝大部分训练任务。

▲ 图 13 dp_degree=1 & sharding_degree=16 的 Sharding-DP 示意图示意图

最初咱们从实践性能角度比照剖析了几组混合并行策略,即 DP2+PP32+Sharding2+MP4、PP64+Sharding2+MP4 和 DP2+PP32+MP8。如下表所示,与两种 3D 形式相比,4D 混合并行策略在通信量和 Bubble 工夫上并未显著增长(具体公式推导和示例请参见相干教程【5】),然而大幅晋升了数据并行路数!

测试验证

从下面实践剖析上来看,4D 混合并行策略应该会具备更好的性能。那么实际效果如何呢?咱们进入实测阶段。咱们应用 64 台 8 卡 GPU v100 机器的环境来验证不同策略组合的训练成果,而测试的对象,正是领有 2300 亿参数规模的“重量级”ERNIE 模型。测试后咱们能够看到 4D 混合并行策略训练速度高于其它两种 3D 混合并行策略,达到了 8698 tokens/s,至多能够提速 23.7%。

写在最初

自飞桨设计之初就开始潜心研究分布式训练技术以应答大规模参数模型的训练任务。在丰盛的搜寻举荐业务的驱动下,飞桨分布式训练参数服务器模式历经三代。最早的纯 CPU 参数服务器就曾经能够训练万亿级规模的稠密参数模型。其后随着业务的须要以及前沿技术的倒退,产生了计算能力更强的纯 GPU 参数服务器模式。最近新推出的业内独创的异构参数服务器模式,反对场景更多而且能够极大地晋升硬件资源利用效率。对于大规模浓密参数模型,飞桨分布式训练技术同样与业务紧密结合,其汇合通信模式通过最新的 4D 混合并行策略,反对了 2300 亿参数规模的文心 ERNIE 模型的分布式训练。现在飞桨曾经开始钻研下一代分布式技术,来同时兼容超大规模浓密参数和稠密参数模型的训练。置信在理论产业利用这个外围驱动力推动下,飞桨分布式训练必将成为星辰大海上的那颗北极星,为宽广开发者们指引航向。

【1】Zhao W, Xie D, Jia R, et al. Distributed hierarchical gpu parameter server for massive scale deep learning ads systems[J]. arXiv preprint arXiv:2003.05622, 2020

【2】Shoeybi M, Patwary M, Puri R, et al. Megatron-lm: Training multi-billion parameter language models using model parallelism[J]. arXiv preprint arXiv:1909.08053, 2019.

【3】Huang Y, Cheng Y, Bapna A, et al. Gpipe: Efficient training of giant neural networks using pipeline parallelism[J]. arXiv preprint arXiv:1811.06965, 2018.

【4】Rajbhandari S, Rasley J, Ruwase O, et al. Zero: Memory optimizations toward training trillion parameter models[C]//SC20: International Conference for High Performance Computing, Networking, Storage and Analysis. IEEE, 2020: 1-16.

【5】相干教程:

https://fleet-x.readthedocs.io/en/latest/paddle_fleet_rst/collective/collective_mp/hybrid_parallelism.html

如在应用过程中有问题,可退出官网 QQ 群进行交换:778260830。

如果您想具体理解更多飞桨的相干内容,请参阅以下文档。

飞桨官网地址

https://www.paddlepaddle.org.cn/

飞桨开源框架我的项目地址

GitHub:

https://github.com/PaddlePaddle/Paddle

Gitee:

https://gitee.com/paddlepaddle/Paddle

退出移动版