【NLP】华为推出了全球最大的中文语言模型-盘古-程序员宅基地

技术标签: 算法  机器学习  人工智能  分布式  大数据  

作者:金雪锋
链接:https://www.zhihu.com/question/456443707/answer/1856014437

这次HDC大会,华为联合鹏城发布了两个千亿的NLP大模型(其中一个模型还和循环智能进行了合作),都是盘古命名的。

一个是4月25日发布的Transformer encoder-decoder的中文理解模型;另外一个4月26日发布的是Transformer decoder的中文预训练模型。这两个模型是不同的定位,也是分别训练出来的。其中第二个预训练模型现在已经开源出来了。

这种超大的模型考验的是全栈和全流程的能力:

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,一般算法工程师直接调用接口就能试试效果。
图注:盘古千亿模型架构。图注:盘古 2 千亿模型架构。

超大规模并行

如果给你足够的计算力,你能想到如何训练这么大的模型吗?我们最常用的分布式训练方式数据并行,单独这么做肯定是不行的,因为没有哪个 计算硬件能放下 800GB 的参数。那么再加上模型并行呢?又产生了新问题,我们该如何拆分如此巨大的「盘古」?硬件产品(如GPU等)之间的梯度流、数据流通信又是什么样的?

显然训练如此庞大的模型,远比我们想象中的复杂,需要大量的工程化操作,并保证这些操作不会或极少影响到模型最终收敛效果。

如果手动来写分布式训练逻辑,那么需要综合考虑计算量与类型、集群带宽、拓扑结构、样本数量等等一大堆复杂的东西,然后再设计出性能比较优秀的并行切分策略,并编写大量并行切分和节点间的通信代码。如果系统环境变了,还要重新设计并修改算法,想想就觉得头大。

MindSpore的解决方案

5 大维度的并行能力

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

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

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


有了这5维的并行维度后,如何将其组合起来作用于盘古,并且如何将切分后的模型分片分配到每台设备上仍然是难题。MindSpore自动并行,把这5个维度并行有机组合起来,可以实现非常高效的大模型分布式训练能力。

下图(b)是一典型的树形的硬件拓扑结构,其带宽随着树深度的增加而降低,并且会产生一些流量冲突。为了利用此特征,MindSpore的目标是最大化计算通信比,将通信量大的并行方式(算子级并行)放置在服务器内部的多卡之间;将通信量较小(Pipeline并行)的放置在同一机架内的服务器间;将数据并行(优化器并行)的部分放置在不同机架间,因为该通信可以和计算同时执行(overlap),对带宽要求较低。
在盘古2000亿模型中,MindSpore将64层(layer)划分为16个stage,每个stage包含4层。在每层中,利用算子级并行的方式对张量进行切分。

如下图中的Q,K,V的参数在实际中(按列)被切了8份,输入张量(按行)被切了16份,输出张量因此被切了128份(8*16)。重计算配置是配置在每层内的,也就是重计算引入的多余的计算量不会超过一层的计算量。总计,MindSpore使用了2048块昇腾处理器来训练盘古。
MindSpore对外屏蔽了复杂并行实现的细节,使得用户像编写单机模型脚本那样简单。用户在单机脚本的基础上,仅通过少了配置就能实现多维度的混合并行。下图是简化版的盘古脚本,其中红色加粗字体表示的在MindSpore中的并行策略。将红色加粗字体去掉,则是单机脚本。
图算跨层联合优化,发挥硬件极致性能

除了跨节点间的大规模自动外,在单卡节点内,MindSpore通过图层和算子层的跨层协同优化,来进一步发挥昇腾算力。

在传统的NN网络中,不同算子承载的计算量和计算复杂度也各不相同。如LayerNorm由11个基本算子组成,而Add则只有1个基本算子。这种基于用户角度的算子定义,通常是无法充分发挥硬件资源计算能力的。因为计算量过大、过复杂的算子,通常很难生成切分较好的高性能算子。从而降低设备利用率;而计算量过小的算子,由于计算无法有效隐藏数据搬移开销,也可能会造成计算的空等时延,从而降低设备利用率。

为了提升硬件利用率,MindSpore使用了图算融合优化技术,通过图层和算子层联合优化,并将“用户使用角度的易用性算子”进行重组融合,然后转换为“硬件执行角度的高性能算子”,从而充分提升硬件资源利用率,进而提升整网执行性能。具体优化流程如下图所示:
以LayerNorm算子为例,通过算子拆分和重组,11个小算子,组成了1个单算子和2个融合算子。这些重组后的算子可以生成更加高性能的算子,从而大大降低了整体网络运行时间。
在盘古模型中,图算融合帮助整体训练时间减少了20%以上。除此之外,对于其它 NLP、CV等任务,图算融合在优化性能方面都有不错的表现。
总结一下

即使给我们足够的算力,超大模型的训练还是异常复杂,远比想象中的困难。对于我们一般算法工程师来说,针对某个任务,上亿参数量已经算大的了,但是并不会感到训练上会有什么困难,因为各个深度学习框架直接调用数据并行接口就能搞定。

但是如果模型继续增大到百亿级、千亿级甚至万亿级,并行与优化策略的复杂度猛然上升,算法工程师一点点地编写与优化代码可太难了。MindSpore通过编译器并行优化能力,把计算逻辑和并行逻辑解耦,单卡串行代码自动实现分布式并行,从而使得算法科学家将精力都解放到模型本身上。

为了从预训练获取更多的知识, GPT-3 与盘古 这样的模型会越来越大,毕竟到现在我们还没看到大模型预训练效果的极限在哪。届时,这类模型对基础设施的需求会更大,并行与优化策略也会更加复杂。预训练的效果,看的也已经不是模型本身,而是基础设施构建得是否足够优秀。大规模计算集群及软硬件协同优化,这次在盘古 的训练上得到了充分的完美体现。

当然,也诚如以上所言,盘古只是对超大规模分布式训练、超大规模中文预训练模型的一次探索,未来还需要更多的研究工作者投入到通用智能与大规模分布式计算的研究工作中。


往期精彩回顾



适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载机器学习的数学基础专辑温州大学《机器学习课程》视频
本站qq群851320808,加入微信群请扫码:

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/fengdu78/article/details/116279842

智能推荐

python向EXCEL添加一列数据或指定行列给单元格赋值_python在excel指定列赋值-程序员宅基地

文章浏览阅读7k次。import openpyxl# column名column_title = ["FirstName", "LastName"]if __name__ == '__main__': """ CELL放入值 """ wb = openpyxl.load_workbook('example.xlsx') ws = wb.active # 指定行列给单元格赋值 ws.cell(row=4, column=6, value=100) # _python在excel指定列赋值

android通过nfs挂载linux共享的文件_android 12 支持 nfs挂载-程序员宅基地

文章浏览阅读1.2w次。最近一直在调wifi驱动,编写linux下的wifi代码,所以android的应用层和wpa_supplicant的通信一直没时间看,先留着。 公司使用的ubuntu版本为12.04,所以以次版本讲下如何在开发板下挂载linux主机通过nfs共享的文档,利于调试驱动 (1)linux主机需要的配置 在我的虚拟机下需配置网卡的选项,如下图; vmnet0选择桥接到pc的物理网卡上,不要桥接_android 12 支持 nfs挂载

Android 打开飞行模式和拔出耳机时自动退出FM Radio应用-程序员宅基地

文章浏览阅读835次,点赞16次,收藏11次。(img-Hy20yeHu-1711550542037)]因为文件太多,全部展示会影响篇幅,暂时就先列举这些部分截图。因为文件太多,全部展示会影响篇幅,暂时就先列举这些部分截图。2. 修改FMRadioService。

反转字符串的三种方法-Java实现_java string reverse-程序员宅基地

文章浏览阅读1.4k次,点赞2次,收藏7次。Java实现反转字符串的三种方法_java string reverse

性能测试--测试方案--TPS_tps方案-程序员宅基地

文章浏览阅读2k次。TPS,每秒钟完成的事务数"80/20"原理:"80/20"原理是按事情的"重要程度"编排行事优先次序的准则是建立在"重要的少数与琐碎的多数"原理的基础上。这个原理是十九世纪末期与二十世纪初期的意大利经济学家兼社会学家维弗烈度·柏瑞图所提出。它的大意是:在任何特定群体中,重要的因子通常只占少数,而不重要的因子则占多数,因此只要能控制具有重要性的少数因子即能控制全局。这个原理经过多年的演化,_tps方案

C语言中的static的用法(超级详细)_static在c语言中的用法-程序员宅基地

文章浏览阅读8w次,点赞685次,收藏2.2k次。staticstatic 一般用于修饰局部变量,全局变量,函数;(1)static修饰局部变量:(2).static修饰全局变量(3).static修饰函数_static在c语言中的用法

随便推点

跨境卖家如何做好亚马逊跨境电商?如何成为大卖家?-程序员宅基地

文章浏览阅读369次,点赞6次,收藏8次。我们做技术孵化7年,我们专注于测评技术孵化和自养号教学,目前环境方案TigerAiLEO有市面上最成熟的方案,我们们有“手机端+电脑端”批量养号测评系统,一台手机和一台电脑就可以无限养号,视频中的一个窗口就是代表一个独立设备环境和IP网络,一账号一IP,做到完全隔离,电脑端可以批量打开十几个账号同时浏览操作,非常简单方便!亚马逊网站推广包括产品推广、品牌推广、展示推广、推广、秒杀等,选择合适的推广,并在网站外添加Facebook、YouTube等平台的推广,有足够的流量快速提升销量。

hadoop-2.7.1:Error: Cannot find configuration directory: /etc/hadoop_error: cannot find configuration directory: $/apps-程序员宅基地

文章浏览阅读1.7w次,点赞7次,收藏8次。安装hadoop参考:http://blog.csdn.net/hitwengqi/article/details/8008203由于配置是hadoop-2.7.1所以后来在启动过程会发现终端执行 ./start-yarn.shstarting yarn daemonsError: Cannot find configuration directory: /etc/hadoop_error: cannot find configuration directory: $/apps/hadoop-2.7.1/etc/hadoop

传奇技术传奇一条龙教程传奇游戏界面添加或删除自定义功能按钮_传奇自定义按钮-程序员宅基地

文章浏览阅读722次。用WIL编辑器打开该文件,然后就会看到存放的按钮图片,具体图片编号为72——91,每两张图片为一个按钮,分别代表"未按下状态"和"按下状态"时按钮的样子。所以这20张图片理论可以添加10个自定义功能按钮,但是,从我的测试中最多却只能添加6个按钮,至于6个以后为何添加不上还有待本人继续学习。自定义功能按钮就是在游戏界面中处于小地图,组队等按钮上面的一排可自定义进行功能设置的按钮,如图中所示,用方框选中的就是想要达到的效果。从72号图片开始,每相临的两个图片为一组,图片的样子可修改成自己想要的样子。_传奇自定义按钮

输入法adjustResize 遮挡问题 (webview输入法遮挡问题处理)-程序员宅基地

文章浏览阅读328次。adjustResize则是缩放可调整页面 所以要和ScrollView配合 但是如果界面设成全屏模式就不会生效。具体什么情况下失效,我没怎么验证。建议直接使用 adjustPan,就肯定失效了。WindowInsetsCompat的浅识。解决输入法遮挡的问题 基本上有两种。adjustPan会把页面整体上推。_adjustresize

MySQL数据库:第十七章:Explain详解-程序员宅基地

文章浏览阅读527次,点赞30次,收藏19次。面试题文档来啦,内容很多,485页!由于笔记的内容太多,没办法全部展示出来,下面只截取部分内容展示。

Log4j2再发新版本2,Java进阶班_log4j2最新版本-程序员宅基地

文章浏览阅读225次,点赞5次,收藏7次。这里是小编拿到的学习资源,其中包括“中高级Java开发面试高频考点题笔记300道.pdf”和“Java核心知识体系笔记.pdf”文件分享,内容丰富,更多更新细节,可以通过官网查看:https://logging.apache.org/log4j/2.x/默认允许协议限制为:java、ldap、ldaps,并将ldap协议限制为仅可访问Java原始对象。默认禁用JNDI的访问,用户需要通过配置log4j2.enableJndi参数开启。_log4j2最新版本

推荐文章

热门文章

相关标签