阿里云机器学习PAI发布基于HLO的全自动分布式系统 TePDist,并宣布开源!

作者:品曲,宗雁,佀畅,侠雕,伟林

导读

一直以来,大模型在模型效果上被证明具有显著优势。而ChatGPT的出现,证明了其在工业生产工具方面具有巨大潜力。毫无疑问,大模型的训练需要巨大的算力,这对分布式并行框架是一项考验。现如今,业界越来越多的团队纷纷转向分布式框架的研究与开发之中,既有针对特定场景特定模型的极致手工优化,也包括面向通用模型通用场景的自动分布式工作。然而,它们在实际生产场景仍然有一些挑战。一方面,对于手工优化的框架,虽然其特定情况下的性能较为极致,但通用性存在限制。另一方面,现有的自动分布式框架可能在通用性和性能方面表现较好,但通常需要忍受较长的策略搜索时间,进而对业务落地产生一定的影响。为了应对以上问题,PAI 团队推出并开源了TePDist(Tensor Program Distributed System),它通过在HLO上做分布式策略搜索,实现与用户模型语言解耦。并且在保持通用性的同时,在可接受的策略搜索时间内,追求高性能分布式策略。

TePDist背后的技术框架如何设计?未来有哪些规划?今天一起来深入了解。

TePDist是什么?

TePDist是阿里云PAI团队自研的基于HLO IR层的全自动分布式深度学习系统,它不仅仅是一个分布式Compiler,还拥有自己的分布式Runtime,有效地解决了深度学习模型并行策略的自动搜索与分布式策略实施问题。

在架构方面,TePDist采用Client/Server模式,实现分布式策略与模型描述的解耦。Server端是TePDist最重要部分,它以HLO IR作为输入,自动探索并实施分布式并行策略;Client端以用户描述的模型为输入,将其转换成HLO IR。因此,任何具有转换HLO IR能力的Client,都可经过适配后接入Server端。

在功能方面,TePDist分为两个部分。一是在HLO IR上进行SPMD(Data Parallel和Sharding)和Pipeline并行的策略搜索。并以此构建编译基于Task Graph的执行计划。二是高效运行执行计划的分布式执行引擎。

在使用方面,TePDist提供了不同优化级别,高优化级别更加追求分布式策略质量,低优化级别会额外采取一些Heuristic,以较为微小策略质量牺牲,换取更快地搜索时间,以此满足落地需求。

项目开源地址:https://github.com/alibaba/TePDist

TePDist的主要特性如下:

  • 一套完整的系统:采用Client/Server模式。Client可以是任何能够生成XLA HLO的前端。Server负责进行分布式策略规划,以及自动分布式任务拉起。Client与Server解耦的动机是期望将来更方便地对接不同的前端框架。
  • 以HLO IR作为Server端输入:HLO的粒度刚刚好,目前看到的超大模型基本上有上万条HLO指令。在HLO这个层级做分布式策略规划,可以避免依赖灵活多变的模型高层次抽象,以不变应万变。
  • 全自动探索分布式策略:TePDist支持在没有任何annotation的情况下做策略搜索。当然,用户也可以选择通过annotation进行一定程度的干预。
  • 定义不同优化级别:用户可以选择使用O2和O3两个优化级别,用以控制策略搜索时间。它们均为Cost based策略搜索方法。其中O2级别采用了一定的Heuristic,会以牺牲轻微的并行策略质量为代价,换取更快地搜索时间,这对超大规模模型非常有用。O3级别对策略的质量有一定的保证。
  • 合理拆解策略搜索问题:TePDist采用了多种手段,把策略探索问题拆解成优化子问题,运用多种算法,分别对子问题进行求解,有效管理了问题的复杂性。
  • 具有特色的流水线并行规划:无需把DAG排成拓扑线性序,我们把stage划分建模成整数线性规划问题(ILP),使用ILP Solver自动寻找通讯量最小的切分方案。

TePDist架构

TePDist采用Client/Server分离的架构,将前端模型构建与后端策略搜索实施解耦。Server端分为两个过程:

  1. 编译(Build Execution Plan):在这个过程中会构建执行计划,包括:自动分布式策略的搜索,device mesh的分配,TepDist执行引擎的构建——Task Graph的构建以及为Task Graph确定静态调度顺序。架构和流程列于下图左图中;
  2. 运行(Execute Plan):编译阶段完成后,Client下达Input data供给指令,即可触发运行该Execution Plan的运行。为了追求高性能和高可控性,我们完全自研了TePDist的运行时,具体包含无损分布式初始化,分布式checkpoint,NCCL复杂通信域的管理,多worker协同管理,以及Task Graph级别的Memory reuse等。架构和流程列于下图右图中;

自动分布式策略搜索

自动分布式是TePDist核心功能之一,我们对SPMD策略的搜索空间做了合理的分层拆解,在不同的层级使用不同的算法。同时对用户提供不同优化级别,用以控制策略搜索的时间。对Pipeline stage划分则无需对DAG按照线性排序,然后使用ILP对其stage的划分进行建模,同时也为用户提供了用于控制搜索时间的剪枝参数。以下对这部分内容做简单的描述,技术的具体细节请参考我们的论文:(TODO)

SPMD Strategy

由于HLO指令数较多,直接使用ILP建模求解可能会因问题规模过大,导致搜索时间过长。显然,通过缩图可以减小问题求解的规模。为此,TePDist将DAG划分为了三个层级,并对每层使用不同的优化方法进行求解。

  1. Cone结构

HLO DAG中存在大量的Cone结构,它对我们的Formulation非常重要。什么是Cone结构?它是包含两种节点的子图:Root节点和非Root节点。其中,Root节点为具有多个输入或特征为计算密集型的节点;非Root节点为其他节点。我们可以在HLO的DAG中识别所有的Cone结构。大多数Cone结构都呈现出“倒三角”的形态,如上图中灰色三角区域标出的部分。显然,Cone代表更粗粒度的节点,我们的算法需要为每个Cone确定切分策略。每个Cone应该有多少种可能得切分策略?答案是取决于其Cone Root有多少种切分策略。具体做法:在Cone内,通过对Cone Root节点枚举的每种切分策略,我们都可以以通信代价最小为目标,通过贪心或动态规划方法求解Cone内剩余节点的切分策略。由此,我们可以得到该Cone的多种不同切分策略,这些策略都是每个Cone的候选策略。

  1. Segment

虽然Cone结构的粒度更粗,在一定程度上缩减了问题规模。但对大模型来说,Cone的数量依然巨大,可能需要进一步处理。事实上,大模型在结构方面具有重复堆叠的特征。这意味着每个模型可能可以划分为多个类似“layer”的结构,从而将大模型分而治之。为此,我们分析了PAI平台上运行的Workload,并总结了一种通用的分图处理方法。通过图分析识别图中所有的关键节点(Critical nodes),并以它们为分图间隔点,将整体模型划分为近似线性的多个Segment,如上图中标出的三个Segment,每个Segment都包含若干Cone结构。这里同样存在一个问题:每个Segment需要保留多少种候选策略?答案是取决于其包含的所有Critical nodes的切分策略数量组合。在做法上,通过对每个Critical node枚举切分策略,以其内部的Cone为基本单元,以最小通信代价为目标,使用整数线性规划(ILP)确定该segment的整体切分策略。

关于critical nodes的识别,可以参考我们论文中的描述。

  1. 整体Graph

Segment之间的近线性拓扑,天然适合动态规划求解。上述为每个Segment确定候选切分策略后,TePDist以最小通信代价为目标,使用动态规划(DP)对整体DAG完成确定唯一策略。

Pipeline Strategy

TePDist在划分Pipeline stage时的一大特点是不需要将DAG排成线性序列。并且,TePDist将Stage划分建模成整数线性规划(ILP)问题求解。划分的基本原则是尽量保证各个stage计算量均匀的情况下,追求最小的通信切面。因为,DAG中的每个节点都可以找到它的祖先节点和后继节点,这种前驱后继的依赖关系可以被描述成ILP问题的线性约束,如下图中蓝色和红色所示。在策略搜索时间的压缩方面,TePDist向用户提供了用于控制stage计算均匀性比率的控制接口。Pipeline建模的具体formulation可以参考我们的论文。

分布式执行引擎

TePDist自己定制了执行引擎,通过将HLO computation实例化并组织成Task Graph,且采用静态调度执行。

Task Graph

为了能够组合各种各样的并行模式,我们抽象了Task Graph。当将并行策略应用到HLO上时,被拆分或切分的多个HLO computation需要组合成完整的执行逻辑,为此我们抽象出了Task Graph,它由一系列具有连接关系的Task Node组成。在Task Graph中,我们约定Source和Sink为起始和终止节点,其他Task Node均为各种HLO computation的实例。举例说明,对含有Gradient Accumulation的训练任务,原始的HLO computation被切分为Compute Gradients、Gradient Accumulation和Apply Gradients三个部分。那么由此创建三种不同的Task Node,然后组合成完整的执行逻辑。下图展现了三种切分策略时,Task Graph的具体形态。

静态调度计划

在构建执行计划期间,TePDist在Task Graph上制定静态调度计划。相比于执行期通过动态调度执行Task Graph来说,静态调度具有更好的性能。一方面,静态调度在编译期间事先把调度顺序确定好,而动态调度十分依赖执行期的管控节点,从而可能因存在中心管理节点而成为性能瓶颈。但静态调度一经确定,每个worker就可以按部就班执行,对中心管控没有依赖。另一方面,静态调度会让显存使用呈现稳定状态。当执行Pipeline并行策略时,1F1B的调度策略能够使显存及时释放,从而降低峰值显存用量。而动态调度就不能保证完全呈现1F1B的调度顺序。

其他

在执行引擎方面,我们还做了如下工作:

  1. 分布式初始化

TePDist直接对Sharding Tensor的各个分片做初始化。为了保证切分后的初始化结果与切分前完全一致,应该给予不同分片于相同的初始化种子,但不同的随机数起始生成状态。在TePDist中,拥有C++层实现的Sharding Initializer,它可以在不同Tensor分片上,令随机数生成器Skip到正确的起始状态进行初始化,并且通过多线程为初始化过程并行加速,这对超大模型十分有用。

  1. 通过NcclContext管理复杂的通信域

复杂的分布式策略可能包含集合通信和点对点通信,而每次通信涉及到Device可能完全不同,这使得通信域的管理变得复杂。TePDist在首次运行开始前会对所有的通信指令和节点做一次收集,然后依次建立对应的通信域,并存入Cache中,以在适当的时机复用。

  1. Task Graph的执行

因为Task Graph是我们提出的新抽象,因此需要对Task Graph运行时做全面的管理,包括:

  • Task Node的多线程异步Launch
  • Input output alias
  • Task Graph级别的垃圾回收机制
  • 协调多机共同执行Task Graph

性能实验

我们在以下两个商用平台上对TePDist做了性能实验,所有实验均采用FP32进行。

  • M8平台:8 * V100-SMX2-32GB GPU w/NVLink2, 2 * Xeon (Skylake) CPU 48C 2.5GHz, 768GB DDR4-2666, 1 * 100G RoCE interconnect.
  • S1平台:1 * V100S-PCIE-32GB GPU, 2 * Xeon (Cascade Lake) 52C 2.5GHz, 512GB

DDR4-2666, 1 * 100G RoCE interconnect.

模型扩展实验

(表格格式根据平台需要修改,也可直接用图片)

我们在GPT和MoE模型上做了SPMD+Pipeline混合策略的模型扩展性实验,并与Alpa和Megatron/DeepSpeed进行了对比。

下面两个表格列出了GPT和MoE的不同版本配置,参数量均逐行递增。

将统计的计算量(TFLOPS)作为扩展性衡量指标。在单机单卡到两机16卡的算力资源上逐步扩展模型,从实验表现看,GPT和MoE在扩展性上表现较好。单精度计算能力方面,V100的理想计算峰值为15.6TFLOPS。TePDist能够使GPT和MoE分别达到峰值能力的62%和58%,和自动分布式的框架Alpa相比,TePDist能够提供基本相当的性能,在某些情况下还会有性能提升。

通用性实验

我们还提供了其他模型的benchmark,来证明TePDist在自动化方面的通用表现。对VGG-19,DNABert和UNet模型做数据弱扩展实验。其中,将VGG-19的分类器扩展到百万分类级别,实验配置如下。

对Wide-ResNet模型做模型弱扩展实验,实验配置如下。

在M8平台上,TePDist均表现出接近理想线性加速比的性能。在VGG-19模型实验中,TePDist找到了将最后一层大规模分类器做模型并行的策略。

不同优化级别

针对GPT-3模型,我们对比了SPMD两种优化级别下的策略搜索完成时间。O2级别表示带有Heuristic的三层搜索算法,O3表示不分层的搜索算法。实验表明,在小模型上,O2级别的优化由于三层的划分以及对每个层级多次使用ILP求解,在搜索效率上并不占优势。但随着模型的增大,其搜索效率显著提高。在超大模型上,O2级别的搜索表现出很大的优势。

RoadMap

后续我们计划定期优化TePDist系统,并不断完成产品化工作。

  1. 继续优化现有的执行引擎
  2. 支持更多样的并行策略
  3. 提供更丰富的前端支持
  4. 自动化显存优化技术

开源地址:https://github.com/alibaba/TePDist

希望各位感兴趣的开发者们加入我们,一起打造更快更好的自动分布式系统!

TePdist开源项目钉群

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/51060.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

外贸怎么在谷歌搜索客户?

通过谷歌开发客户已成为外贸业务员的必备本领了。可以说谷歌收录了我们潜在客户的网站。只要搜索得当,可以短时间把我们的潜在客户全部搜索到。做B端不同做C端,B端的客户在某个垂直领域其实就是那么多,通过谷歌搜索是比较容易搜索到的。 外贸…

Threads上线5天用户增至1亿,Threads软件常见问题百问百答

7月10日,脸书(Facebook)母公司Meta旗下新应用程序Threads上线的第5天,其用户数量已经超过1亿。这一增长速度打破聊天机器人ChatGPT的纪录——推出两个月内活跃用户量才破亿。 Threads或成为史上用户数增长速度最快的消费者应用。 …

支付宝APP支付回调问题

支付宝APP支付回调问题 这里必须要打印 success 七个字符,不然会一直回调。

如何进行简单的支付宝支付测试

最近在做一个很简单的支付功能,开发两天时间,测试半天。。。 下面这个是这个功能的具体需求和测试考虑的测试点,如有不足,欢迎各位大佬指正~~~

支付宝支付功能测试

支付宝支付功能测试 1.准备开发环境 1.1配置沙箱环境 沙箱环境是支付宝开放平台为开发者提供的与生产环境完全隔离的联调测试环境,开发者在沙箱环境中完成的接口调用不会对生产环境中的数据造成任何影响。 沙箱为开放的产品提供有限功能范围的支持,可…

支付宝网页登录见解

方案讨论: 第一个问题在于二维码的生成,如果直接使用支付宝的二维码页面。 页面链接: https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?app_id2018120562496666&scopeauth_user& redirect_urihttps%3A%2F%2Fwww.baidu…

在【微信小程序】中实现 【支付宝支付】是一种什么样的体验?

前言 一名自由职业的程序员的独立开发之路自己的微信小程序中需要实现 企业向个人付款的需求,前前后后折腾了一段时间各种问题,各种坑都有,有技术类的,有非技术类此篇文章做一个记录,希望能帮助到各位有问题大家可以留…

支付宝小程序财富号基金相关页面之间相关跳转

支付宝小程序跳转 %小程序跳转财富号 this.$global.urlHandler(alipays://platformapi/startapp?appIdxxxx00002019101768404279&querypublicId%3Dxxxx00002018061160393077&nbupdatesyncforcee)%小程序跳转基金组合推广页面 this.$global.urlHandler(https://open…

关于支付宝两个回调的说明

前段时间有人问过我支付宝中的回调怎么用,所以这里简单说明下。在集成支付宝支付的时候,会有两个回调,一个在AppDelegate中,一个在支付代码中,都是支付成功的回调,区别是,在AppDelegate中的回调…

【精华贴】支付宝开放平台简介

一、支付宝开放平台是什么? 支付宝开放平台将强大的支付、营销、数据能力,通过接口等形式开放给自研商家与服务商(ISV),帮助商家创建更具竞争力的应用。还可协助商家进行推广营销。 商家接入开放平台后,基于…

白嫖系列软件-------视频

白嫖系列软件-------海阔视界 简介: 影视APP,强大的搜索功能,聚合影视平台或网站,游戏直播,知乎豆瓣等,你想看的这里都能找到。 下载地址:地址1备用地址 相关说明:网址1 注&#xf…

卧槽!竟然可以直接白嫖 Github Action 的 2C7G 服务器。。

GitHub Actions[1] 是 GitHub 的持续集成服务[2],于2018年10月推出[3]。它的功能非常强大,每一个 action 都用来执行一种操作,比如抓取代码、运行测试、登录远程服务器,发布到第三方服务等等。将这些 actions 组合起来&#xff0c…

GitHub学生包白嫖copilot ,copilot chat

安装copilot 首先点击链接:https://github.com/settings/billing 再往下滑动 表示开通成功。 Jetbrains使用Copilot 安装插件GitHub Copilot 重启idea 浏览器输入刚刚复制的验证码,点击继续 授权完成后即可使用 试用,输入注释快速排序&…

双鱼林php学生信息管理系统,双鱼林基于ThinkPHP5图书管理系统demo v1.0

别看 双鱼林基于ThinkPHP5图书管理系统demo只是一个简单的图书管理系统,麻雀虽小,五张俱全,实现了常见字段比如字符串,整型,浮点型,日期型,图片型和文件型的添删改查,查询条件采用多…

双鱼林 android 服务器,双鱼林安卓Android代码生成器下载_双鱼林安卓Android代码生成器官方下载-太平洋下载中心...

双鱼林安卓Android 代码生成器是一款生成安卓手机程序的代码生成器 基于分层模式设计思想,生成的代码直接导入Ecli PSe软件就可以用的!真正面向对象设计:系统的整体设计,提供通过使用面向对象的方法,设计所需系统中的基…

双鱼座的爱恋不是双鱼座的项链

双鱼座守护项链双鱼座从表面上看,双鱼座的人内向而羞怯,然而内心常常是复杂而矛盾的,同时存在着善与恶,精神与物质等对立的争扎。虽然有丰富的想像力,相对的也容易不切实际地做白日梦,幻想着白马王子&#…

双鱼林java_双鱼林Java代码生成器

双鱼林Java代码生成器是一款基于三层模式的.net环境代码生成工具,生成的目标程序使用的是c#脚本语言,可以直接导入到visual studio 2008以上版本运行,目前已经实现了数据层,业务逻辑层代码的全自动生成,生成的网站使用…

数据库之十二星座 --- 双鱼座的复杂关系

提起双鱼座,估计大多想起的是偶像剧里面的神经的男偶(呕吐)像和哭哭啼啼大呼小叫的“女神”经。不过双鱼座本身的真面目却不那么简单,具有天蝎座的第六感,还是加强型,具有巨蟹座的柔情,具有摩羯…

双鱼座适合计算机课吗,双鱼座:和你一样最怕上数学课的5个星座,看到数字就头大...

原标题:双鱼座:和你一样最怕上数学课的5个星座,看到数字就头大 充满艺术感的双鱼座,对于数学往往一窍不通,上辈子没有缘分,各种公式它认识你,你不认识它。因此双鱼座大多数都比较害怕上数学课&a…