【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,加入微信群请扫码:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/67141.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

快来试试!免费用上GPT-4 !!!

GPT-4 简介 GPT-4是OpenAI上个月推出的最新人工智能语言模型,它可以根据给定的文本或关键词生成各种类似于人类语言甚至超越人类语言的文本,例如文章、故事、诗歌、代码、对话等。 GPT-4拥有1750亿个参数,是目前最大的语言模型之一&#xf…

想找一些外文文献,有哪些靠谱的外文文献网站推荐?

论文写作是目前几乎每个专科生、本科生、研究生的必修课,保证毕业的同时也能够进行一定科研工作。论文写作是基于一定科研试验或社会调查的,但过程中文献检索能力同样不可或缺,能否真正的搞好科研,关键在于能否读懂前人的研究。对…

Get Offer —— 简历投递与加分细节

点赞后看,养成习惯 喜欢的话 可以点个关注哟 你们的点赞支持对博主们来说很重要哦 !!! 本篇文章帮你逐个击破以下几个问题: 01 靠谱的简历投递方式有哪些? 02 接到对方的电话面试通知,你在忙该怎么办? 03 面试时,一开始你不知道说些什么,该怎么办? 04 手忙脚乱…

金九银十,从简历投递到offer审批,入职腾讯我只用了七天

9月底投岗腾讯后台开发,历经3面技术HR面offer审批,我却只花了7天时间就上岸成功了... 文末分享一些我的经验之谈,敬请期待... 9-22 投递简历 9-24 一面(大概1h50min) osi七层网络模型,五层网络模型&#…

我是如何 2 个月拿到 4 份 Offer 并收入翻倍的?

作者 | minus 责编 | 伍杏玲 本文经授权转载自石杉的架构笔记 先做个自我介绍,楼主坐标帝都,5年经验,跳槽之前在一家传统小公司,年薪21万。 这次面试前前后后大概两个月的时间,面试了大概6家公司,命中4…

offer(第二版)2021-06-02

还差差14个题完结 面试题1:赋值运算符函数 面试题2:实现Singleton模式 面试题3:数组中重复的数字 面试题4:二维数组中的查找 面试题5:替换空格 面试题6:从尾到头打印链表 面试题7:重建二…

一文带你玩转offer-01

文章目录 1.RabbitMq是如何实现消息路由的1.1 工作流程1.2 路由策略Direct ExchangeTopic ExchangeFanout Exchange 2.谈谈你对时间轮的理解2.1 什么是时间轮2.2 时间轮的工作原理2.3 时间轮优缺点分析 3.什么是幂等?如何解决幂等性问题3.1 什么是幂等3.2 如何解决幂…

和HR谈了5min包裹,刚拿到的offer又被撤回了...

最近,在网上看到很多人都分享了自己谈薪失败,导致offer被revoke的情况。 撤回就算了,更惨的是,还有可能会被该公司列入黑名单。 Offer被revoke很常见,不过在求一个面试机会都难的今年,到手的offer被撤就显得…

您有一份OFFER请查收!

我们总以为生活欠我们一个“满意” 其实我们欠生活一次“尝试” 爱可生正在招人 快来投简历尝试下吧!🤔 如果你 想看到 金融银行体系对数据高可用性要求达99.9999%, 严格要求数据一致性的场景下 数据库如何选型、如何运维?…

记一次腾讯社招前端面试(已拿到offer入职)

作者:小冷^_^ 链接:https://juejin.im/post/5dde65496fb9a07161483fc9 笔者信息 我某211非计算机相关专业2018届本科生,在校期间实习有半年多的小公司Java开发实习经历,毕业之后投递360,入职了360企业安全成为专门的前…

刚收到了Facebook的Offer,我是这样为面试做准备的?

点击上方“程序员大咖”,选择“置顶公众号” 关键时刻,第一时间送达! 我刚刚在硅谷的科技公司完成了7次现场面试,我收到了来自Facebook的软件工程师的职位Offer。下面分享一下我是怎么为面试做准备的,以及我在这个过程…

自学测试半年,我终于收到了腾讯的offer,收到消息的那一刻我哭出了声...

我是一名毕业于普通一本的化学专业学生,毕业的两年时间里,我一直奔波在化工厂里。每天工作三班倒,下了班就是一包烟一瓶酒,生活过得非常堕落。 原本想着虽然每天很累,但是至少稳定。然而没有想到的是,化工…

ChatGPT如何帮助DevOps提升效率

DevOps 是一种方法论,旨在提高软件开发和 IT 运营团队的协作和效率。DevOps 涉及各种任务和流程的自动化,例如规划、编码、测试、部署、监控和故障排除。然而,其中一些任务和流程仍然有大量任务需要人工手动处理,而这会减慢软件产…

IQ测试GPT完胜大学生;AIGC+表情包=?微软将GPT全面集成到Office;原作者对AI有声读物不太满意;GitHub今日热榜 | ShowMeAI资讯日报

🎡 『IQ测试』AI 完胜大学生 GPT-3 在智商(IQ)测试中的表现如何?UCLA(加利福尼亚大学洛杉矶分校)的研究人员发现,在衡量 IQ 的一系列推理测试中,自回归语言模型 GPT-3 的成绩已经明…

什么样的企业需要私有化部署?

编者按:本文介绍了私有化部署的概念及特点,分析了私有化部署适用于什么样的企业,并进一步提出天翎低代码平台在私有化部署方面颇有建树,可以满足企业需求。 概要: (1)私有化部署的概念及特点 (2)什么样的企业需要私有…

私有化部署的企业IM:实现工作消息、文件的全面可控

随着数字化转型的持续深化,大型政企组织所面临的安全压力倍增,在体验到沟通协作上的方便快捷后,会更深层地思考软件能够抵御风险的程度,这也使得安全可控成为企业必须注重的选项。所以在面对企业规模大、设备部署多、业务场景复杂…

私有化部署vs公有云部署,你知道这些不同吗?

编者按:低代码的私有化部署与SaaS云部署决定了用户体验有很大的不同,本文带各位深入探究其中差异,并介绍私有化本地部署的低代码平台。 不同模式要分清 作为两者截然不同的部署模式,;私有化部署与SaaS云部署区别可谓巨…

企业微信私有版设置服务器,企业微信私有化部署解决方案,企业微信私有化部署疑问解答...

企业微信具备了 企业微信私有部署和企业微信的区别 很多用户之前没有了解过私有化部署,不太了解私有化部署对于企业来说有什么好处,而在微伴君看来,进行私有化部署,对企业来说至少有以下好处: 1、安全可控。私有化部署…

关于Android app 国际化 中英文翻译的细节处理

导语: 最近一个项目上有要求完成app国际化,也就是如果系统语言是英文,那么你的app打开时就会自动读取string 中的字符串资源,自动完成匹配,以满足国际化需求,那么我们就按照步骤走,完成我们的a…

英文android系统,安卓系统中英文对照

安卓系统中英文对照 来源:华强电子网 作者:华仔 浏览:926 时间:2017-04-11 17:24 标签: 摘要: 模拟安卓机身内存里的\system\app, app文件夹里就是装系统自带的文件。将那些不要的,也…