GTC大会飞桨专家演讲实录:简单易用的飞桨分布式训练功能升级

有着“年度 AI 风向标”之称GTC 大会是英伟达每年最重要的发布平台之一,广纳当今计算领域最热门话题的相关培训和见解,并为广大开发者创造与顶级专家交流的机会。12月15日-19日,GTC中国大会首次以线上大会的形式与开发者相见,共组织265场技术演讲,演讲者分别来自百度、阿里、腾讯、字节跳动等众多知名企业与清华大学、中科院计算所等知名高校。百度飞桨也贡献了四个主题演讲,现在为您带来飞桨大规模分布式训练进展与应用的演讲实录。

课程链接:https://nvidia.gtcevent.cn/forum/watch?session_id=CNS20351

AI Studio链接:https://aistudio.baidu.com/aistudio/education/group/info/2099

大规模分布式训练作为飞桨的重要功能模块,在并行训练API、并行策略、框架基础架构都有了相应的更新升级。在一小时的演讲中,百度主任研发架构师董大祥围绕飞桨框架新版本的大规模训练与应用展开,介绍了大规模分布式训练的功能、性能、以及在产业中的实践。

以下为演讲实录部分:

飞桨的这次改动中主要是对并行训练API进行了全面更新,使代码变得更加简洁,也更方便调试,另外也对并行训练的策略进行了进一步的升级,可以适用于更大规模的模型参数。

飞桨的分布式训练API——Fleet的1.X版本已经投入使用,但一直在内部不断地打磨优化和一些升级,所以在文档中处于面向用户隐藏的状态。新版本中,我们固定了分布式训练API,正式面向外部的开发者开放,同时也把一些主流的训练模式,包括集合通信训练和参数服务器训练,做成统一的Fleet API(paddle.distributed.fleet),并在集合通信训练功能下实现了动态图和静态图训练API的统一。

如下三份代码分别展示了采用参数服务器训练、集合通信训练的动态图和静态图方式训练模型的示例代码,可以看到仅需要几行代码的新增即可完成单机转化为分布式训练的目标。

为了让用户能够灵活定义不同的分布式训练模式,我们开放了分布式加速策略distributed strategy类供用户定义并行训练的策略,比如我们可以去定义同步训练或者异步训练,可以去定义自动和精度训练等等。如下是distributed strategy类涵盖的一些分布式加速策略API,几乎囊括了所有能够用到的分布式训练加速策略。

另外我们考虑到用户的调试体验,也在执行方式上做了改进,如果用户采用Fleet去写分布式训练的代码,在单机和多机上都可以执行训练。Fleet API识别出来用户在跑单机训练,就会在底层屏蔽掉一些多机的逻辑,另一个就是用户可以去使用fleetrun的启动接口执行单机多卡的任务或多机多卡的任务,需要强调的就是这两种执行方式都是同一份代码,也就是用户可以很容易的在多机多卡和单机单卡之间做切换和调试。

飞桨新版本也开放了分布式通信的底层API,面向高级用户提供了可微分的分布式编程能力,开放了比如broadcast、all_reduce、reduce、all_gather等操作的前向与反向操作,还会开放更多的底层接口来满足开发者修改底层通信逻辑的需求。

  与友商的性能对比

GPU卡具有显存限制,这使得模型大小及训练的Batch大小存在上限。我们设计了低成本扩大Batch的方法,gradient_merge梯度累积,对于不含BatchNormalization的模型有较好扩展性,性能几乎无损。另外我们还提供了半精度通信等横向扩展的能力,假使我们在训练的过程中使用的是一些比较老的GPU集群,比如p40不支持 FP16的计算,但是在通信的过程中是可以把 FP32精度量化为FP16精度后再进行通信,这样可以在训练精度几乎无损的情况下降低网络带宽占用。通过实测,P40下单机八卡训练VGG16模型,训练吞吐可以提升70%。

在超大规模模型参数的GPU训练支持上,飞桨框架2.0的RC版本推出sharding策略,开发者使用sharding策略即可训练参数超过百亿、甚至千亿级别的模型,例如openAI的GPT-3模型,百度的Plato模型。sharding策略的原理是利用模型分片存储,把超大规模模型参数的维护分布在各个GPU卡上,并通过集合通信操作All-Gather来实现模型参数的临时获取,在计算利用局部模型参数进行计算完成后即释放临时维护的模型参数。

飞桨当前的并行策略与选项开关较多,面向初级用户的使用仍然存在一定的门槛,在新版本中,面向用户提供可以自动并行的第一级(O1)功能,即并行策略组合功能,飞桨在用户开启自动并行选项时即可在底层自动打开尽可能帮助用户加速的并行策略。在随后的版本中,飞桨还会逐渐开放更高级的自动并行功能,例如在运行时动态调整并行策略等。

在适配多硬件进行分布式训练方面,飞桨正式推出异构参数服务器训练架构,充分利用AI芯片的计算能力提升训练吞吐,并兼容新接入的硬件进行并行训练,例如百度的XPU芯片。

飞桨框架新版本全面升级了面向开发者的编程接口,在分布式训练方面也本着持续降低用户使用门槛的方向进行编程接口的设计,同时也兼顾高级的开发者进行底层通信逻辑修改的需求开放底层API。在并行训练的策略、功能升级方面,飞桨也持续提升了并行训练的横向扩展性和纵向扩展性,提供目前最火热GPT家族模型训练能力,支持千亿模型参数的GPU训练,在对接硬件生态方面也推出了大规模异构参数服务器训练架构,方面更多的硬件快速接入飞桨分布式训练能力。

【关于飞桨】

飞桨(PaddlePaddle)以百度多年的深度学习技术研究和业务应用为基础,是中国首个开源开放、技术领先、功能完备的产业级深度学习平台,包括飞桨开源平台和飞桨企业版。飞桨开源平台包含核心框架、基础模型库、端到端开发套件与工具组件,持续开源核心能力,为产业、学术、科研创新提供基础底座。飞桨企业版基于飞桨开源平台,针对企业级需求增强了相应特性,包含零门槛AI开发平台EasyDL和全功能AI开发平台BML。EasyDL主要面向中小企业,提供零门槛、预置丰富网络和模型、便捷高效的开发平台;BML是为大型企业提供的功能全面、可灵活定制和被深度集成的开发平台。