Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

机器之心编辑部原创

透视鹏程.盘古:首个2000亿参数中文大模型是怎样炼成的?

给足算力和数据,就能训练出千亿参数的大模型?事实没有那么简单。

「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

此外,鹏程. 盘古的开源也符合一带一路人工智能产业发展联盟《联合宣言》的精神。这份宣言提出了四大倡议,其中就包括「构建基于先进技术的新型科技伙伴关系」,「把人工智能作为一带一路新的纽带,共同建设面向未来的『科技命运共同体』」等内容。

自成立以来,鹏城实验室一直将国家对新型研发机制及一带一路科研合作的要求作为自己的整体定位和目标,先后在多个战略性、前瞻性、基础性重大科学问题和关键核心技术上展开研究,鹏程. 盘古就是其最新研究成果之一。当然,鹏程. 盘古只是对超大规模分布式训练、超大规模中文预训练模型的一次探索,未来还需要更多的研究工作者投入到通用智能与大规模分布式计算的研究工作中。
工程中文预训练模型2000亿参数盘古大模型鹏城实验室
相关数据
华为机构

华为创立于1987年,是全球领先的ICT(信息与通信)基础设施和智能终端提供商。

https://www.huawei.com/cn/
Microsoft机构

微软是美国一家跨国计算机科技公司,以研发、制造、授权和提供广泛的计算机软件服务为主。总部位于美国华盛顿州的雷德蒙德,最为著名和畅销的产品为Microsoft Windows操作系统和Microsoft Office办公室软件,以及Xbox的游戏业务。微软是美国《财富》杂志2015年评选的世界500强企业排行榜中的第95名。

https://www.microsoft.com/en-us/about
权重技术

线性模型中特征的系数,或深度网络中的边。训练线性模型的目标是确定每个特征的理想权重。如果权重为 0,则相应的特征对模型来说没有任何贡献。

人工智能技术

在学术研究领域,人工智能通常指能够感知周围环境并采取行动以实现最优的可能结果的智能体(intelligent agent)

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

收敛技术

在数学,计算机科学和逻辑学中,收敛指的是不同的变换序列在有限的时间内达到一个结论(变换终止),并且得出的结论是独立于达到它的路径(他们是融合的)。 通俗来说,收敛通常是指在训练期间达到的一种状态,即经过一定次数的迭代之后,训练损失和验证损失在每次迭代中的变化都非常小或根本没有变化。也就是说,如果采用当前数据进行额外的训练将无法改进模型,模型即达到收敛状态。在深度学习中,损失值有时会在最终下降之前的多次迭代中保持不变或几乎保持不变,暂时形成收敛的假象。

张量技术

张量是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数,这些线性关系的基本例子有内积、外积、线性映射以及笛卡儿积。其坐标在 维空间内,有 个分量的一种量,其中每个分量都是坐标的函数,而在坐标变换时,这些分量也依照某些规则作线性变换。称为该张量的秩或阶(与矩阵的秩和阶均无关系)。 在数学里,张量是一种几何实体,或者说广义上的“数量”。张量概念包括标量、矢量和线性算子。张量可以用坐标系统来表达,记作标量的数组,但它是定义为“不依赖于参照系的选择的”。张量在物理和工程学中很重要。例如在扩散张量成像中,表达器官对于水的在各个方向的微分透性的张量可以用来产生大脑的扫描图。工程上最重要的例子可能就是应力张量和应变张量了,它们都是二阶张量,对于一般线性材料他们之间的关系由一个四阶弹性张量来决定。

映射技术

映射指的是具有某种特殊结构的函数,或泛指类函数思想的范畴论中的态射。 逻辑和图论中也有一些不太常规的用法。其数学定义为:两个非空集合A与B间存在着对应关系f,而且对于A中的每一个元素x,B中总有有唯一的一个元素y与它对应,就这种对应为从A到B的映射,记作f:A→B。其中,y称为元素x在映射f下的象,记作:y=f(x)。x称为y关于映射f的原象*。*集合A中所有元素的象的集合称为映射f的值域,记作f(A)。同样的,在机器学习中,映射就是输入与输出之间的对应关系。

逻辑技术

人工智能领域用逻辑来理解智能推理问题;它可以提供用于分析编程语言的技术,也可用作分析、表征知识或编程的工具。目前人们常用的逻辑分支有命题逻辑(Propositional Logic )以及一阶逻辑(FOL)等谓词逻辑。

零样本学习技术

从仅仅一个或一小撮样本中学习一个新的概念,而普通的机器学习标准算法通常需要几十或几百个表现类似的样本。

动量技术

优化器的一种,是模拟物理里动量的概念,其在相关方向可以加速SGD,抑制振荡,从而加快收敛

多任务学习技术

强化学习技术

强化学习是一种试错方法,其目标是让软件智能体在特定环境中能够采取回报最大化的行为。强化学习在马尔可夫决策过程环境中主要使用的技术是动态规划(Dynamic Programming)。流行的强化学习方法包括自适应动态规划(ADP)、时间差分(TD)学习、状态-动作-回报-状态-动作(SARSA)算法、Q 学习、深度强化学习(DQN);其应用包括下棋类游戏、机器人控制和工作调度等。

优化器技术

优化器基类提供了计算梯度loss的方法,并可以将梯度应用于变量。优化器里包含了实现了经典的优化算法,如梯度下降和Adagrad。 优化器是提供了一个可以使用各种优化算法的接口,可以让用户直接调用一些经典的优化算法,如梯度下降法等等。优化器(optimizers)类的基类。这个类定义了在训练模型的时候添加一个操作的API。用户基本上不会直接使用这个类,但是你会用到他的子类比如GradientDescentOptimizer, AdagradOptimizer, MomentumOptimizer(tensorflow下的优化器包)等等这些算法。

语言模型技术

语言模型经常使用在许多自然语言处理方面的应用,如语音识别,机器翻译,词性标注,句法分析和资讯检索。由于字词与句子都是任意组合的长度,因此在训练过的语言模型中会出现未曾出现的字串(资料稀疏的问题),也使得在语料库中估算字串的机率变得很困难,这也是要使用近似的平滑n元语法(N-gram)模型之原因。

文本生成技术

文本生成是生成文本的任务,其目的是使人类书写文本难以区分。

机器之心机构

机器之心,成立于2014年,是国内最具影响力、最专业、唯一用于国际品牌的人工智能信息服务与产业服务平台。目前机器之心已经建立起涵盖媒体、数据、活动、研究及咨询、线下物理空间于一体的业务体系,为各类人工智能从业者提供综合信息服务和产业服务。

https://www.jiqizhixin.com/
小样本学习技术

人类非常擅长通过极少量的样本识别一个新物体,比如小孩子只需要书中的一些图片就可以认识什么是“斑马”,什么是“犀牛”。在人类的快速学习能力的启发下,研究人员希望机器学习模型在学习了一定类别的大量数据后,对于新的类别,只需要少量的样本就能快速学习,这就是 Few-shot Learning 要解决的问题。

量化技术

深度学习中的量化是指,用低位宽数字的神经网络近似使用了浮点数的神经网络的过程。

推荐文章
暂无评论
暂无评论~