如何看待华为 4 月 25 日发布的盘古智能大模型?在这个行业处于什么水平?

相关报道:
收藏者
0
被浏览
128

5 个回答

AngelKiss LV

发表于 6 天前

4月25日,华为云发布盘古系列超大规模预训练模型,包括30亿参数的全球最大视觉(CV)预训练模型,以及与循环智能、鹏城实验室联合开发的千亿参数、40TB训练数据的全球最大中文语言(NLP)预训练模型。

如何看待华为 4 月 25 日发布的盘古智能大模型?在这个行业处于什么水平?-1.jpg

其中,盘古NLP大模型由华为云、循环智能和鹏城实验室联合开发,具备领先的语言理解和模型生成能力:在权威的中文语言理解评测基准CLUE榜单中,盘古NLP大模型在总排行榜及分类、阅读理解单项均排名第一,刷新三项榜单世界历史纪录;总排行榜得分83.046,多项子任务得分业界领先, 向人类水平(85.61)迈进了一大步。
外界对盘古大模型充满了好奇,在华为开发者大会(Cloud)期间,参与大模型开发的两位华为云专家回答了以下几个大家关心的问题。
谢凌曦博士专访


如何看待华为 4 月 25 日发布的盘古智能大模型?在这个行业处于什么水平?-2.jpg

Q:作为一个开发者,请问这些预训练模型的易用性如何?使用成本有多高?

谢凌曦:预训练模型设计的目的就是为了让大家降低使用成本。模型的预训练过程,成本是比较高的,但这个成本不需要开发者来承担。而在使用这些大模型的时候,它本身的易用性会使得使用成本进一步降低,达到一个比较合适的水平。比如说,我们会开发出一些比较通俗易懂的Pipeline,如果你是有一定基础的开发人员,你可以从我们的Pipeline当中去做更多的定制化的开发,更好地去释放我们预训练模型的能力。如果你只是一个AI开发小白,想用大模型去做AI简单的开发,我们也会给你更加通俗易懂的界面,让大家能够用一些拖拉拽的方式使用盘古大模型。总体来讲,大家在使用预训练模型的时候,计算时长、调参所需要重复的代价等都会被降到很低,总体来讲是对开发者非常友好的。
Q:对于新入门计算机视觉的人来说,需要掌握什么哪些知识才能快速进入到学习和研发中?

谢凌曦:人工智能、计算机视觉,经过几十年的发展,到现在已经拥有很庞大的知识体系。如果一个初学者想要把这些东西都了解以后再开始做研究,效率会稍微有点低。我给大家的建议是,你在学习过程当中,可以先找准一个问题。刚开始的时候,这个问题可能是相对初级的问题,但一定有具体的场景。比如想做弱监督学习,一般就是遇到某个实际的问题,它确实需要弱监督算法。但是这个时候我是不是一定要掌握全监督才能去做弱监督呢?并不是这样的。你可以先去查阅一些资料,了解当前的弱监督学习方法,它的基线是什么,它的前沿在哪里。然后你就可以开始做一些简单的实验。实验的过程当中,一般会遇到一些困难或者一些疑惑。解决这些困难和疑惑的过程,一般就会把你引导到它的基础,比如说全监督到底是怎么做的。当你有了更多基础以后,回过头来,也会发现你对当前做的算法有了一个更好的理解。
所以我的建议是大家可以找一本机器学习、计算机视觉这类介绍比较深入的教材去看。但是不要局限于这个教材:一边做具体的课题,一边去学习知识,效率会比较高。
张晓鹏博士专访


如何看待华为 4 月 25 日发布的盘古智能大模型?在这个行业处于什么水平?-3.jpg

Q:盘古CV大模型有哪些成功的落地?跟业界相比处在什么位置?

张晓鹏:视觉预训练CV大模型,结合相关流程化开发,已经在华为内部以及其他合作项目上,有100+成功落地,这些方向涵盖了各行各业,包括工业视觉、网络审查、零售商超,以及医疗等场景,都获得了一些相较于之前不使用预训练大模型更高的结果。在某些场景上,比如刚才提到的遥感影像分割,我们通过设计针对遥感影像的预训练算法,在没有增加额外标注代价的情况下,达到了最多12%的分割精度提升。还有另外一个比较有意思的现象,我们使用超大规模图像进行的预训练模型具有更好的可迁移性,即直接把这样一个模型,迁移到了工业质检的缺陷上进行推理,我们非常欣喜地发现,我们在下游数据集上没有进行任何微调,但是在工业缺陷检测上,获得了比之前我的模型不停地高度的优化,甚至利用下游的数据微调更好的结果,这个结果基本上会高出3到4个百分点。这个启发我们,模型数据一旦够多,其实它的泛化能力能够获得更好的保障。
第二,我们是国内最早做视觉预训练大模型的公司之一。在国外是Facebook和谷歌从2019年开始在图像上做了一些应用。我们视觉预训练模型大概从2019年底的时候就开始了,通过自研的一些列改进算法,我们首次在基于imagNet 的无监督预训练模型线性分类精度上达到了全监督基线的水平,同时在小样本学习上大大领先现有技术,这些都是业界领先的成果。
Q: 华为的预训练是采用什么类型数据和学习任务?大模型如何保证端侧性能?

张晓鹏:针对视觉图像不同角度,以及不同场景的变化,我们采取的方法非常简单。一,我们可能有海量数据集,这个数据集规模已经达到了亿级甚至十亿级这样的规模,我们相信这个海量的数据集,它能够建模,我们实际场景图像的方方面面。另外一个,我们采取了什么样的学习方式。其实它的一个核心思想,就是2019年开始,比较火的基于全局的对比度自监督学习方法。
当然我们在这上面做了很多改进。包括如何来利用弱标签信息,如何把全局的信息拓展到局部来更好建模局部相关关系。同时也会呼应刚才提到的,如何处理不同视角,不同尺度图像问题,怎么来让它进行高效的建模,这里面就是让它进行不同的数据增强,我们在预训练算法里面,集成了十余种数据增强方法,让它通过不同的数据增强,使得整个模型具有针对不同数据增强的不变性。
到目前为止,我们在一个大模型,搭载模型蒸馏、抽取以及行业大模型,我们现在已经适配了大概十余种预训练模型。而这十余种模型都是通过我们一个大模型的抽取,蒸馏所得到的,它在相应的行业上,得到了非常大的精度提升。同时也极大的减少了标注代价以及模型迭代周期。
Q:华为的预训练模型是如何结合不同行业知识,解决标注数据大的问题?

张晓鹏:举一个我们在HDC Cloud上发布的国网电力智能巡检的例子,这就是非常典型的利用盘古CV大模型解决行业知识。
在国网电力巡检模型开发的过程中,它有海量的数据,标注非常困难,我们做了什么呢?通过我们的视觉预训练算法,在海量的巡检数据上进行预训练,这个预训练是利用了无人机巡检的数十TB,上百万规模的数量,进行预训练,它的预训练可以看到我们非常多的数据,它的内在分布。我们的大模型,模型参数越大,也看了更多的数据,所以说它能够更好的建模无人机巡检过程中的图片的细微差异。
利用我们的视觉预训练大模型,它能够提供更好的表征以后,因为它的缺陷和正常样本的表征能力更强,我们在标注代价上,基本上减少了80%以上,这一块整个在人力上是一个非常大的提升。除了减少标注,我们一个模型可以适配我们电力行业一百多种缺陷,从而让模型迭代周期大大减少,整个迭代效率大概提升了10倍,我们在每次迭代过程中反馈给人需要标注的整体的工作量就会越少,通过这两种模式,我们实现了在电力行业方面,利用我们视觉预训练模型,极大的提升了我们的开发效率。
千亿参数,TB 级内存的模型

以盘古 2000 亿为例,如果我们训练时权重都用标准的 FP32 数据格式,那么算下来,权重占的空间就达到了 750GB,训练过程中内存开销还会数倍上升。这 750GB 参数,不是放在硬盘上,也不是加载到内存中,而是需要移到昇腾Atlas训练服务器 HBM(High Bandwidth Memory 高带宽存储器)内存中,以利用昇腾Atlas训练服务器训练模型。
模型大 ,意味着数据也大,而且都需要是高质量数据。为了满足数据需求,研发团队从互联网爬取了 80 TB 文本,并最后清洗为 1TB 的中文数据集。
这样的模型与数据,已经不是我们几台服务器能加载上的了,更不用说进行训练。好在研发团队会提供 API,一般算法工程师直接调用接口就能试试效果。
可以说,目前盘古是业界首创的千亿规模中文预训练模型,其中最高参数量达 2000 亿。
超大规模自动并行,算法工程师的福音

先考虑一个问题,你想到如何训练这样的大模型了吗?
如果给你足够的计算力,你能想到如何训练这么大的模型吗?我们最常用的分布式训练方式数据并行,单独这么做肯定是不行的,因为没有哪个计算硬件能放下 800GB 的参数。那么再加上模型并行呢?又产生了新问题,我们该如何拆分如此巨大的「盘古」?硬件产品(如 NPU、GPU 等)之间的梯度流、数据流通信又是什么样的?
显然训练如此庞大的模型,远比我们想象中的复杂,需要大量的工程化操作,并保证这些操作不会或极少影响到模型最终收敛效果。
难道盘古真得靠手动并行优化?
如果手动来写分布式训练逻辑,那么需要综合考虑计算量与类型、集群带宽、拓扑结构、样本数量等等一大堆复杂的东西,然后再设计出性能比较优秀的并行切分策略,并编写大量并行切分和节点间的通信代码。如果系统环境变了,还要重新设计并修改算法,想想就觉得头大。
倘若我们用 TensorFlow 或其他类似框架,MirroredStrategy 这一系列自带的分布式策略完全用不上,看起来自行写并行策略是必不可少的。然而,盘古 真正的训练是一种软硬件协同的方式,MindSpore 计算框架、CANN 异构计算架构、昇腾基础软硬件平台整套基础设施。其中,MindSpore 提供的,就包含了至关重要的自动并行能力。
融合 5 大维度,强大的自动并行

MindSpore 自动并行提供了 5 维的并行方式:数据并行、算子级模型并行、Pipeline 模型并行、优化器模型并行和重计算,并且在图编译阶段,有机融合了 5 个维度的并行。这 5 维并行方式组合起来构成了盘古的并行策略。

如何看待华为 4 月 25 日发布的盘古智能大模型?在这个行业处于什么水平?-4.jpg

a. 数据并行
数据并行是最基本,应用最广的并行方式,其将训练数据(mini-batch)切分,每台设备取得其中一份;每台设备拥有完整的模型。在训练时,每台设备经过梯度计算后,需要经过设备间的梯度同步,然后才能进行模型参数的更新。
b. 算子级模型并行
算子级模型并行是对模型网络中的每个算子涉及到的张量进行切分。MindSpore 对每个算子都独立建模,每个算子可以拥有不同的切分策略。
以矩阵乘算子 MatMul(x, w)为例,x 是训练数据,w 是模型参数,两者都是二维矩阵。并行策略 ((4, 1), (1, 1)) 表示将 x 按行切 4 份,保持 w 不切,如果一共有 4 台设备,那么每台设备拥有一份 x 的切片,和完整的 w。
c.Pipeline 模型并行
Pipeline 模型并行将模型的按层分成多个 stage,再把各个 sage 映射到多台设备上。为了提高设备资源的利用率,又将 mini-batch 划分成多个 micro-batch, 这样就能够使得不同设备在同一时刻处理不同 micro-batch 的数据。
一种 Pipeline 并行方式(Gpipe) 要求反向计算要等所有设备的正向计算完成后才开始,而反向计算可能依赖于正向的输出,导致每个卡正向计算过程中累积的 activation 内存与 micro-batch 数量成正比,从而限制了 micro-batch 的数量。MindSpore 的 Pipeline 并行中,将反向提前,每个 micro-batch 计算完成后,就开始计算反向,有效降低 activation 存储时间,从而提升整体并行效率。

如何看待华为 4 月 25 日发布的盘古智能大模型?在这个行业处于什么水平?-5.jpg

d. 优化器模型并行
优化器模型并行将优化器涉及到的参数和梯度切分到多台设备上。以 Adam 优化器为例,其内部可能有多份与权重同等大小的「动量」需要参与计算。在数据并行的情况下,每个卡都拥有完整的「动量」,它们在每个卡上都重复计算,造成了内存及计算的浪费。通过引入优化器并行,每个卡只保存权重及「动量」的切片,能降低每个卡的静态内存及提升计算效率。

如何看待华为 4 月 25 日发布的盘古智能大模型?在这个行业处于什么水平?-6.jpg

e. 重计算
重计算 (Rematerialization) 针对正向算子的输出累计保存在内存中,导致内存峰值过大的问题,舍弃了部分正向算子的输出,而是在反向阶段用到时再重新计算一遍。这样做有效地降低了训练过程中的内存使用峰值。如下图所示,第一个内存峰值通过重计算消除,第二个内存峰值可以通过前面讲到的优化器并行消除。

如何看待华为 4 月 25 日发布的盘古智能大模型?在这个行业处于什么水平?-7.jpg

有了这 5 维的并行维度后,如何将其组合起来作用于盘古,并且如何将切分后的模型分片分配到每台设备上仍然是难题。MindSpore 自动并行,把这 5 个维度并行有机组合起来,可以实现非常高效的大模型分布式训练能力。
下图 (b) 是一典型的树形的硬件拓扑结构,其带宽随着树深度的增加而降低,并且会产生一些流量冲突。为了利用此特征,MindSpore 的目标是最大化计算通信比,将通信量大的并行方式(算子级并行)放置在服务器内部的多卡之间;将通信量较小(Pipeline 并行)的放置在同一机架内的服务器间;将数据并行(优化器并行)的部分放置在不同机架间,因为该通信可以和计算同时执行(overlap),对带宽要求较低。

如何看待华为 4 月 25 日发布的盘古智能大模型?在这个行业处于什么水平?-8.jpg

在盘古 2000 亿模型中,MindSpore 将 64 层(layer)划分为 16 个 stage,每个 stage 包含 4 层。在每层中,利用算子级并行的方式对张量进行切分。
如下图中的 Q,K,V 的参数在实际中(按列)被切了 8 份,输入张量(按行)被切了 16 份,输出张量因此被切了 128 份(8*16)。重计算配置是配置在每层内的,也就是重计算引入的多余的计算量不会超过一层的计算量。总计,MindSpore 使用了 2048 块昇腾处理器来训练盘古。

如何看待华为 4 月 25 日发布的盘古智能大模型?在这个行业处于什么水平?-9.jpg

MindSpore 对外屏蔽了复杂并行实现的细节,使得用户像编写单机模型脚本那样简单。用户在单机脚本的基础上,仅通过少了配置就能实现多维度的混合并行。下图是简化版的盘古脚本,其中红色加粗字体表示的在 MindSpore 中的并行策略。将红色加粗字体去掉,则是单机脚本。

如何看待华为 4 月 25 日发布的盘古智能大模型?在这个行业处于什么水平?-10.jpg

图算跨层联合优化,发挥硬件极致性能

除了跨节点间的大规模自动外,在单卡节点内,MindSpore 通过图层和算子层的跨层协同优化,来进一步发挥昇腾算力。
在传统的 NN 网络中,不同算子承载的计算量和计算复杂度也各不相同。如 LayerNorm 由 11 个基本算子组成,而 Add 则只有 1 个基本算子。这种基于用户角度的算子定义,通常是无法充分发挥硬件资源计算能力的。因为计算量过大、过复杂的算子,通常很难生成切分较好的高性能算子。从而降低设备利用率;而计算量过小的算子,由于计算无法有效隐藏数据搬移开销,也可能会造成计算的空等时延,从而降低设备利用率。
为了提升硬件利用率,MindSpore 使用了图算融合优化技术,通过图层和算子层联合优化,并将「用户使用角度的易用性算子」进行重组融合,然后转换为「硬件执行角度的高性能算子」,从而充分提升硬件资源利用率,进而提升整网执行性能。具体优化流程如下图所示:

如何看待华为 4 月 25 日发布的盘古智能大模型?在这个行业处于什么水平?-11.jpg

以 LayerNorm 算子为例,通过算子拆分和重组,11 个小算子,组成了 1 个单算子和 2 个融合算子。这些重组后的算子可以生成更加高性能的算子,从而大大降低了整体网络运行时间。

如何看待华为 4 月 25 日发布的盘古智能大模型?在这个行业处于什么水平?-12.jpg

在盘古模型中,图算融合帮助整体训练时间减少了 20% 以上。除此之外,对于其它 NLP、CV 等任务,图算融合在优化性能方面都有不错的表现。
点击关注,第一时间了解华为云新鲜技术~

晓甘泉GPTs LV

发表于 6 天前

匿名给ms提点建议吧
这么好的问题场景,多发几篇顶会,硬通货拿来炫多好;多关注代码质量,别搞成典型华为产品,ms代码水平距离tf pytorch太远了,架构师也要重构感知下代码;尊重知识产权IP,给创新性人才更好工作环境;这是个持久战,别像典型华为项目,领导新鲜感就1-2年,后面不受重视就不投入了。
============
再补充几句正面的评价吧:
搞定AI芯片,搞定片间互联,从0构建底层软件,算子,框架,算法,数据,最后挑战超大规模模型成功。即使是在NV GPU集群上做到,都不简单。
可能只有行家才明白这个工作的分量!
客观来说,短时间国内无人能追赶!我们可以等着看,过多久谁能超越这一工作。这么多大厂,ai芯片公司在投入,我想一段时间内,这将是一个标杆,估计大家都会盯着这个团队的人才。
有好的问题,才有好的创新。不能过度的夸大学术,而忽视了工程。没人可以一开始就想清楚所有事情,都是在工程中才会有更深入的探索和发现,才会诞生更扎实的创新。
可能很多技术思路有人发过文章,但是正在工程实现时,问题的上下文可能不一样,细微问题的差异是会带来新的思路的,中软内部一直讲价值,但是真正清楚问题的是底层工程师,大多都缺少抽象形式化的能力,所以很多时候只能拿结果说话。应该是有很多创新的,我们可以期待一些论文发表出来。

璀璨千阳 LV

发表于 6 天前

看了雪锋的回答,作为同行,也提供一些视角。
大模型训练的几个分布式策略的技术点,数据并行、算子拆分、流水并行、优化器模型并行、重算,从原理上,在之前的工作都有过比较细致的讨论,数据并行比如Horovod、算子拆分比如Mesh-TF,Megatron-LM、流水并行比如GPipe、PipeDream,优化器模型并行比如DeepSpeed里的ZeRO的工作,重算在GPipe甚至更早在天奇的工作里也有讨论过。
难点在于新硬件+新框架上把这一砣东西在工程实现上全部组织起来,跑出体面的性能并且保证易用性和通用性。在这一点上要为坚持硬核技术投入的同行鼓掌。期待看到国内更多类似的工作。
图算融合,在GPU上我们关注比较多,有相对成体系化的作法,在昇腾这种偏DSA的架构上,做好确实会有不少挑战,因为融合与否对性能的影响直觉上更为critical,而DSA上做算子融合既会有更大的性能空间,实现的挑战也会相应更大一些。在图算融合的介绍里我看似乎没有提到算子融合可能带来计算优化和通信优化的trade-off的问题,也许同行在实现过程中已经注意到了,略提一下。
如果稍微picky一些的话,就是在这个工作里,还是看到了更多在follow和实现已有工作,重在工程实现,摘除硬件和自研框架因素以外技术上的原创相对少了一些,当然,能够把这么多pieces组织在一起,形成一个有机的系统也是非常不容易的。不过在看到这个工作的通用性被充分证明之前,我还是会稍微保留一些观点。原因是Transformer类模型因为其规整的结构,其实对于做大模型训练系统是相对友好的。这也是我们看DeepSpeed和Megatron-LM的会发现代码量并不大,但针对Transformer类大模型训练的支持确还不错的原因,因为有一些domain-specific system的味道了。如果内举不避亲的话,我其实觉得之前国平主持的DAPPLE的工作在分布式策略的自动化探索上会更究竟通用一些,但相较同行的工作在系统工程实现上欠缺了一些。
另一个值得思考的点就是微软最近的ZeRO-Infinity的工作,通过精细的设计GPU/CPU内存/NVMe外存的swap-in/out策略,使得单机八卡/16卡的GPU机型也可能训练起超大规模的模型,这就有了一些以巧破局的味道,和友商的这个工作也可以算相映成趣。当然,我相信以友商的系统实现能力,把ZeRO-Infinity的功能支持在MindSpore里不会有本质上的挑战。实际上ZeRO-Infinity的工作和其他工作也是存在近似正交互补性的。
除了用超大规模集群训练超大规模模型以外,大模型的业务benefit还需要更多的证明,只看几篇PR是不够的,还是需要有更多真实的业务把大模型的应用实在的体现出来,才可能把大模型的技术更加普及起来。与此同时,把大模型的训练/finetune/布署平民化,也是一个非常值得关注的话题,所谓的affordable AI了。毕竟,我们需要更多人可以参与到一个新技术的研究中,才可能加快促进这项技术的演化发展。

Mr·Jax LV

发表于 6 天前

利益相关。
我们总架的回答已经很详细了,补一个github链接。
mindspore-ai/mindspore机器之心的文章:
https://zhuanlan.zhihu.com/p/368023852框架能不能进千亿参数俱乐部,现在可以做为一个标杆了。感谢模型开发过程中产学研伙伴的支持,这是属于全体中国AI开源从业者的骄傲与荣光。

沪漂小程序员 LV

发表于 6 天前

更新,百亿/千亿模型编译性能也是大模型训练关键的竞争力:
金雪锋:Lazy inline-百亿/千亿大语言模型静态图编译性能提升N倍的的思路和实践<hr/>更新,因为下面有问到论文的情况,实际在这个领域我们已经有三篇顶会论文:
1、关于全自动并行的策略寻优:
• EuroPar2021—自动并行双递归《Efficient and Systematic Partitioning of Large and Deep Neural Networks for Parallelization》。
2、关于图算融合和算子自动生成的

  • Micro 2020:《Optimizing the Memory Hierarchy by Compositing Automatic Transformations on Computations and Data》
  • PLDI 2021:《AKG: Automatic Kernel Generation for Neural Processing Units using Polyhedral Transformations》
另外还有几篇论文在路上,有了结果再和大家同步。
<hr/>利益相关。
其实,这次HDC大会,华为联合鹏城发布了两个千亿的NLP大模型(其中一个模型还和循环智能进行了合作),都是盘古命名的。
一个是4月25日发布的Transformer encoder-decoder的中文理解模型;另外一个4月26日发布的是Transformer decoder的中文预训练模型。这两个模型是不同的定位,也是分别训练出来的。其中第二个预训练模型现在已经开源出来了。
MindSpore/mindsporePanGu-Alphahttps://git.openi.org.cn/PCL-Platform.Intelligence/PanGu-Alpha/src/branch/master/PANGU-%ce%b1.pdf这种超大的模型考验的是全栈和全流程的能力:
1、丰富的数据集和良好的数据清洗
2、硬件系统:芯片、互联、整机
3、硬件使能:高性能的算子库和融合能力
4、AI框架:分布式并行、编译优化
5、AI使能平台:资源管理和调度
6、优秀的算法和模型设计
7、全面的系统工程:包括精度调优、性能调优、模型切分、集群可靠性等等
只有这些能力都达到一流/没有短板,你才能训练出这样的大模型,否则即便给你K级集群,你也用不起来。所以这两个千亿模型训练出来是鹏城、华为EI/智能计算/海思/诺亚实验室/中央软件院等通力协作的结果。

MindSpore作为AI框架有幸同时支撑了这两个千亿模型的训练,过程其实非常艰辛,但总算熬过来。下面就简单介绍一下作为AI框架支撑千亿模型的挑战和解决方案:
挑战:


千亿参数,TB级显存的模型
以盘古2000亿(基于Transformer decoder结构的预训练模型)为例,如果我们训练时权重都用标准的 FP32 数据格式,那么算下来,权重占的空间就达到了 750GB,训练过程中内存开销还会数倍上升。这 750GB 参数,不是放在硬盘上,也不是加载到内存中,而是需要移到昇腾基础硬件平台 HBM(High Bandwidth Memory高带宽存储器)内存中,以利用昇腾基础软硬件平台进行模型训练。
模型大 ,意味着数据也大,而且都需要是高质量数据。为了满足数据需求,研发团队从互联网爬取了80TB文本,并最后清洗为1TB的中文数据集。
这样的模型与数据,已经不是我们几台服务器能加载上的了,更不用说进行训练。好在研发团队会提供 API,一般算法工程师直接调用接口就能试试效果。


如何看待华为 4 月 25 日发布的盘古智能大模型?在这个行业处于什么水平?-1.jpg


图注:盘古千亿模型架构。

如何看待华为 4 月 25 日发布的盘古智能大模型?在这个行业处于什么水平?-2.jpg


图注:盘古-α千亿模型架构。

超大规模并行
如果给你足够的计算力,你能想到如何训练这么大的模型吗?我们最常用的分布式训练方式数据并行,单独这么做肯定是不行的,因为没有哪个 计算硬件能放下 800GB 的参数。那么再加上模型并行呢?又产生了新问题,我们该如何拆分如此巨大的「盘古」?硬件产品(如GPU等)之间的梯度流、数据流通信又是什么样的?
显然训练如此庞大的模型,远比我们想象中的复杂,需要大量的工程化操作,并保证这些操作不会或极少影响到模型最终收敛效果。
如果手动来写分布式训练逻辑,那么需要综合考虑计算量与类型、集群带宽、拓扑结构、样本数量等等一大堆复杂的东西,然后再设计出性能比较优秀的并行切分策略,并编写大量并行切分和节点间的通信代码。如果系统环境变了,还要重新设计并修改算法,想想就觉得头大。
MindSpore的解决方案

5 大维度的并行能力

MindSpore提供了5维的并行方式:数据并行、算子级模型并行、Pipeline模型并行、优化器模型并行和重计算,并且在图编译阶段,有机融合了5个维度的并行。这5维并行方式组合起来构成了盘古的并行策略。

如何看待华为 4 月 25 日发布的盘古智能大模型?在这个行业处于什么水平?-3.jpg


1、数据并行
数据并行是最基本,应用最广的并行方式,其将训练数据(mini-batch)切分,每台设备取得其中一份;每台设备拥有完整的模型。在训练时,每台设备经过梯度计算后,需要经过设备间的梯度同步,然后才能进行模型参数的更新。
2、算子级模型并行
算子级模型并行是对模型网络中的每个算子涉及到的张量进行切分。MindSpore对每个算子都独立建模,每个算子可以拥有不同的切分策略。
以矩阵乘算子MatMul(x, w)为例,x是训练数据,w是模型参数,两者都是二维矩阵。并行策略((4, 1), (1, 1))表示将x按行切4份,保持w不切,如果一共有4台设备,那么每台设备拥有一份x的切片,和完整的w。
3、Pipeline 模型并行
Pipeline模型并行将模型的按层分成多个stage,再把各个sage映射到多台设备上。为了提高设备资源的利用率,又将mini-batch划分成多个micro-batch,这样就能够使得不同设备在同一时刻处理不同micro-batch的数据。
一种Pipeline并行方式(Gpipe) 要求反向计算要等所有设备的正向计算完成后才开始,而反向计算可能依赖于正向的输出,导致每个卡正向计算过程中累积的activation内存与micro-batch数量成正比,从而限制了micro-batch的数量。MindSpore的Pipeline并行中,将反向提前,每个micro-batch计算完成后,就开始计算反向,有效降低activation存储时间,从而提升整体并行效率。

如何看待华为 4 月 25 日发布的盘古智能大模型?在这个行业处于什么水平?-4.jpg

4、优化器模型并行
优化器模型并行将优化器涉及到的参数和梯度切分到多台设备上。以Adam优化器为例,其内部可能有多份与权重同等大小的“动量”需要参与计算。在数据并行的情况下,每个卡都拥有完整的“动量”,它们在每个卡上都重复计算,造成了内存及计算的浪费。通过引入优化器并行,每个卡只保存权重及“动量”的切片,能降低每个卡的静态内存及提升计算效率。

如何看待华为 4 月 25 日发布的盘古智能大模型?在这个行业处于什么水平?-5.jpg


5、重计算
重计算(Rematerialization)针对正向算子的输出累计保存在内存中,导致内存峰值过大的问题,舍弃了部分正向算子的输出,而是在反向阶段用到时再重新计算一遍。这样做有效地降低了训练过程中的内存使用峰值。如下图所示,第一个内存峰值通过重计算消除,第二个内存峰值可以通过前面讲到的优化器并行消除。

如何看待华为 4 月 25 日发布的盘古智能大模型?在这个行业处于什么水平?-6.jpg


有了这5维的并行维度后,如何将其组合起来作用于盘古,并且如何将切分后的模型分片分配到每台设备上仍然是难题。MindSpore自动并行,把这5个维度并行有机组合起来,可以实现非常高效的大模型分布式训练能力
下图(b)是一典型的树形的硬件拓扑结构,其带宽随着树深度的增加而降低,并且会产生一些流量冲突。为了利用此特征,MindSpore的目标是最大化计算通信比,将通信量大的并行方式(算子级并行)放置在服务器内部的多卡之间;将通信量较小(Pipeline并行)的放置在同一机架内的服务器间;将数据并行(优化器并行)的部分放置在不同机架间,因为该通信可以和计算同时执行(overlap),对带宽要求较低。

如何看待华为 4 月 25 日发布的盘古智能大模型?在这个行业处于什么水平?-7.jpg


在盘古2000亿模型中,MindSpore将64层(layer)划分为16个stage,每个stage包含4层。在每层中,利用算子级并行的方式对张量进行切分。
如下图中的Q,K,V的参数在实际中(按列)被切了8份,输入张量(按行)被切了16份,输出张量因此被切了128份(8*16)。重计算配置是配置在每层内的,也就是重计算引入的多余的计算量不会超过一层的计算量。总计,MindSpore使用了2048块昇腾处理器来训练盘古。

如何看待华为 4 月 25 日发布的盘古智能大模型?在这个行业处于什么水平?-8.jpg


MindSpore对外屏蔽了复杂并行实现的细节,使得用户像编写单机模型脚本那样简单。用户在单机脚本的基础上,仅通过少了配置就能实现多维度的混合并行。下图是简化版的盘古脚本,其中红色加粗字体表示的在MindSpore中的并行策略。将红色加粗字体去掉,则是单机脚本。

如何看待华为 4 月 25 日发布的盘古智能大模型?在这个行业处于什么水平?-9.jpg


图算跨层联合优化,发挥硬件极致性能

除了跨节点间的大规模自动外,在单卡节点内,MindSpore通过图层和算子层的跨层协同优化,来进一步发挥昇腾算力。
在传统的NN网络中,不同算子承载的计算量和计算复杂度也各不相同。如LayerNorm由11个基本算子组成,而Add则只有1个基本算子。这种基于用户角度的算子定义,通常是无法充分发挥硬件资源计算能力的。因为计算量过大、过复杂的算子,通常很难生成切分较好的高性能算子。从而降低设备利用率;而计算量过小的算子,由于计算无法有效隐藏数据搬移开销,也可能会造成计算的空等时延,从而降低设备利用率。
为了提升硬件利用率,MindSpore使用了图算融合优化技术,通过图层和算子层联合优化,并将“用户使用角度的易用性算子”进行重组融合,然后转换为“硬件执行角度的高性能算子”,从而充分提升硬件资源利用率,进而提升整网执行性能。具体优化流程如下图所示:

如何看待华为 4 月 25 日发布的盘古智能大模型?在这个行业处于什么水平?-10.jpg


以LayerNorm算子为例,通过算子拆分和重组,11个小算子,组成了1个单算子和2个融合算子。这些重组后的算子可以生成更加高性能的算子,从而大大降低了整体网络运行时间。

如何看待华为 4 月 25 日发布的盘古智能大模型?在这个行业处于什么水平?-11.jpg


在盘古模型中,图算融合帮助整体训练时间减少了20%以上。除此之外,对于其它 NLP、CV等任务,图算融合在优化性能方面都有不错的表现。

总结一下

即使给我们足够的算力,超大模型的训练还是异常复杂,远比想象中的困难。对于我们一般算法工程师来说,针对某个任务,上亿参数量已经算大的了,但是并不会感到训练上会有什么困难,因为各个深度学习框架直接调用数据并行接口就能搞定。
但是如果模型继续增大到百亿级、千亿级甚至万亿级,并行与优化策略的复杂度猛然上升,算法工程师一点点地编写与优化代码可太难了。MindSpore通过编译器并行优化能力,把计算逻辑和并行逻辑解耦,单卡串行代码自动实现分布式并行,从而使得算法科学家将精力都解放到模型本身上。
为了从预训练获取更多的知识, GPT-3 与盘古 这样的模型会越来越大,毕竟到现在我们还没看到大模型预训练效果的极限在哪。届时,这类模型对基础设施的需求会更大,并行与优化策略也会更加复杂。预训练的效果,看的也已经不是模型本身,而是基础设施构建得是否足够优秀。大规模计算集群及软硬件协同优化,这次在盘古 的训练上得到了充分的完美体现。
当然,也诚如以上所言,盘古只是对超大规模分布式训练、超大规模中文预训练模型的一次探索,未来还需要更多的研究工作者投入到通用智能与大规模分布式计算的研究工作中。
<hr/>更新-盘古-a的相对全面的情况:
盘古-Alpha:中国AI研究新突破:「盘古α」发布

您需要登录后才可以回帖 登录 | 立即注册