作者:王林、飒洋

导读

最近阿里云机器学习PAI平台和达摩院智能计算实验室一起公布“低碳版”巨模型M6-10T,模型参数曾经从万亿跃迁到10万亿,规模远超业界此前公布的万亿级模型,成为以后寰球最大的AI预训练模型。同时做到了业内极致的低碳高效,应用512 GPU在10天内即训练出具备可用程度的10万亿模型。相比之前公布的大模型GPT-3,M6实现等同参数规模,能耗仅为其1%。

M6模型训练应用的正是阿里云机器学习PAI平台自研的分布式训练框架EPL(Easy Parallel Library,原名whale)。EPL通过对不同并行化策略进行对立形象、封装,在一套分布式训练框架中反对多种并行策略,并进行显存、计算、通信等全方位的优化,来提供易用、高效的分布式训练框架。

EPL背地的技术框架是如何设计的?作为开发者咱们能够怎么应用EPL?将来有哪些布局?明天一起来深刻理解。

EPL是什么

EPL(Easy Parallel Library)是阿里最近开源的,对立多种并行策略的、灵便易用的自研分布式深度学习训练框架。

1.我的项目背景

随着近些年深度学习的火爆,模型的参数规模也增长迅速,OpenAI数据显示:

2012年以前,模型计算耗时每2年增长一倍,和摩尔定律保持一致;
2012年后,模型计算耗时每3.4个月翻一倍,远超硬件倒退速度;

特地最近一年模型参数规模飞速增长,谷歌、英伟达、阿里、智源研究院都公布了万亿参数模型,有大厂也公布了百亿、千亿参数模型。随着模型参数规模增大,模型成果也在逐步提高,但同时也为训练框架带来更大的挑战。以后曾经有一些分布式训练框架,例如:Horovod、Tensorflow Estimator、PyTorch DDP等反对数据并行,Gpipe、PipeDream、PipeMare等反对流水并行,Mesh Tensorflow、FlexFlow、OneFlow、MindSpore等反对算子拆分,但当咱们要训练一个超大规模的模型时会面临一些挑战:

* 如何简洁易用:
接入门槛高:用户实现模型分布式版本难度大、老本高,须要有领域专家教训能力实现高效的分布式并行策略;
最优策略难:随着钻研人员设计出越来越灵便的模型,以及越来越多的并行减速办法,如果没有主动并行策略摸索反对,用户很难找到最适宜本身的并行策略;
迁徙代价大:不同模型适宜不同的混合并行策略,但切换并行策略时可能须要切换不同的框架,迁徙老本高;

* 如何进步性价比:
业界训练万亿规模模型须要的资源:英伟达 3072 A100、谷歌 2048 TPU v3,资源老本十分高;
如何降本增效,组合应用各种技术和办法来缩小须要的资源,进步训练的速度;
为了应答以后分布式训练的挑战,咱们研发了分布式训练框架EPL,将不同并行化策略进行对立形象、封装,在一套分布式训练框架中反对多种并行策略。EPL同时提供简洁易用的接口,用户只需增加几行annotation即可实现并行策略的配置,模型代码不须要改变。在用户无感的状况下,EPL通过进行各种显存、计算、通信优化,打造高效的分布式训练框架。

2.次要个性

  • 多种并行策略对立:在一套分布式训练框架中反对多种并行策略(数据/流水/算子/专家并行)和其各种组合、嵌套应用;
  • 接口灵便易用:用户只需增加几行代码就能够应用EPL丰盛的分布式并行策略,模型代码无需批改;
  • 主动并行策略摸索:算子拆分时主动摸索拆分策略,流水并行时主动摸索模型切分策略;
  • 分布式性能更优:提供了多维度的显存优化、计算优化,同时联合模型构造和网络拓扑进行调度和通信优化,提供高效的分布式训练;

3.开源地址

EPL(Easy Parallel Library)的开源地址是:
https://github.com/alibaba/Ea...

咱们同时提供了model zoo,欢送大家试用:
https://github.com/alibaba/Fa...

EPL次要技术特点

EPL通过丰盛并行化策略,简略易用的接口,多维度的显存优化技术,和优化的计算通信减速技术,让每一个算法工程师都能轻松训练分布式大模型工作。

  • 丰盛的并行化策略:EPL提供了多种并行化策略及其组合策略,蕴含数据并行,流水并行,算子拆分并行及并行策略的组合嵌套。丰盛的策略抉择使得不同的模型构造都能找到最适宜本人的分布式训练形式。
  • 易用性:用户的模型编程接口和训练接口均基于TensorFlow,用户只需在已有的单机单卡模型上做简略的标记即可实现不同的分布式策略。EPL设计了两种简略的策略接口(replicate/split)来表白分布式策略及混合并行。分布式策略标记的形式让用户无需学习新的模型编程接口,仅需几行代码即可实现和转换分布式策略,极大升高了分布式框架的应用门槛。
  • 显存优化:EPL提供了多维度的显存优化技术,蕴含主动重算技术(Gradient Checkpoint),ZeRO数据并行显存优化技术,CPU Offload技术等,帮忙用户用更少的资源训练更大的模型。
  • 通信优化技术:EPL深度优化了分布式通信库,包含硬件拓扑感知,通信线程池,梯度分组交融,混合精度通信、梯度压缩等技术。

1.技术架构

EPL框架如下图所示,次要分为以下几个模块:

  • 接口层:用户的模型编程接口基于TensorFlow,同时EPL提供了易用的并行化策略表白接口,让用户能够组合应用各种混合并行策略;
  • 两头表白层:将用户模型和并行策略转成化外部表白,通过TaskGraph、VirtualDevices和策略形象来表白各种并行策略;
  • 并行化引擎层:基于两头表白,EPL会对计算图做策略摸索,进行显存/计算/通信优化,并主动生成分布式计算图。
  • Runtime执行引擎:将分布式执行图转成TFGraph,再调用TF 的Runtime来执行;

2.并行化策略表白

EPL通过strategy annotation的形式来划分模型为多个TaskGraph,并在此基础上进行并行化。 EPL有两类strategy:replicate 和 split。通过这两种并行化接口,能够表白出各种不同的并行化策略,例如:

  • 数据并行: 上面这个例子是一个数据并行的例子,每个模型正本用一张卡来计算。如果用户申请了8张卡,就是一个并行度为8的数据并行任务。

  • 流水并行:在上面的例子里,模型被切分成2个 TaskGraph, "stage0"和"stage1",用户能够通过配置pipeline.num_micro_batch参数来设定pipeline的micro batch数量。 在这个例子里,"stage_0"和"stage_1"组成一个模型正本,共须要2张GPU卡。如果用户申请了8张卡,EPL会主动在pipeline外嵌套一层并行度为4的数据并行(4个pipeline正本并行执行)。

  • 算子拆分并行:在以下例子中,EPL会对split scope下的模型定义做拆分,并搁置在不同的GPU卡上做并行计算。

同时EPL反对对上述并行策略进行组合和嵌套,来组成各种混合并行策略,更多示例能够参考开源代码的文档和示例。

3.显存优化

当模型增长,GPU的显存经常成为训练大模型的瓶颈。EPL提供了多维度的显存优化技术,极致优化了训练显存消化。

  • 重算 Recomputation (Gradient Checkpoint):失常的DNN前向过程中会生成activation,这部分activation会在后向过程中用于梯度的计算。因而在梯度生成之前,前向的activation会始终存留在显存中。activation大小和模型构造以及batch size相干,通常占比都十分高。Gradient Checkpoint (GC) 通过保留前向流传过程中的局部activation,在反向流传中重算被开释的activation,用工夫换空间。GC中比拟重要的一部分是如何抉择适合的checkpoint点,在节俭显存,保障性能的同时,又不会影响收敛性。EPL提供了主动GC性能,让用户能够一键开启GC优化性能。
  • ZeRO:在数据并行的场景下,每个卡上会寄存一个模型正本,optimizer state等,这些信息在每张卡上都是一样存在很大的冗余量。当模型变大,很容易超出单卡的显存限度。在分布式场景下,咱们能够通过相似DeepSpeed ZeRO的思路,将optimizer state和gradient分片存在不同的卡上,从而缩小单卡的persistent memory占用。
  • 显存优化的AMP(Auto Mixed Precision):在惯例的AMP里,须要保护一个FP16的weight buffer,对于参数量比拟大的模型,也是不小的开销。EPL提供了一个显存优化的AMP版本,FP16只有在用的时候才cast,从而节约显存。
  • Offload: Offload将训练的存储空间从显存扩大到内存甚至磁盘,能够用无限的资源来训练大模型。

同时,EPL反对各种显存优化技术的组合应用,达到显存的极致优化。咱们在T5模型上开启GC+ZeRO+显存优化的AMP技术,在性能放弃不变的状况下,显存升高2.6倍。

利用场景

EPL适宜不同场景的模型,在阿里外部曾经反对图像、举荐、语音、视频、自然语言、多模态等业务场景,同时也能够反对不同规模的模型,最大咱们实现了10万亿规模的M6模型训练,上面以M6和Bert模型为例进行介绍。

1.万亿/10万亿 M6模型预训练

训练一个万亿/10万亿参数模型的算力需要十分大,为了升高算力需要,EPL中实现了MoE(Mixture-of-Experts)构造,MoE的次要特点是稠密激活,应用Gating(Router)来为输出抉择Top-k的expert进行计算(k罕用取值1、2),从而大大减少算力需要。

EPL反对专家并行(Expert Parallelism, EP),将experts拆分到多个devices上,升高单个device的显存和算力需要。同时数据并行有利于晋升训练的并发度,因而采纳数据并行+专家并行组合的混合并行策略来训练M6模型:MoE layer采纳专家并行,其余layer采纳数据并行。

EPL中提供简洁易用的接口来进行模型的混合并行训练,只须要减少几行annotation来配置并行策略,模型自身不须要任何批改。例如,M6模型采纳数据并行+专家并行的策略,只须要减少如下图的annotation:

同时为了节约训练资源,进步训练效率,咱们采纳了EPL的显存优化技术和计算通信减速技术,蕴含主动 Gradient Checkpointing节俭activation显存占用,CPU Offload技术用于优化optimizer states和weight的显存占用,采纳DP+EP混合并行策略升高算力需要,和联合混合精度、编译优化等技术进步训练效率等。

借助EPL框架,首次在480 V100 上,3天内实现万亿M6模型的预训练。相比此前业界训练等同规模的模型,此次仅应用480张V100 32G GPU就胜利训练出万亿模型M6,节俭算力资源超80%,且训练效率晋升近11倍。进一步应用512 GPU在10天内即训练出具备可用程度的10万亿模型。

2.流水并行减速Bert Large模型训练

对于Bert Large模型,结构图如下图所示:

因为Bert Large模型对显存耗费较大,Nvidia V100 16G显卡上batch size经常只有2-8左右(具体值和Embedding大小、Sequence Length等无关)。Batch size太小会导致算法收敛稳定大,收敛成果差的问题。同时通过数据并行模式训练通信占比拟高,分布式减速成果不现实。

剖析Bert Large模型,由24层反复构造的encoder组成,能够应用流水并行进行减速。这里咱们将Bert Large中的Encoder Layer 1~8层、Encoder Layer 9~16层,Encoder Layer 17~24层别离放在不同的卡上进行训练,并行化后的计算图如下图所示:

此时每张卡训练时的显存开销会缩小,从而能够增大batch size以晋升收敛减速。另外,对于模型过大单卡显存无奈放下导致无奈训练的场景,通过Layer间拆分的模型并行形式来进行分布式训练。通过epl.replicate接口能够实现模型的stage划分,同时通过流水并行的执行调度来晋升并行化性能,如下图所示:

上述例子是一个流水micro batch mumber为5的状况。通过流水并行优化后的时间轴能够看出,在同一个工夫上多张卡能够并行计算。当5个micro batch完结后,每张卡会将梯度进行本地的累计之后再进行update。与单纯的模型并行相比,通过流水的交替执行,进步了GPU的利用率。EPL还通过采纳Backward-Preferred调度优化策略来晋升流水并行性能,升高GPU闲暇工夫和显存开销。

为可能取得更高的程度扩大,EPL还反对在流水并行外嵌套数据并行来晋升训练吞吐。EPL会主动推导嵌套的数据并行的并行度。在32卡GPU规模下,应用EPL的流水并行+数据并行,相较于数据并行失去了66%的晋升。

Roadmap

咱们决定建设开源生态次要有如下的思考:

  • EPL发祥于阿里云外部的业务需要,在服务外部业务的过程中,咱们积攒了大量的教训和了解,很好的反对了大规模、多样性的业务场景,在咱们本身随着业务需要的迭代逐步欠缺的同时,也心愿可能开源给社区,将本身积攒的教训和了解也同样回馈给社区,心愿和深度学习训练框架的开发者或深度学习从业者之间有更多更好的交换和共建,为这个行业奉献咱们的技术力量。
  • 咱们心愿可能借助开源的工作,收到更多实在业务场景下的用户反馈,以帮忙咱们继续欠缺和迭代,并为后续的工作投入方向提供输出。
  • 同时咱们心愿借助开源的工作,能吸引一些气味相投的同学、公司或组织来参加共建,继续欠缺深度学习生态。

后续咱们打算以两个月为单位公布Release版本。EPL近期的Roadmap如下:

  • 继续的性能优化和稳定性改良;
  • 通用算子拆分性能;
  • 主动拆分策略摸索的根底版;
  • 主动流水并行策略摸索;

此外,在中长期,咱们在上面几个探索性的方向上会继续投入精力,也欢送各种维度的反馈和改良倡议以及技术探讨,同时咱们非常欢送和期待对开源社区建设感兴趣的同行一起参加共建。

  • 全自动的模型并行策略摸索;
  • 高效的策略摸索算法和精准的CostModel评估;
  • eager model下的并行策略摸索;
  • 更多新硬件的反对、适配和协同优化;
  • 高效的算子优化和集成、极致的显存优化、软硬一体的通信优化;

欢送退出EPL用户交换群,钉钉群号:34761216。

参考文献

  1. Whale: Scaling Deep Learning Model Training to the Trillions https://arxiv.org/abs/2011.09208
  2. https://openai.com/blog/ai-an...
  3. ZeRO: Memory Optimizations Toward Training Trillion Parameter Models. https://arxiv.org/abs/1910.02054
  4. BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding https://arxiv.org/abs/1810.04805