0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

聚焦“源1.0”背后的计算挑战以及我们采取的训练方法

浪潮AIHPC 来源:浪潮AIHPC 作者:浪潮AIHPC 2022-11-15 16:13 次阅读

从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.0”的模型结构

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

91275cda-64bc-11ed-8abf-dac502259ad0.jpg

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

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

如何训练“源1.0”

| 源1.0训练面对的挑战

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

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

914ec108-64bc-11ed-8abf-dac502259ad0.jpg

图2 数据预处理流程图

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

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

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

| “源1.0”的训练策略

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

a. 张量并行

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

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

9177114e-64bc-11ed-8abf-dac502259ad0.jpg

图3 张量并行示意图

在训练过程中,tensor经过每一层的时候,计算量与通信数据量之比91b4a91e-64bc-11ed-8abf-dac502259ad0.png如下:

91cea1a2-64bc-11ed-8abf-dac502259ad0.jpg

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

b. 流水并行

91e98698-64bc-11ed-8abf-dac502259ad0.jpg

图4 流水线并行示意图

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

920f7e3e-64bc-11ed-8abf-dac502259ad0.jpg

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

与此同时,在流水并行过程中,节点间的计算量与通信数据量之比91b4a91e-64bc-11ed-8abf-dac502259ad0.png为:

924189b0-64bc-11ed-8abf-dac502259ad0.jpg

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

c. 数据并行

925b54c6-64bc-11ed-8abf-dac502259ad0.jpg

图6 数据并行示意图

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

92a067aa-64bc-11ed-8abf-dac502259ad0.jpg

91b4a91e-64bc-11ed-8abf-dac502259ad0.pngd≫ 1时,上面公式可以进一步简化成:

92ce6272-64bc-11ed-8abf-dac502259ad0.jpg

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

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

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

尽可能增加序列长度,因为它有利于张量并行、流水线并行和数据并行。由于内存占用与序列长度的平方成正比,因此有必要在反向传播时重新计算激活函数,以节省内存开销;

语言模型中层数太多会对性能产生负面影响,因为这会增加在流水线气泡上的时间消耗;

增加隐藏层大小可以提高张量并行和流水线并行的性能;

增加节点中的微批次大小可以提高流水线并行效率,增加全局批次大小可以提升数据并行的效率;

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

92ec6e7a-64bc-11ed-8abf-dac502259ad0.jpg

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

“源1.0”模型在训练过程中共使用了2128个GPU;

模型分成了7组,每组38台AI服务器,里面放置一个完整的“源1.0”模型,7组之间采用数据并行;

每组的38个服务器,采用流水并行每个服务器放置1/38的模型(2个Transformer Layer),一共76层;

在每台服务器内采用张量并行,按照Transformer结构的每一层进行均匀切分;

模型收敛曲线如下图:

930cd2a0-64bc-11ed-8abf-dac502259ad0.jpg

91b4a91e-64bc-11ed-8abf-dac502259ad0.png

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

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 神经网络
    +关注

    关注

    42

    文章

    4767

    浏览量

    100668
  • 模型
    +关注

    关注

    1

    文章

    3206

    浏览量

    48793
  • 语言模型
    +关注

    关注

    0

    文章

    518

    浏览量

    10261

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

文章出处:【微信号:浪潮AIHPC,微信公众号:浪潮AIHPC】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    聚焦离子束(FIB)技术的特点、优势以及应用

    本文介绍了聚焦离子束(FIB)技术的特点、优势以及应用。 一、FIB 在芯片失效分析中的重要地位 芯片作为现代科技的核心组成部分,其可靠性至关重要。而在芯片失效分析领域,聚焦离子束(FIB)技术正
    的头像 发表于 11-21 11:07 234次阅读
    <b class='flag-5'>聚焦</b>离子束(FIB)技术的特点、优势<b class='flag-5'>以及</b>应用

    PyTorch GPU 加速训练模型方法

    的基本原理 GPU(图形处理单元)最初是为图形渲染设计的,但随着技术的发展,人们发现GPU在并行计算方面有着天然的优势。GPU拥有成千上万个核心,可以同时处理大量数据,这使得它在进行矩阵运算和并行计算时比CPU更加高效。 2. 检查GPU设备 在开始
    的头像 发表于 11-05 17:43 517次阅读

    什么是协议分析仪和训练

    长时间、大规模的分析。 软件型协议分析仪:基于计算机软件的工具,通过安装在计算机上实现网络数据包的捕获、解析和分析,灵活且便于扩展。 二、训练器在电子设计和测试领域,训练器通常与协议分
    发表于 10-29 14:33

    Pytorch深度学习训练方法

    掌握这 17 种方法,用最省力的方式,加速你的 Pytorch 深度学习训练
    的头像 发表于 10-28 14:05 176次阅读
    Pytorch深度学习<b class='flag-5'>训练</b>的<b class='flag-5'>方法</b>

    如何训练ai大模型

    :从可靠的来源获取数据,如公开数据集、内部数据库或第三方数据提供商。 2. 数据清洗 去除重复数据 :确保数据集中没有重复项,以避免在训练过程中引入冗余信息。 处理缺失值 :对于缺失的数据,可以采取填充、删除或插值等方法进行处
    的头像 发表于 10-17 18:17 764次阅读

    FP8模型训练中Debug优化思路

    目前,市场上许多公司都积极开展基于 FP8 的大模型训练,以提高计算效率和性能。在此,我们整理并总结了客户及 NVIDIA 技术团队在 FP8 模型训练过程中的 debug 思路和
    的头像 发表于 09-06 14:36 304次阅读
    FP8模型<b class='flag-5'>训练</b>中Debug优化思路

    电流为0的处理方法及影响

    电流为0的情况通常指的是电流的输出电流为零。这种情况可以由多种原因引起,包括电路故障、电源故障、负载故障等。在这种情况下,我们需要对电路进行详细的分析,以确定问题的原因并采取相应的
    的头像 发表于 08-06 17:03 946次阅读

    ai大模型训练方法有哪些?

    AI大模型训练方法是一个复杂且不断发展的领域。以下是ai大模型训练方法: 数据预处理和增强 数据清洗:去除噪声和不完整的数据。 数据标准化:将数据缩放到统一的范围。 数据增强:通过旋转、缩放、裁剪等
    的头像 发表于 07-16 10:11 1421次阅读

    BP神经网络的原理、结构及 训练方法

    神经网络是一种受人类大脑神经元结构启发的计算模型,由大量的神经元(或称为节点、单元)通过权重连接而成。每个神经元接收输入信号,通过激活函数处理后输出信号,神经元之间的连接权重决定了信号在网络中的传递方式。 1.2 多层前馈神经网络 BP神经网络是一种多层前馈神经网络,由输入
    的头像 发表于 07-03 10:08 561次阅读

    【大语言模型:原理与工程实践】大语言模型的预训练

    进行损失计算,得到下一个目标的预测。也会设计一些其他辅助训练任务,与主任务共同训练。选择合适的预训练数据是确保模型性能和泛化能力的关键,通过对预训练
    发表于 05-07 17:10

    CO2通快与百超聚焦镜选择方法

    CO2通快与百超聚焦镜选择方法
    发表于 04-23 11:56 0次下载

    谷歌模型训练软件有哪些功能和作用

    谷歌模型训练软件主要是指ELECTRA,这是一种新的预训练方法,源自谷歌AI。ELECTRA不仅拥有BERT的优势,而且在效率上更胜一筹。
    的头像 发表于 02-29 17:37 764次阅读

    混合专家模型 (MoE)核心组件和训练方法介绍

    ) 的 Transformer 模型在开源人工智能社区引起了广泛关注。在本篇博文中,我们将深入探讨 MoEs 的核心组件、训练方法以及在推理过程中需要考量的各种因素。 让我们开始吧!
    的头像 发表于 01-13 09:37 1214次阅读
    混合专家模型 (MoE)核心组件和<b class='flag-5'>训练方法</b>介绍

    晶振的负载电容和等效电阻的概念、作用以及计算方法

    晶振的负载电容和等效电阻的概念、作用以及计算方法  晶振(也称为晶体振荡器)是电子产品中常用的一种振荡,它能够提供稳定频率的信号,用于各种计时和时序控制应用。晶振的正常工作需要合适的负载电容和等效
    的头像 发表于 01-03 15:47 2152次阅读

    串馈天线阵列智能设计方案

    和机器学习辅助的微带串馈阵列综合方法。分析不同位置和尺寸的BE在串馈微带阵列中的相似性,将BE分为不同的种类。引入余弦域训练方法降低计算开销。
    发表于 12-17 09:15 1252次阅读
    串馈天线阵列智能设计方案