关于华为:盘古大模型参与者解读盘古β大模型

摘要:盘古NLP大模型有两个,α和β。α曾经开源gitee链接,它是基于GPT-3构造的网络,主打生成类工作。β是基于Transformer构造的网络,更善于了解类工作。

本文分享自华为云社区《千亿模型训练—盘古β大模型》,原文作者:泰坦 。

在4月25日的华为HDC大会上, 余总和田奇老师公布了盘古AI大模型,作为参加了盘古我的项目的开发人员,也来凑个冷落,简略介绍一下盘古我的项目,如下图:

NLP大模型其实有两个,α和β。α曾经开源gitee链接,它是基于GPT-3构造的网络,主打生成类工作。β是基于Transformer构造的网络,更善于了解类工作,田其老师台上互动的就是β,CLUE打榜的也是β。

什么是大模型

  • 网络参数大

千亿参数: 100000000000*4(float32)/1024^3=381.5GB

在盘古β中, 理论参数量约为400G, 应用Adam优化器, 总参数量约为1.2T, 在2048卡训练下, 因为有一些冗余信息, 保留的ckpt理论大小为830M。

  • 训练资源大

应用数千张昇腾910训练1月以上。

  • 训练数据大

原始数据40T, 解决后数据600G。实际上最重要的是要有钞能力。

如何训练大模型

大模型的艰难,理论难在工程。咱们应用华为云机器学习平台ModelArts + 机器学习框架Mindspore + AI处理器昇腾910进行开发。为了撑持大模型我的项目,Mindspore的小伙伴开发了十分多的新个性,如优化器模型并行,管道并行等,具体信息能够查看咱们总架金雪锋的答案。

上面借鉴一下立交桥跳水冠军的帖子,简略介绍一下并行技术,及盘古β如何使用它们的。

数据并行

数据并行(DP)是利用最广的并行策略,对在多个设施上部署深度学习模型十分有用。但该办法存在缺点,如随着训练设施数量一直减少,通信开销一直增长,模型统计效率呈现损失等。如下图所示,数据并行中每个分布式节点存储雷同的参数(parameters),input的数据不一样。因为盘古β应用了Adam优化器,会占用十分多的动态内存,所以batch size开不大。应用数据并行,相当于扩充了batch size。

模型并行

单卡无奈包容全量参数, 须要把模型参数切分到每个不同的卡上。分布式节点贮存不同的参数,然而他们的input往往是雷同的。

在盘古β中,所有参数为1.2T,每张910卡理论可用HBM为31G,实践算出起码须要40张卡。因为HCCL等限度,理论起码须要64卡进行训练。能够抉择32模型并行,2数据并行,或者64模型并行。

管道并行

大规模分布式训练, 计算通信耗时长. 应用管道并行, 减速训练(X2)。

后面的模型并行,只是对模型的参数进行了切分,管道并行是对网络进行切分,每张卡只创立一个子网络,再通过流水线的形式组合起来。

以上图为例,4个节点将5层的网络进行了切分,每个节点只创立一个子网络。节点的执行序如下图所示:

每个节点接管前一个节点的输入,计算实现后再把输入传递给下一个节点。当最初一个stage实现计算后,便开始计算反向,grads由最初一个节点一层层传递到第一个节点,最初实现参数更新,再进行下一个step。

盘古β由encoder+decoder构造组成,两者共用一个Embedding层。在管道并行下,须要把Embedding层从第一个stage始终传递到第一个Decoder所在的stage,在此stage对target_ids计算嵌入,再送入Decoder中进行计算。而所有Decoder都会用到Encoder的输入来计算cross attention,所以咱们对Decoder做了革新,使其接管Encoder输入的同时,再把此Encoder的输入传递给下一层Decoder。

在盘古β中,咱们把整个模型切分成了16个stage,最初执行速度比非管道并行快1倍。

其余小性能

容灾

因为采纳大集群进行训练,难免会产生硬件,软件方面的问题,造成训练终止。咱们开发了容灾性能,会把每张卡应用的参数保留成ckpt,上传到ModelArts的NAS硬盘上。持续训练时每张卡只须要下载对应的ckpt加载,便能够持续训练了。在盘古β中,从工作创立后,每台机器都须要下载残缺数据集到本地,每张卡的训练过程都须要下载一个ckpt进行加载,再进行图编译,最初真正训练跑起来须要2小时左右。

弹性训练

因为资源较为缓和,我的项目开始仅有1024卡进行训练,当残余资源到位后,咱们调整了并行策略,而后手动拆分ckpt,再进行持续训练。

当预训练实现后,finetuen会应用128或256卡进行训练,此时又须要手动合并ckpt,再进行训练。

拆分合并ckpt须要了解Tensor在不同并行策略下的排布,及策略扭转后如何变换Tensor,保障每一张卡获取到对应的Tensor切片。

训练技巧

无监督预训练

盘古β采纳了Masked Language Model办法进行预训练,即在输出句子中随机mask掉15%的词,模型预测mask掉的token。

上游工作(CLUE)finetune

应用multi_task办法(无监督数据集,CLUE数据集无监督数据集,CLUE数据有监督数据集)进行第一次finetune。这里应用的是CLUE所有上游工作的数据集。如无监督数据集A条,CLUE数据集无监督数据集B条,CLUE数据有监督数据集C条。

当第一次finetune的loss达到预期后,再针对独自的上游工作,应用有监督数据集进行finetuen。

PET(Pattern-Exploiting Training)

工作转换:不再间接对label进行预测,而是预测其label description,行将其转换为完形填空模式的工作,来预测不同label description的概率,例如:

​ 一个样本为“context:’「天天特价房」华庭仁和国内 3室2厅2卫仅售65万’, label: ‘房产’”

转换为如下模式:

​ “以下是一则 房产 相干新闻标题: 「天天特价房」华庭仁和国内 3室2厅2卫仅售65万”

分布式推理

在大部分CLUE工作中,decoder只须要推理1步,但一些生成工作会推理多步。因为图编译会把decoder的循环局部齐全开展,故咱们在这里进行了革新,把整个网络拆分成了Encoder+Decoder两个网络,decoder的多步推理放在python层进行。

管道并行推理比较复杂,训练时应用上千张卡,推理时仅应用32卡。训练时整个网络分成了16个stage,推理时encoder分成4个stage,decoder分成4个stage,每张卡既有encoder,也有encoder。因为管道并行网络的特殊性,只有第一个stage须要真正的输出,只有最初一个stage才有真正的输入。不同的stage是跨机器的,就须要把encoder的输入传递给decoder,这里咱们创立了Send,Recv网络进行发送,接管。

最初

以后盘古β应用的mindspore有些个性是新开发的,目前还在致力开发,预计不久这些新性能就会正式合入mindspore的master,华为云ModelArts也通过了此次大模型的考验,积淀了一些能力,未来也会上线一些大模型的新性能,请大家刮目相待。

点击关注,第一工夫理解华为云陈腐技术~

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理