作者:同润,临在
团队:阿里云机器学习平台PAI
1. 概述
GPT模型能较好的解决NLP各个应用领域的工作,比方文本分类,推理,对话,问答,完形填空,浏览了解,摘要,生成等等。百亿/千亿参数量级的GPT大模型作用在这些应用领域尽管成果很好,然而训练老本十分高。以OpenAI推出的1750亿的GPT-3为例,在1024张A100GPU上预估须要34天,一万亿参数的GPT-3在3072张A100显卡上也至多须要84天;微软/英伟达联合推出的5300亿的NLG模型,在2048张A100显卡上耗时了3个月的训练工夫能力达到比拟好的收敛成果。基于MoE的稠密化训练是目前最具竞争力的降本路径。另一方面,GPT稠密大模型在中文畛域的成果还没有失去理论的验证,是否无效解决中文超多分类工作,口语化表白的中文推理或者情感剖析工作,都是咱们亟待摸索的课题。综上所述,咱们的工作是摸索基于稠密MoE构造的GPT模型在中文工作上的性能下限,同时把大模型训练老本压缩到极致,仅在单机A100硬件反对下就能将百亿参数大模型训练成熟。
继去年应用Transformer Encoder大模型获得中文小样本学习、英文预训练模型常识量度量双冠后,往年阿里云又在中文语言了解权威评测基准CLUE的中文零样本学习权威榜单ZeroCLUE上获得冠军。咱们将大模型技术能力向前推动了一大步。基于MoE稠密构造,仅用一台A100就把160亿参数量级的多任务通用GPT模型训练成熟。此次刷榜的模型是阿里云机器学习PAI团队推出的 GPT-MoE,这也是业界推出的首个稠密的纯decoder架构模型在zeroclue上登顶。这是通往低成本且高性能多任务通用自然语言了解的重要里程碑。
MoE的全称是Mixture of Experts,其中的Expert对应的是Transfomrer模型的FFN层,在训练的时候从多个FFN中选取一部分FFN进行激活。这意味着模型能够在不减少计算强度(FLOPS/Bytes)的状况下,通过减少FFN的数量进而减少模型参数量级来晋升模型在上游工作上的性能。采纳MoE后的稠密Transformer模型和等同品质的浓密模型相比有5倍的吞吐性能晋升,如下图所示。咱们在稠密架构总体设计的时候,抉择让MoE跟纯Transformer Decoder架构的GPT进行有机联合。起因是MoE跟Decoder联合成果通常会好于跟Encoder的联合成果。具体来讲,Encoder是通过随机masking的形式学习语言模型,而这种被随机masked的token会让expert的路由抉择呈现不平衡。另一方面,思考到Decoder类的GPT模型比Encoder类的Bert模型有更宽泛应用场景,因而咱们采纳GPT+MoE的技术架构路线。
2. 算法&工程技术解读
算法方面咱们提出了一种更加高效稳固的稠密路由均衡器,基于Prompt的畛域话术再适应的零样本学习以及中文中文简单工作定向优化。工程方面咱们训练了工业级中文BPE分词器,微调过程中的工程优化,transformer训练减速工具rapidformer等,上面为大家一一具体解读。
打造工业级中文BPE分词器 & 高质量预训练数据集
中文每个字都有独立的意思,能够利用复杂多变的自由组合来表白多种含意,如果GPT的词表仍旧采纳Bert那种按字分词的策略,这无形中极大减少了GPT语言建模的难度。比方上面这个例子,“道”字能够衍生出意义齐全不同的三个词:道德,情理,赔罪。依据“道”字右边的上下文信息揣测其左边的字难度还是比拟大的。
咱们须要构建一种性能鲁棒的中文分词工具,它可能从大规模语料中依照上下文统计特色提炼出中文单个汉字形成的大颗粒度词组。咱们决定采纳先进的BPE算法来尝试做到这点。咱们应用的Sentencepiece工具在5亿条高质量中文语料上训练了一个星期产出了一个5w词表量级的中文BPE分词器。另外中文超大规模语料的抉择也有考究,去年咱们应用PAI数据集就能把13亿的Bert模型训练成熟,往年咱们尝试了更大的WuDao2.0数据集,大略是PAI数据集的十倍。原始WuDoa2.0数据集品质还是不太符合要求的,咱们依照去年对PAI数据集的荡涤过程,从新对原始的WuDao2.0数据集做了荡涤,生成了一份绝对高质量的WuDao2.0数据集。咱们在数据集和分词器上做了一些融化试验,论断如下:
- 精选后的wudao数据集比精选的PAI数据集(只有wudao量级的十分之一)在验证集loss上要小,同时在TNEWS和EPRSTMT等上游工作指标要高。
- 5亿条句子训练进去的BPE分词器比1亿条句子训练进去的BPE分词器在验证集loss上有0.02的升高,同时在TNEWS和EPRSTMT上游工作指标有小幅晋升。
强化型稠密路由均衡器
MoE概念最早呈现在2017年的ICLR[1]上。它的基本概念非常简略,在前向流传的时候动静地从多个FFN中随机抉择一些执行运算,从而达到参数裁减的成果。后续一系列论文468也都是围绕设计稠密路由均衡器开展。
真正将MoE带到工业级发扬光大的是谷歌公司的GShard[2]和Switch Transformer[3]。其采纳top-1路由机制。每个Expert依据如下的softmax函数被赋予一个概率值,取概率最高(top-1)的那个Expert当作网络的FFN层。其中W_r是做路由抉择时须要学习的参数。
咱们作出的改良是对Expert路由抉择也就是到token到FFN的映射模块进行强化。让该模块在做映射门路抉择的时候更加保持平衡。咱们通过大量的融化试验发现了一种性能更好更稳固的稠密路由均衡器Large-Margin[10] Router。其在Transformer中的功能位置如下图所示:
采纳Large-Margin Router后能够看出validation loss的降落非常显著,同时上游工作的晋升的成果也晋升不少。
模型 | 参数量 | LAMBADA | PIQA | BoolQ | RACE | WebQs |
---|---|---|---|---|---|---|
Sparse-GPT-125M-MoE64 | 1.9B | 0.3988 | 0.6425 | 0.4737 | 0.2890 | 0.0034 |
Sparse-GPT-125M+MoE64-Large-Margin Router | 1.9B | 0.4017 | 0.6496 | 0.5003 | 0.2948 | 0.0057 |
刷榜采纳的模型参数配置如下所示:
sequence length | 2048 |
---|---|
hidden size | 2048 |
number layers | 24 |
number attention heads | 16 |
number experts (Pyramid Resudial) | 32 32 32 32 32 32 32 32 32 32 64 64 |
稠密参数总量 | 160亿 |
浓密参数总量 | 13亿 |
畛域话术再适应的零样本学习
咱们仅应用一台A100机型就能拉起160亿量级的稠密GPT大模型的训练。这种低成本的训练环境,容许咱们通过持续预训练或者微调来能进一步开释GPT大模型的能力,让其在各个NLP工作中施展更大的价值。
持续稠密预训练的再适应损失函数
训练GPT大模型应用的超大规模中文数据集WuDao2.0,其话术格调偏差正式的用语格调。而ZeroCLUE9个工作中有六个工作是口语化的格调,两个工作是是科技论文格调。这两种格调是大模型没有见过的,因而须要通过学习更多特定畛域的陈说表达方式让大模型去适应新的话术格调。具体来讲,当根底大模型训练成熟后,咱们对每个工作或者多个类似工作进行持续预训练,最初对每个工作执行无监督零样本学习。如下图所示:
咱们应用CLUE官网提供的未标注的工作语料来学习格调话术。对loss函数设计是总的loss= 上下文 loss + 提醒语 loss + 伪标签loss+MoEloss。示例如下:
其中上下文和提醒语的loss应用GPT训练语言模型规范的负对数最大似然,伪标签loss应用Masked LM,MoE loss和预训练保持一致。同时通过相关系数调节各个loss之间的奉献比例。
寻找最优中文提醒语及其答案
提醒语和对应答案的设计对zeroshot的性能影响十分大。以EPRSTMT情感剖析工作为例,咱们发现应用“称心/不称心”比应用“负面/侧面”成果好不少。提醒语中加上评论两个字毫无作用,这跟咱们的直觉貌似有些不统一。需采纳更为通用的提醒语:“这句话表白的是”。上面是咱们通过实际总结进去的比拟好的提醒语和答案。
工作名称 | 工作类型 | Prompt |
---|---|---|
EPRSTMT | 情感剖析 Sentiment | 提醒语:这句话表白的是 答案抉择:“不称心”,“称心” |
CSLDCP | 主题分类 Topic Classification | 提醒语:这句话是对于 答案抉择:主题标签 |
TNEWS | 主题分类 Topic Classification | 提醒语:这条新闻的主题是 答案抉择:主题标签 |
IFLYTEK | 主题分类 Topic Classification | 提醒语:这两句话的关系是 答案抉择:“蕴含”,“矛盾”,“中性” |
OCNLI | 自然语言推理 Natural Language Inference | 提醒语:这两句话的关系是 答案抉择:“蕴含”,“矛盾”,“中性” |
BUSTM | 自然语言推理 Natural Language Inference | 提醒语:这两句话的意思 答案抉择:”雷同“,”不同“ |
CSL | 关键词辨认 | 关键词辨认 提醒语:关键词{}在这段摘要中是否全副为实在关键词 答案抉择:”是“,”不是“ |
CLUEWSC | 互指消解 Coreference Resolution | 提醒语:这句话中的{}指的是{}吗? 答案抉择:”是“,”不是“ |
备注:CHID工作不须要提醒语和答案\
\
单机环境优化训练显存 & 超大体积大模型加载\
咱们在应用160亿参数大模型做持续预训练的时候面临两个十分大的工程挑战
- 超大容量ckpt导致单机无奈加载
- 原始数据on the fly持续预训练显存耗费更大导致无奈持续预训练
160亿稠密GPT大模型须要占用2T的内存空间能力加载进来,通过摸索尝试,咱们最终用NVME挂载来裁减虚拟内存的形式解决了该问题,侥幸的是咱们应用的A100机型NVME空间很大。命令如下所示:
sudo mkfs -t ext4 /dev/nvme0n1sudo mkfs -t ext4 /dev/nvme3n1sudo mkdir /mnt /mnt3sudo mount /dev/nvme0n1 /mntsudo mount /dev/nvme3n1 /mnt3sudo dd if=/dev/zero of=/mnt/swapfile bs=1G count=1024sudo dd if=/dev/zero of=/mnt3/swapfile bs=1G count=1024sudo chmod 600 /mnt/swapfilesudo chmod 600 /mnt3/swapfilesudo swapoff -asudo mkswap /mnt/swapfilesudo mkswap /mnt3/swapfilesudo swapon /mnt/swapfile /mnt3/swapfile
更为致命的是咱们发现160亿参数的大模型依照和根底预训练同样的训练减速&降显存配置加载进来显存就OOM了。OOM的次要起因是因为采纳了on the fly的数据加载形式以及更为简单的反向流传。得益于Rapidformer减速库良好的用户接口设计,咱们发现关上zero-stage-2开关同时限度number workers个数能够执行持续预训练。这样做存在一个负效应就是根底预训练和持续预训练的优化器存在不统一,不过影响在可控范畴内。
攻坚中文超多分类工作&简单推理工作&关键字辨认工作
中文超多分类工作
榜单中有二个很艰难的超多分类工作,是英文工作中素来没有遇到过的。家喻户晓,GPT模型善于做生成类的工作,BERT模型善于做辨认类的工作。IFLYTEK和CSLDCP是辨认类的工作且类别超多,类别数过多导致likelihood-ranking的性能降落,间接应用ZeroShot的精度很低。
工作 | 形容 | 示例 |
---|---|---|
IFLYTEK | 该数据集对于app利用形容的长文本标注数据,蕴含和日常生活相干的各类利用主题,共119个类别:"打车":0,"地图导航":1,"收费WIFI":2,"租车":3,….,"女性":115,"经营":116,"收款":117,"其余":118(别离用0-118示意)。 | {"label": "110", "label_des": "社区超市", "sentence": "朴朴快送超市创建于2016年,专一于打造挪动端30分钟即时配送一站式购物平台,商品品类蕴含水果、蔬菜、肉禽蛋奶、海鲜水产、粮油调味、酒水饮料、休闲食品、日用品、外卖等。朴朴公司心愿能以全新的商业模式,更高效快捷的仓储配送模式,致力于成为更快、更好、更多、更省的在线批发平台,带给消费者更好的生产体验,同时推动中国食品安全过程,成为一家让社会尊敬的互联网公司。,朴朴一下,又好又快,1.配送工夫提醒更加清晰敌对2.保障用户隐衷的一些优化3.其余进步应用体验的调整4.修复了一些已知bug"} |
CSLDCP | 中文迷信文献学科分类数据集,包含67个类别的文献类别,这些类别来自于别离归属于13个大类,范畴从社会科学到自然科学,文本为文献的中文摘要。 | {"content": "通过几年的察看和实际,初步把握了盆栽菊花的栽培技术及办法,并进行了总结,以满足人们对花卉生产的需要,进步观赏植物的商品价值,为企业化生产的盆菊提供技术领导。", "label": "园艺学", "id": 1770} |
为了晋升超多分类问题的精度,咱们首先对这些叶子类目进行演绎整顿,形象出一级类目进去,比方:
叶子类目 | 演绎出的一级类目 |
---|---|
航行空战,射击游戏,休闲益智,棋牌核心,经营养成 | 手游 |
约会社交,即时通讯,工作社交,生存社交 | 社交 |
接着在执行loglikehood-ranking的时候先在一级类目范畴内进行粗排,接着在叶子泪目范畴内进行精排。采纳这样一级泪目辅助的精细化排序后,这三个多分类工作均匀有4个点左右的晋升。
简单推理工作
这两个工作的难点在于口语化,句子短。即便进行畛域话术再适应,也很难在几个epoch内让160亿大模型的格调迅速适配过去。
工作 | 形容 | 示例 |
---|---|---|
OCNLI | 原生中文自然语言推理数据集,是第一个非翻译的、应用原生汉语的大型中文自然语言推理数据集。 | "sentence1":"身上裹一件工厂发的棉大衣,手插在袖筒里", "sentence2":"身上至多一件衣服","label": "entailment" |
BUSTM | 对话短文本语义匹配数据集,源于小布助手。它是OPPO为品牌手机和IoT设施自研的语音助手,为用户提供便捷对话式服务。 | {"id": 5, "sentence1": "女孩子到底是不是你", "sentence2": "你不是女孩子吗", "label": "1"} |
咱们将CMNLI/OCNLI/BUSTM的无标签数据混合在一起进行联结畛域自适应,采纳同样的Prompt设计,进行联结推理。执行多任务数据混合后在OCNLI和BUSTM的平均分有5个点的晋升。\
关键字辨认工作
工作 | 形容 | 示例 |
---|---|---|
CSL | 取自中文论文摘要及其关键词,论文选自局部中文社会科学和自然科学外围期刊,工作指标是依据摘要判断关键词是否全副为实在关键词(实在为1,伪造为0)。 | {"id": 1, "abst": "为解决传统平均FFT波束造成算法引起的3维声呐成像分辨率升高的问题,该文提出分区域FFT波束造成算法.远场条件下, 以保障成像分辨率为约束条件,以划分数量起码为指标,采纳遗传算法作为优化伎俩将成像区域划分为多个区域.在每个区域内选取一个波束方向, 取得每一个接管阵元收到该方向回波时的解调输入,以此为原始数据在该区域内进行传统平均FFT波束造成.对FFT计算过程进行优化,升高新算法的计算量, 使其满足3维成像声呐实时性的要求.仿真与试验结果表明,采纳分区域FFT波束造成算法的成像分辨率较传统平均FFT波束造成算法有显著进步,且满足实时性要求.", "keyword": ["水声学", "FFT", "波束造成", "3维成像声呐"], "label": "1"} |
起初咱们认为这个工作不行是prompt的设计有问题,起初通过大量的试验咱们发现应用log-likelihood-ranking推理准则没有应用perplexity推理准则有用,部署perplexity-ranking后有将近7个点的晋升。
大模型训练减速工具Rapidformer
Rapidformer的定位是为Transformer模型库提供大模型大数据量的训练减速能力。这是通过有机整合微软的DeepSpeed,英伟达的Megatron以及Meta的FairScale来做到的。如下图所示:
\
下图比照了Rapidformer,Megatron,DeepSpeed三者之间的减速能力差异,Rapidformer交融了Megatron和DeepSpeed的各自的长处,提供了一个对立的训练环境。
基于Rapidformer,咱们能够通过减速开关的组合,来找到最优的吞吐。上面咱们用130亿参数的GPT-MoE大模型为例,介绍下如何寻找最优的吞吐减速策略组合。130亿稠密模型的参数配置如下:
number layers | hidden size | number attention heads | number experts | 参数总量 |
---|---|---|---|---|
24 | 1024 | 16 | 128 | 13B |
咱们用到的训练减速核心技术包含:
激活检查点(Activation Checkpoint) 在神经网络两头设置若干个检查点(checkpoint),检查点以外的两头后果全副舍弃,反向流传求导数的工夫,须要某个两头后果就从最近的检查点开始计算,这样既节俭了显存,又防止了从头计算的繁琐过程。
梯度累积 (Gradient Accumulation) 以batch_size=16为例,能够每次算16个样本的均匀梯度,而后缓存累加起来,算够了4次之后,而后把总梯度除以4,而后才执行参数更新,这个成果等价于batch_size=64。这是一种无效的减少Batch Size的办法。通过该策略能够将每个step的batch size裁减到很大,联合LAMB优化器会晋升收敛速度。
混合精度训练(Mixed Precision Training) 采纳混合精度训练的益处次要有以下两点:1. 缩小显存占用,因为FP16的内存占用只有FP32的一半,天然地就能够帮忙训练过程节俭一半的显存空间。2. 放慢训练和推断的计算,FP16除了能节约内存,还能同时节俭模型的训练工夫。具体原理如下图所示,外围是在反向流传参数更新的时候须要保护一个FP32的备份来防止舍入误差,另外会通过Loss Scaling来缓解溢出谬误。
Zero显存优化器 ZeRO(The Zero Redundancy Optimizer)是一种用于大规模分布式深度学习的新型内存优化技术。ZeRO具备三个次要的优化阶段别离对应于优化器状态,梯度和参数的划分。
- 优化器状态分区(Pos) :缩小了4倍的内存,通信容量与数据并行性雷同
- 减少梯度分区(Pos+g) : 8x内存缩小,通信容量与数据并行性雷同
- 减少参数分区(Pos+g+p) :内存缩小与数据并行度和复杂度成线性关系。
所有吞吐试验都采纳sequence length=2048,Global Batch Size=256,通过下表咱们发现当在local DDP环境下,关上Activation Checkpoint,敞开Zero-stage-2,8步梯度累积每步耗费的工夫是起码的,吞吐也是最高的。同时显存也失去了充沛的利用。
DDP | Activation Checkpoint | Zero-stage-2 | Batch Size | elapsed time per iteration (ms) | Max Reserve Memory |
---|---|---|---|---|---|
torch | 关 | 关 | 4 | OOM | OOM |
torch | 关 | 开 | 4 | 3688 | 74454 |
torch | 关 | 开 | 8 | OOM | OOM |
torch | 开 | 开 | 8 | 5493 | 52338 |
torch | 开 | 关 | 4 | 4734 | 43912 |
torch | 开 | 关 | 8 | 5331 | 50026 |
torch | 开 | 关 | 16 | 6970 | 59745 |
local | 关 | 关 | 4 | 3452 | 75192 |
local | 开 | 关 | 8 | 5349 | 50026 |
local | 开 | 关 | 16 | 6834 | 59754 |
local | 开 | 关 | 32 | OOM | OOM |
3. 应用示例
本次刷榜应用的160亿参数的中文GPT-MOE稠密大模型及其ZeroShot利用已在EasyNLP(https://github.com/alibaba/EasyNLP)中开源,详情请见链接。具体应用形式如下所示:
首先通过如下的命令拉起EasyNLP专属镜像并创立容器,外面曾经装置了Rapidformer及其全副的依赖库。
docker pull pai-image-manage-registry.cn-shanghai.cr.aliyuncs.com/pai/easy_nlp:0.0.7
而后下载中文版的GPT-MOE模型,留神须要在硬盘上预留2T的存储空间同时须要通过swap设置2T的内存空间。
./ossutil64 cp -r oss://atp-modelzoo-sh/tutorial/rapidformer/zeroclue/ckpts ckpts
接下来就能够开始针对每个工作执行持续预训练了,在run_finetune_gpt_moe.sh脚本中曾经通过开关关上了必要的训练降显存减速技术比方:Activation Checkpoint和Zero-stage-2。从CLUE官网下载无标签的训练数据,而后打上伪标签,注入进大模型中开始进行工作话术畛域再适应。
sh run_finetune_gpt_moe.sh
训练实现后保留ckpt就能够执行针对特定工作的Zeroshot推理了,应用如下的推理脚本。
sh run_predict_gpt_moe.sh
4. 总结
在这次中文ZeroCLUE刷榜评测中,咱们围绕中文百亿稠密GPT大模型落地开掘了以下核心技术:
- 基于large-margin的稠密路由均衡器比传统Top-1均衡器成果更好更稳固。
- 针对160亿参数稠密大模型的畛域话术再适应算法以及工程底座经刷榜测验是牢靠的。
- 晋升了中文超多分类问题和简单推理等问题的零样本学习工作成果。
- 大模型训练减速工具的可靠性进一步失去了验证。
后续在EasyNLP中还会陆续放出更多高质量的大模型,敬请期待。
参考文件
[1] . Outrageously Large Neural Networks: The Sparsely-Gated Mixture-of-Experts Layer
[2]. GShard: Scaling Giant Models with Conditional Computation and Automatic Sharding
[3]. Switch Transformers: Scaling to Trillion Parameter Models with Simple and Efficient Sparsity
[4]. BASE Layers: Simplifying Training of Large, Sparse Models
[5]. Hash Layers For Large Sparse Models
[6]. TAMING SPARSELY ACTIVATED TRANSFORMER WITH STOCHASTIC EXPERTS
[7]. GLaM: Efficient Scaling of Language Models with Mixture-of-Experts
[8]. Unified Scaling Laws for Routed Language Models
[9]. Designing Effective Sparse Expert Models
[10]. Large Margin Deep Networks for Classification