如何训练2457亿参数量的中文巨量模型“源1.0”

浪潮人工智能研究院

从2018年的BERT到2020年的GPT-3,NLP语言模型经历了爆发式的发展过程,其中BERT模型的参数量为3.4亿,而GPT-3的模型参数量达到了1750亿。2021年9月,浪潮人工智能研究院发布了“源1.0”,它是目前规模最大的中文AI单体模型,参数规模高达2457亿,训练采用的中文数据集达5TB。“源1.0”在语言智能方面表现优异,获得中文语言理解评测基准CLUE榜单的零样本学习和小样本学习两类总榜冠军。测试结果显示,人群能够准确分辨人与“源1.0”作品差别的成功率低于50%。

海量的参数带来了模型训练和部署上的巨大挑战。本文将聚焦“源1.0”背后的计算挑战以及我们采取的训练方法。

1.“源1.0”的模型结构

“源1.0”是一个典型的语言模型。语言模型通俗来讲就是能够完成自然语言理解或者生成文本的神经网络模型。对于“源1.0”,我们考虑语言模型(Language Model,LM)和前缀语言模型(Prefix Language Model,PLM)两种模型结构。如下图所示:

图1 模型结构示意图(左图为LM,右图为PLM)

我们比较了130亿参数的LM和PLM在不同下游任务上的结果,注意到LM在Zero-Shot和Few-Shot上表现更好,而PLM在微调方面表现出色。微调通常会在大多数任务中带来更好的准确性,然而微调会消耗大量的计算资源,这是不经济的。所以我们选择LM作为“源 1.0”模型的基础模型结构。

2. 如何训练“源1.0”

2.1.源1.0训练面对的挑战

“源1.0”的训练需要面对的第一个挑战就是数据和计算量的挑战。

数据方面,如果把训练一个巨量模型的训练过程比作上异常战役的话,那么数据就是我们的弹药。数据量的多少,决定了我们可以训练模型的规模,以及最后的效果。针对这一方面,我们构建了一个全新的中文语料库,清洗后的高质量数据规模达到了5TB,是目前规模最大的中文语料库。

图2 数据预处理流程图

算力方面,根据OpenAI提出的PetaFlop/s-day衡量标准,我们可以估算“源1.0”训练的计算需求情况。根据Wikipedia提供的数据(https://en.wikipedia.org/wiki/OpenAI),GPT-3的计算需求约为3640 PetaFlop/s-day, 约等于64个A100 GPU训练1年时间。而“源1.0”的计算需求达到了4095 PetaFlop/s-day。

计算资源的巨大开销是限制研究人员研发具有数以千万计参数的NLP大模型的瓶颈。例如GPT-3是在由10000个GPU所组成的集群上训练得到的。我们在设计“源1.0”的模型结构时,考虑到了影响大规模分布式训练的关键因素,采用了专门的分布式训练策略,从而加速了模型的训练过程。

在模型训练时一般最常用的是采用数据并行分布式计算策略,但这只能满足小模型的训练需求。对于巨量模型来说,由于其模型参数量过大,远远超过常用计算设备比如GPU卡的显存容量,因此需要专门的算法设计来解决巨量模型训练的显存占用问题,同时还需要兼顾训练过程中的GPU计算性能的利用率。

2.2“源1.0”的训练策略

为了解决显存不足的问题,我们采用了张量并行、流水并行、数据并行相结合的并行策略,实现了在2128个GPU上部署“源1.0”,并完成了1800亿tokens的训练。

一、张量并行

针对单个GPU设备不能完整的承载模型训练,一个解决方案就是张量并行+数据并行的2D并行策略。具体来说,使用多个GPU设备为1组,比如单个服务器内的8个GPU为1组,组内使用张量并行策略对模型进行拆分,组间(服务器间)采用数据并行。

对于张量并行部分,NVIDIA在Megatron-LM中提出了针对Transformer结构的张量并行解决方案。其思路是把每一个block的参数和计算都均匀的拆分到N个GPU设备上,从而实现每个GPU设备都承担这一block的参数量和计算量的1/N效果。图3展示了对Transformer结构中的MLP层和self-attention层进行张量并行拆分计算的过程示意图。

图3 张量并行示意图

在训练过程中,tensor经过每一层的时候,计算量与通信数据量之比 如下:

其中,S为输入序列的长度,h为隐藏层的大小(hidden size)。

二、流水并行

图4 流水线并行示意图

对于具有数千亿参数的语言模型,这些参数很难被存放在单个节点中。流水线并行将LM的层序列在多个节点之间进行分割,以解决存储空间不足的问题,如图5所示。每个节点都是流水线中的一个阶段,它接受前一阶段的输出并将结果过发送到下一阶段。如果前一个相邻节点的输出尚未就绪,则当前节点将处于空闲状态。节点的空闲时间被称为流水线气泡(pipline bubble)。为了提高流水行并行的性能,我们必须尽可能减少在气泡上花费的时间。定义流水线中气泡的理想时间占比为如下形式:

根据这一公式,流水线气泡的耗时随着层数L的增加而增加,随着微批次大小(micro-batch-size)的增加而减小。当mL/l 的时候,流水并行过程中的流水线气泡对训练性能的影响几乎可以忽略。

与此同时,在流水并行过程中,节点间的计算量与通信数据量之比 为:

根据上面的公式,流水线中节点的计算效率与h和S呈线性关系,这与张量并行类似。

三、数据并行

图5 数据并行示意图

采用数据并行时,全局批次大小(global batch size)按照流水线分组进行分割。每个流水线组都包含模型的一个副本,数据在组内按照局部批次规模送入模型副本。数据并行时的计算量与通信数据量的比值可用如下公式近似:

d≫1 时,上面公式可以进一步简化成:

根据这一公式,我们可以看出数据并行的计算效率与全局批次大小B和序列长度S呈正比关系。由于模型对内存的需求与S的平方成正比,与B成线性关系,因此增加全局批次大小可以更有效的提升数据并行的效率。

当全局批次大小过大的时候,模型很容易出现不收敛的问题,为了保证模型训练过程的稳定性,我们将全局批次大小限制在了 个token内。

根据以上的理论分析,我们确定了设计“源1.0”巨量模型结构的基本原则:

  • 尽可能增加序列长度,因为它有利于张量并行、流水线并行和数据并行。由于内存占用与序列长度的平方成正比,因此有必要在反向传播时重新计算激活函数,以节省内存开销。
  • 语言模型中层数太多会对性能产生负面影响,因为这会增加在流水线气泡上的时间消耗。
  • 增加隐藏层大小可以提高张量并行和流水线并行的性能。
  • 增加节点中的微批次大小可以提高流水线并行效率,增加全局批次大小可以提升数据并行的效率。

在这一设计原则的基础上,我们设计的“源1.0”的模型结构以及分布式策略的设置如下表所示:

Model

Layers

Hidden size

Global BS

Micro BS

Sequence

Length

t

p

d

GPUs

Yuan 1.0

76

16384

3360

1

2048

8

38

7

2128

结合模型结构的特性以及我们使用集群的硬件特性,我们如下的节点配置和分布式策略选择:

  • “源1.0”模型在训练过程中共使用了2128个GPU
  • 模型分成了7组,每组38台AI服务器,里面放置一个完整的“源1.0”模型,7组之间采用数据并行
  • 每组的38个服务器,采用流水并行每个服务器放置1/38的模型(2个Transformer Layer),一共76层
  • 在每台服务器内采用张量并行,按照Transformer结构的每一层进行均匀切分

模型收敛曲线如下图:

关于“源1.0”的更多信息,大家可以参照浪潮人工智能研究院发布在arxiv上的论文:https://arxiv.org/abs/2110.04725。

如何训练2457亿参数量的中文巨量模型“源1.0”相关推荐

  1. 巨量模型时代,浪潮不做旁观者:2457亿参数,打造全球最大中文预训练模型

    作者 | 琰琰 战鼓催征千嶂寒,阴阳交会九皋盘. 飞军万里浮云外,铁骑丛中明月边. 看到这首诗歌,有超过50%的人误以为是人类的杰作 但其实,它出自巨量模型 源1.0 经过图灵测试认证,源1.0 写诗 ...

  2. 又被 AI 抢饭碗?2457 亿参数规模,全球最大中文人工智能巨量模型 “源1.0”正式开源...

    作者 | 伍杏玲 出品 | AI科技大本营(ID:rgznai100) 输入: 昔我往矣,杨柳依依. 今我来思,雨雪霏霏. 行道迟迟,载渴载饥. 我心伤悲,莫知我哀! (以战争为题写一首诗) 回复: ...

  3. AI周报丨中文巨量模型源1.0比GPT-3强在哪里?;谷歌用协同训练策略实现多个SOTA,单一ViT模型执行多模态多任务

    01 # 行业大事件 语言大模型的终极目标是什么? 在自然语言处理(NLP)领域,暴力美学仍在延续. 自 2018 年谷歌推出 BERT(3.4 亿参数)以来,语言模型开始朝着「大」演进.国内外先后出 ...

  4. 中文巨量模型“源1.0”:模型结构与生成效果解析

    浪潮人工智能研究院 "源 1.0"自 2021 年 9 月底发布以来收获了广泛的关注.其参数量达 2457 亿,超越美国 OpenAI 组织研发的 GPT-3."源 1. ...

  5. 中文巨量模型“源1.0”的学习优化方法

    最近,浪潮人工智能研究院发布了中文巨量模型"源1.0",参数量达2457亿,超越美国OpenAI组织研发的GPT-3."源1.0"在语言智能方面表现优异,获得中 ...

  6. 中文巨量模型“源1.0”的模型结构与生成效果解析

    "源 1.0"自2021年9月底发布以来收获了广泛的关注.其参数量达2457亿,超越美国OpenAI组织研发的GPT-3."源1.0"在语言智能方面表现优异,获 ...

  7. 中文巨量模型“源1.0”的小样本学习优化方法

    浪潮发布了中文巨量模型"源1.0",参数量达2457亿,超越美国OpenAI组织研发的GPT-3."源1.0"在语言智能方面表现优异,获得中文语言理解评测基准C ...

  8. 中文巨量模型“源1.0”:语料质量清洗与数据分析方法

    2021年,浪潮人工智能研究院发布了中文巨量模型"源1.0",其参数规模为2457亿,训练采用的中文数据集达5TB,超越美国OpenAI组织研发的GPT-3模型."源1. ...

  9. LIVE 预告 | 快手宋洋:千亿特征,万亿参数,快手推荐精排模型的发展史

    随着GPT-3给人们带来的震撼,大模型在各个应用领域得到迅速的发展和应用. 近期,媒体平台「机器之心」上发布了一篇文章「1.9万亿参数量,快手落地业界首个万亿参数推荐精排模型」,其中提到快手开发的精排 ...

最新文章

  1. 宝宝都能看懂的机器学习世界
  2. VM 与容器之争!Docker赢了!
  3. 一天学会 Maven+Springboot+RabbitMQ 微服务快速开发教程
  4. 又发现一个visual studio 2015的坑啊。
  5. 百度前端技术学院,学习第一天。
  6. python3 可执行文件_将python3打包成为exe可执行文件(pyinstaller)
  7. oracle安装时EM,EM 安装时报错 - Oracle数据库管理 - ITPUB论坛-中国专业的IT技术社区...
  8. MFC开发IM-第二十七篇、如何引入acl,解决Json解析问题
  9. jQuery中eq与get的区别(整理)
  10. JavaScript培训
  11. 基于树莓派的语音机器人
  12. 2014最好的IT简历提示
  13. 科技论文写作之时态问题
  14. UIAlertView、UIActionSheet兼容iOS8
  15. 什么是IaaS PaaS SaaS,看这一篇就够了
  16. 千挂科技与东风柳汽达成前装量产合作,2024年交付自动驾驶牵引车
  17. 学弟想「白嫖」优质大学课,姐直接甩给他 8 个网站
  18. 最没灵魂的爬虫——Selenium 游戏信息的爬取与分析
  19. 【猛料】腾讯前总监受贿侵占数百万获刑9年
  20. java 姓名_Java生成随机姓名、性别和年龄的实现示例

热门文章

  1. Java培训的学费标准是多少
  2. PRD 的编写和修改注意事项
  3. Linux Shell 脚本限制ssh最大用户登录数
  4. virtualenv 在windows下的绿化方法
  5. 转自一个面试者的“提示”
  6. IronPython系列:Composite Pattern及其实现
  7. 自动驾驶规划术语与搜索空间的几种方法
  8. 库卡机器人坐标手势_美的、格力、娃哈哈......那些跨界的机器人玩家现在怎么样了?...
  9. java中List深拷贝的简单实例
  10. Result Maps collection already contains value for