社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

新国立尤洋:夸父AI——用于大规模并行训练的统一深度学习系统

AI科技评论 • 3 年前 • 401 次点击  
自十年前AlexNet等模型在计算机视觉领域大放异彩,深度学习算法逐渐流行起来。近年来,BERT等大模型深受大公司喜爱,自2018年至今,最顶尖的大模型的规模越来越大,如GPT-3有1750亿参数,2021年的Switch Transformer达到了1.6万亿参数,智源“悟道”模型更是达到了1.75万亿参数。由此,OpenAI做出了一个预测:顶尖的AI模型每3.5个月更新换代一次。而与之对应的,内存的更新换代速度却在35个月左右。也就是说,AI模型的翻倍速度十倍快于内存的翻倍速度,这就导致了AI应用与硬件的不匹配。

本文整理自青源 LIVE 第 33 期,视频回放链接:https://hub.baai.ac.cn/live/?room_id=209
主讲丨尤洋
整理牛梦琳
审校李梦佳



主讲人:尤洋是新加坡国立大学计算机系的校长青年教授 (Presidential Young Professor),加州大学伯克利分校博士。尤洋的研究专长包括高性能计算,并行算法,以及机器学习。他曾以第一作者身份获得了国际并行与分布式处理大会(IPDPS)的Best Paper Award(0.8%获奖率)和国际并行处理大会(ICPP)的Best Paper Award(0.3%获奖率)。尤洋曾获清华大学优秀毕业生,北京市优秀毕业生,国家奖学金,以及当时清华大学计算机系的西贝尔奖学金。他还在2017年获得美国计算机协会(ACM)官网上颁给优秀在读博士生的ACM-IEEE CS George Michael Memorial HPC Fellowship。他也获得了颁发给伯克利优秀毕业生的Lotfi A. Zadeh Prize。他还被伯克利提名为ACM Doctoral Dissertation Award候选人(81名博士毕业生中选2人)。他在2021年被选入福布斯30岁以下精英榜 (亚洲)并获得IEEE-CS超算杰出新人奖。

更多信息请查看研究小组主页(https://ai.comp.nus.edu.sg/) 。




1

背景
随着“普惠AI”时代的到来,深度学习算法被越来越多的应用于各行各业。然而,AI模型与硬件在更新速度上的差距,导致了AI应用于硬件的不匹配。这种不匹配,无疑会对未来整个计算机系统的发展产生一系列的影响。

“夸父”AI系统的设计目的就是使用户可以专注于实现AI的功能,而不必花费精力关注整个计算机系统的性能或者工程化问题。为此,我们希望拥有一个自动优化或者分布式调度系统,这个系统应当可以最大化运行效率并最小化运行时间,从而最小化通讯代价,最终降低企业实现AI落地的成本。

当前,为了实现上述优化,主要的思路是最大化地挖掘算法的并行度。




2

并行(Parallelism)
随着深度学习模型的参数量越来越多,数据集的尺寸也随之疯狂地增长。为了在一个巨大的数据集上训练一个复杂的深度学习模型,我们不得不使用多节点的并行方式。对于深度学习而言,目前工业界应用的并行方式主要有三种:数据并行,流水线并行和模型并行。

数据并行(Data Parallelism):在现代深度学习中,因为数据集越来越大,以至于很难将其把它全部载入内存,因此,通常把大的数据集分割为很多小批次(batch),使用随机梯度下降法,在不同GPU上计算一个小批次,对若干个GPU的梯度估计结果进行汇总后,进行加权平均,最终求和就得到了最终的数据集的梯度估计结果。数据并行是最简单,最稳定,也是现在应用最多的并行方式。

流水线并行(Pipeline Parallelism):深度学习通常由很多层构成,但流水线并行并非简单的对层与层之间的计算进行并行,而是将不同层的数据集分割为流水线批次,用不同的GPU计算不同的流水线批次。流水线并行本质上依赖于数据并行,只要保证batch size远大于GPU的数量,就可以保证流水线并行的效率。

模型并行(Tensor Parallelism):模型并行更多的是一种对计算机资源的分配问题,也可以理解为层内并行。把整个模型按层分解成若干份,把每一份(其中的层是连续的)载入不同的GPU中,也即是每个不同的GPU计算着整个模型的不同的层的梯度。模型并行减少了单个GPU的参数量,并且使得用更为精确的梯度进行计算提供了可能性。NVIDIA的Megatron和微软的DeepSpeed就应用了模型并行的方式。


除了以上三种并行方式外,为了最大化并行度,使处理时间缩到最短,在这里引入了新的并行方法:数据序列并行(Sequence Parallelism)。

模型的参数(weights)和梯度(Gradients)以及优化器(Optimizer),通常会占用很大的内存,极端情况下,如果数据序列过长,或者长序列的每个点(Sample)过大,会导致内存不能支持模型的训练。在这种情况下,数据序列并行更适合处理这种长序列数据。

对于数据序列并行的优势,以Transformer为例,将数据序列并行与1D的模型并行进行比较(如下图所示):


根据对比结果,在序列长度固定的情况下,线性增加batch size,数据序列并行占用的内存更小,并且基本恒定;而batch size不变,线性增加序列长度,可以看出数据序列并行也是更占优势。所以数据序列并行进一步提升了并行度。



3

优化

模型并行优化

  
对模型并行而言,不同GPU之间进行通信时,潜在通信代价非常高,为了降低这种代价,可以考虑将这些模型化成二维模型,即把矩阵划分成行列的模式,每次每个GPU只需跟同行或同列的GPU进行数据传输,所以可以极大地降低通信代价。

同理,可以将这个思路推广到三维的方式。
将1D与2D的模型并行进行比较,可以看出随着GPU个数的增加,并行的效率进一步提升(如下图所示):


LARS/LAMB算法


由于流水线并行依赖于数据并行,所以还需要优化数据并行,流水线并行也可以收益。

目前在工业界,数据并行的优化其实已经基本实现。但通常在优化数据并行时,增加batch size 往往会造成精度(Accuracy)的损失。通过之前英特尔的研究,可以发现large batche 很容易收敛到Sharp Minimum,这种最优点意味着训练精度高而测试精度低,所以并不是好的最优点。


通过实验发现,在每次循环中,深度学习模型不同的层的学力不同,学力的稳定性也不同,通过LARS/LAMB算法,设置一个指标反映每一层在循环中的稳定性,例如计算Lipschitz常数。Lipschitz常数越大,稳定性越差。这里利用Trust Ratio反应每一层的稳定性,然后在同义次循环内,让稳定的层计算更快,不稳定的层计算更慢,从而最大化学力。


利用LARS方法,对Larger batch进行训练是,可以得到较好的Accuracy。


LARS和LAMB也是Paperwithcode目前唯一认证的两种Large batch训练方法,由下图可以看出这两种方法在应用上的效果也很好。



4

「夸父」AI系统
为了实现让用户专注于实现上层功能,摆脱对计算机系统性能的关注,“夸父”AI系统采用了以下的技术:

1.6D并行:包括三维的模型并行与流水线并行和数据序列并行
2.隔离性:“夸父”系统采取了很好的隔离性,将分布式实现与应用的实现隔离开来,并建立不同的模块。
3.模块化:让不同的模块相互独立,互不干扰。
4.拓展性:允许用户自行更改个人组件。
5.兼容性:能够很好地兼容现有的系统,如DeepSpeed, Megatron-LM等。
以下是“夸父”AI的开源地址以及论文地址:
代码地址: https://github.com/hpcaitech/ColossalAI
论文地址:https://arxiv.org/abs/2110.14883



5

精彩QA
Q1:如何实现大模型的产业落地?
A:可以分层次来看。首先,对于走在行业前端的大公司,如微软,谷歌,字节等,其实已经实现了大模型的落地。其次,当前可见许多典型的大模型应用场景,如AI制药,车载系统等,而从趋势上看,大模型的普及将会从这些典型例子慢慢延展开来。

Q2:像高校这种硬件资源相对缺乏的机构应如何进行大模型研究?在大模型应用过程中,如何处数据的隐私问题?
A:资源性的问题是难以避免的,可以考虑高校与工业界进行合作来解决这个问题,也欢迎大家与我们的团队进行合作。关于隐私问题,目前比较好的处理方式之一,是公司将大模型引入私有的计算资源,或直接进行加密的研究。

Q3:关于序列并行有哪些只得注意的地方?
A:序列并行下多GPU之间数据传输方式使用的是NVLink,但其他的Link也可以,实际上,序列并行的算法与Link并没有关系;序列并行模型与原模型是等价的,序列并行模型对原模型不会产生影响;“夸父”并不是只能在超算上使用,CPU,GPU都可以,没有限制。

Q4:在大模型训练中将Layer拆分到不同的GPU上进行并行处理,数据传输速度是关键指标吗?
A:传输速度的确很关键。以NVIDIA为例,他们的方案用了3072个GPU:一个服务器有8个GPU,用来专注于进行模型并行;然后在64个服务器之间运用流水线并行;再设置6个小组,每个组有64个服务器,这六个组之间进行数据并行。最后正好占满了3072个GPU。这是工业界为了降低传输速度影响的一个很好的解决方案。

Q5:当前框架是否会有硬件差异感知的考量,还是将系统并行节点当做对等的节点?
A:当前主流的框架,如pytorch等,确实是将并行节点当做对等的节点。但如果将来的语音环境更加复杂,那么硬件差异感知就会变得越来越重要的,到时候需要进一步的实现和优化。

Q6:「夸父」系统是如何提升内存效率的?
A:首先,如2D、2.5D等并行划分方式本身就是为了将模型更好地划分,以提升内存效率;然后,我们做了一些工作来提升内存效率,如基于微软的思路,对ZeRO进行改进;最近我们团队也做了一些其他的优化工作,这些工作展示在我们最新的论文里。

推荐阅读

GAIR 2021大会首日:18位Fellow的40年AI岁月,一场技术前沿的传承与激辩

2021-12-10

致敬传奇:中国并行处理四十年,他们从无人区探索走到计算的黄金时代 | GAIR 2021

2021-12-09

时间的力量——1991 人工智能大辩论 30 周年纪念:主义不再,共融互生|GAIR 2021

2021-12-12

论智三易,串联通讯,贯通边缘,演进认知,汇于机器:听五位IEEE Fellow畅谈AI未来 | GAIR 2021

2021-12-25


由于微信公众号试行乱序推送,您可能不再能准时收到AI科技评论的推送。为了第一时间收到AI科技评论的报道, 请将“AI科技评论”设为星标账号,以及常点文末右下角的“在看”。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/125168
 
401 次点击