关于分布式:阿里开源支持10万亿模型的自研分布式训练框架EPLEasyParallelLibrary

5次阅读

共计 5918 个字符,预计需要花费 15 分钟才能阅读完成。

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

作者 | 王林、飒洋
起源 | 阿里技术公众号

一 导读

最近阿里云机器学习 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 是什么

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,资源老本十分高;
  • 如何降本增效,组合应用各种技术和办法来缩小须要的资源,进步训练的速度;

为了应答以后分布式训练的挑战,阿里云机器学习 PAI 团队自主研发了分布式训练框架 EPL,将不同并行化策略进行对立形象、封装,在一套分布式训练框架中反对多种并行策略。同时,EPL 提供简洁易用的接口,用户只需增加几行 annotation(正文)即可实现并行策略的配置,不须要改变模型代码。EPL 也能够在用户无感的状况下,通过进行显存、计算、通信等全方位优化,打造高效的分布式训练框架。

2 次要个性

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

3 开源地址见文末

三 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。通过这两种并行化接口,能够表白出各种不同的并行化策略,例如:

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

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

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

4、同时,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 反对各种显存优化技术的组合应用,达到显存的极致优化。阿里云机器学习 PAI 团队在 T5 模型上开启了 GC+ZeRO+ 显存优化的 AMP 技术,在性能放弃不变的状况下,显存升高 2.6 倍。

四 利用场景

EPL 适宜不同场景的模型,在阿里巴巴外部曾经反对图像、举荐、语音、视频、自然语言、多模态等业务场景。同时,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 的流水 + 数据并行对 Bert Large 模型进行优化,相比于数据并行,训练速度晋升了 66%。

五 Roadmap

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

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

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

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

此外,在中长期,咱们将在软硬件一体优化、全自动策略摸索等几个探索性的方向上继续投入精力,也欢送各种维度的反馈和改良倡议以及技术探讨,同时咱们非常欢送和期待对开源社区建设感兴趣的同行一起参加共建。

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

原文链接
本文为阿里云原创内容,未经容许不得转载。

正文完
 0