共计 9627 个字符,预计需要花费 25 分钟才能阅读完成。
作者:同润,临在
团队:阿里云机器学习平台 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/nvme0n1
sudo mkfs -t ext4 /dev/nvme3n1
sudo mkdir /mnt /mnt3
sudo mount /dev/nvme0n1 /mnt
sudo mount /dev/nvme3n1 /mnt3
sudo dd if=/dev/zero of=/mnt/swapfile bs=1G count=1024
sudo dd if=/dev/zero of=/mnt3/swapfile bs=1G count=1024
sudo chmod 600 /mnt/swapfile
sudo chmod 600 /mnt3/swapfile
sudo swapoff -a
sudo mkswap /mnt/swapfile
sudo mkswap /mnt3/swapfile
sudo 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