机器之心编辑部
给足算力和数据,就能演习出千亿参数的大模型?事实没有那么大略。
「70 年的人工智能研究史见告我们,利用打算能力的一样平常方法终极是最有效的方法。」
(图片来自网络侵删)这句话出自「强化学习教父」Rich Sutton 2019 年揭橥的一篇文章《苦涩的教训》(The Bitter Lesson)。他认为,人工智能如果想要长期得到提升,利用打算能力才是王道。
这是一个颇具争议的不雅观点,但也的确为现阶段的 AI 发展供应了一个主要思路。在过去的几年中,越来越多的研究者和机构开始在「大模型 + 大算力」的方向上展开探索。这不仅仅是摸索 AI 技能发展路径的须要,也是 AI 落地到各行各业的刚需。
我们看到,在 AI 发展的早期阶段,开拓者方向于为每个场景从头演习一个模型,但随着运用处景的不断丰富,这种模式的缺陷开始显现,比如重复的人力、算力投入(重复造轮子),部分场景开拓难度过大、本钱过高档。而且,有些场景的数据是非常稀缺的,难以支撑一个高精度模型的演习。
在此背景下,通过设计前辈的算法,整合尽可能多的数据,汇聚大量算力,集约化地演习领域通用大模型供大量企业利用,已经成为一种一定趋势。
5 月 18 日,在华为生态大会 2021「昇腾万里 共赢智能新时期」分论坛上,鹏城实验室超大模型「鹏程. 盘古」重磅亮相。这是业界首个全开源 2000 亿参数中文预演习措辞模型。
该模型由鹏城实验室联合干系技能团队开拓,首次基于「鹏城云脑 Ⅱ」和全场景 AI 打算框架 MindSpore 的自动稠浊并行模式实现在 2048 卡算力集群上的大规模分布式演习,是国产全栈式 AI 根本举动步伐第一次支持 2000 亿级超大规模措辞模型演习,探索并验证了国产 E 级智算平台在软硬件协同优化、大规模分布式并行演习等核心关键技能上的可行性。
在模型性能方面,鹏程. 盘古大模型性能环球领先,16 个下贱任务中性能指标优于业界 SOTA 模型,个中零样本学习任务 11 个任务领先、单样本学习任务 12 个任务领先、小样本学习任务 13 个任务领先。
在运用方面,鹏程. 盘古支持丰富的运用处景,在知识问答、知识检索、知识推理、阅读理解等文本天生领域表现突出。
能够取得如此精良的成绩,「大数据」、「大算力」固然功不可没,但如果没有卓越的软硬件协同优化、大规模分布式并行演习等技能做支撑,纵然拿到足够的算力和数据,我们也演习不出鹏程. 盘古这类大模型。
在这篇文章中,我们就来谈谈鹏程. 盘古背后的技能以及这类大模型的代价所在。
开拓鹏程. 盘古难在哪儿?
在以往的印象中,我们很随意马虎将大模型的成功归功于算力和数据。但实在,大模型是一种统筹了数据预处理、模型架构、并行演习与优化的完全美学。就算给我们足够的算力、原始数据、原始模型,想要做出真正跑得通的大模型,中间还有千难万难。
拿数据来说,什么样的数据决定了模型有什么样的基本效果。显然,仅仅知够数据量大、干净、多样三个标准,就须要大量工程操作。量大与多样是大模型的一定哀求,而它们一定导致数据被污染,被污染的数据一定导致模型效果不好(garbage in, garbage out)。因此,工程师们只好手动写下一条条规则去过滤、筛选出干净的数据。
模型也不例外。如果只关注大模型的「大」,那想当然地就会把标准模型变深、变宽。这就牵扯出一些问题:模型真的收敛得好?梯度反向传播没问题吗?权重都起浸染吗?标注旗子暗记足够强吗?因此,要想达到空想的性能,模型上的修正与适配也是必不可少。
末了,也是最难的,并行演习策略与优化。光想想 2000 亿参数须要 TB 级内存,现在根本不存在这么大的 AI 处理器,大模型一定被「肢解」到不同的处理器。若何分解模型、若何分配处理器之间的通信、若何优化打算图等等都显得非常繁芜。
以是,当鹏程. 盘古办理了以上一系列问题,它才能真正称得上是一个有效的「大模型」。
最为核心:超大规模分布式演习
优质大模型最为核心,也最为困难的寻衅,是超大规模分布式演习。机器之心之前曾详细先容过MindSpore 自动并行技能如何助力鹏程. 盘古。
很难想象,对付鹏程. 盘古这样的大模型,MindSpore 只需几行代码就能完备自动地完成并行策略。
MindSpore 对外屏蔽了繁芜并行实现的细节,写并行就像编写单机模型那样大略。单机模型代码只需加上赤色的「.shard()」和「.pipline_stage」等方法与配置,即可指定模型并行方法。
如果手动来写鹏程. 盘古分布式演习逻辑,那么须要综合考虑打算量与类型、集群带宽、拓扑构造、样本数量等等一大堆繁芜的东西,然后再设计出性能比较精良的并行切分策略,并编写大量并行切分和节点间的通信代码。而 MindSpore 将所有的繁芜逻辑,都隐蔽在「.set_auto_parallel_context()」这样大略的高下文管理器中。
从算法工程师角度来说,我们写自己的串行算法逻辑,MindSpore 卖力自动把它们优化成并行分布式逻辑,这样用起来才是最舒畅的。为了达到这样的效果,MindSpore「.set_auto_parallel_context()」高下文管理器默默田主动完成了 5 种并行优化。
MindSpore 从 5 大维度实现自动并行,5 维并行办法组合起来构成了鹏程. 盘古的分布式演习策略。
1. 数据并行:自动将批量演习数据分割成更小的批量,并将小批量分配到不同的演习做事器。这是算法工程师最基本,也是最常用的并行演习手段。
2. 算子级模型并行:对模型中的每个算子涉及到的张量进行切分。例如前面示例中的 ops.MatMul(x, w).shard((4, 1), (1, 1)),表示将 x 输入张量切分成 4 份,将 w 权重张量保留为一份。然后 4 个打算设备各保留一份被切分的 x 和完全的 w。
3.Pipeline 模型并行:将模型按层分成多个 stage,再把各个 stage 映射到多台设备上。例如模型第一层、第二层这样的 Pipeline 会拆分到不同的打算节点上。
4. 优化器模型并行:将优化器涉及的参数和梯度切分到多台设备上。例如常用的 Adam 优化算法,通过引入优化器并行,每个打算节点只保存部分权重及「动量」,能降落每个打算节点的静态内存并提升打算效率。
5. 重打算 (Rematerialization):由于反向传播的需求,一样平常正向算子的输出结果会累计保存在内存中,导致内存峰值过大。MindSpore 自动并行会舍弃部分正向算子的输出,并在反向阶段再重新打算一遍,这样能有效降落内存利用峰值。
这 5 大并行策略都是跨打算节点的,然而,在单卡节点内,MindSpore 还会通过图层和算子层的跨层协同优化,来进一步发挥算力潜能。虽然都隐蔽在 MindSpore 框架底层,但这些自动并行与优化策略,对付超大规模的鹏程. 盘古是最为核心的。
模型创新:冗余不谓之「大」
预演习措辞模型,除了自编码(AutoEncoding) 的 BERT 以及自回归(AutoRegressive) 的 GPT-3 这两大类架构,还有很多精良的架构,例如多任务学习或者 XLNet 那样依赖排列组合的预演习办法。
然而,并非所有预演习措辞模型都能平滑地扩展到数千亿参数量。可能有的架构收敛速率太慢,也可能有的架构对「few-shot」这样的繁芜任务支持不足好。为了构建一种不臃肿且有效的模型,鹏程. 盘古采取了 GPT-3 初步试验的自回归架构作为 baseline,然后增加额外的 Query Layer 以加强模型在大规模中文预演习上的能力。
的确,如上所示,鹏程. 盘古和标准的自回归措辞模型构造不一样,常日来说 Transformer 层在「5+this」那一个韶光步就直接输出第六个位置的 Token。但鹏程. 盘古还增加了一个 Query 层,并加上「6」 这一位置信息以预测对应的 Token。
在 Transformer 顶层加上一个 Query Layer,旨在通过独立的位置编码,显式地将期望的输出给加进去。这样的好处在于鹏程. 盘古明确知道它要预测哪个位置的词,因此输入可以是随机词序,而不但是标准正序的办法。
和标准正序措辞模型比较,显然这样的任务是更难的,由于模型不仅要预测下一个词,同时还要自己学会理解随机词序精确的语义及词之间真正的依赖关系。
正由于预演习任务及模型构造的双重改进,鹏程. 盘古大模型才会尽可能用上弘大的 2000 亿权重参数,才能称得上「大」。
为什么要花那么大力气开拓鹏程. 盘古?
从鹏程. 盘古背后的技能我们可以看出,这类大模型的出身每每要经历一个艰辛的过程。但一旦演习出来,其代价是非常可不雅观的。
首先,大模型的泛化能力每每非常强大。以鹏程. 盘古为例,在学习了 TB 级的数据之后,该模型在很多方向都具备强大的通用知识,就像一个修炼了多年内功的武林高手。以此为底座,模型在各行各业的措辞类场景下都有用武之地。
其次,大模型的小样本学习能力非常强大。在拥有了强大的通用知识之后,模型只须要学习少量新增样本就可以「举一反三」,去办理特定场景下的任务。这就省去了从零开始演习的麻烦,减少了重复劳动,降落了普通人、一样平常企业用上大模型的难度。
但是,要想将上述代价发挥到极致,惠及全体 AI 生态圈,模型还得是开源、开放的。
我们看到,由于超大模型耗资甚巨、技能特性难以透彻理解,目前只有 Google、Microsoft、NVIDIA 等大公司才可以玩转千亿 / 万亿级的大模型,这对付中小企业、研究机构和个人研究者来说都很不友好,也不利于 AI 生态圈的培植。
鹏程. 盘古的开源正是基于这一考量。为了发挥这一根本性技能成果的最大效益,以鹏城实验室为首的联合团队决定将鹏程. 盘古的模型、代码、数据集在 OpenI 启智社区全面开源、开放,希望以启智开源社区为载体,集众智、聚众力,吸引开拓者共同参与到模型的压缩轻量化和运用创新事情中,不断探索鹏程. 盘古大模型的巨大潜力。
OpenI 启智社区是在国家履行新一代人工智能发展计策背景下,新一代人工智能家当技能创新计策同盟(AITISA)组织产学研用协作共建共享的开源平台,旨在以鹏城云脑重大科研根本举动步伐及 Trustie 软件开拓群体化方法与平台为根本,全面推动人工智能领域的开源开放协同创新。
开源地址:https://git.openi.org.cn/PCL-Platform.Intelligence/PanGu-Alpha
技能报告:https://git.openi.org.cn/PCL-Platform.Intelligence/PanGu-Alpha/src/branch/master/PANGU-%ce%b1.pdf
此外,鹏程. 盘古的开源也符合一带一起人工智能家当发展同盟《联合宣言》的精神。这份宣言提出了四大倡议,个中就包括「构建基于前辈技能的新型科技伙伴关系」,「把人工智能作为一带一起新的纽带,共同培植面向未来的『科技命运共同体』」等内容。
自成立以来,鹏城实验室一贯将国家对新型研发机制及一带一起科研互助的哀求作为自己的整体定位和目标,先后在多个计策性、前瞻性、根本性重大科学问题和关键核心技能上展开研究,鹏程. 盘古便是其最新研究成果之一。当然,鹏程. 盘古只是对超大规模分布式演习、超大规模中文预演习模型的一次探索,未来还须要更多的研究事情者投入到通用智能与大规模分布式打算的研究事情中。