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

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

3天内不再提示

大模型分布式训练并行技术(一)-概述

深度学习自然语言处理 来源:吃果冻不吐果冻皮 2023-08-24 15:17 次阅读

近年来,随着Transformer、MOE架构的提出,使得深度学习模型轻松突破上万亿规模参数,传统的单机单卡模式已经无法满足超大模型进行训练的要求。因此,我们需要基于单机多卡、甚至是多机多卡进行分布式大模型的训练。

而利用AI集群,使深度学习算法更好地从大量数据中高效地训练出性能优良的大模型是分布式机器学习的首要目标。为了实现该目标,一般需要根据硬件资源与数据/模型规模的匹配情况,考虑对计算任务、训练数据和模型进行划分,从而进行分布式存储和分布式训练。因此,分布式训练相关技术值得我们进行深入分析其背后的机理。

下面主要对大模型进行分布式训练的并行技术进行讲解,本系列大体分九篇文章进行讲解。

大模型分布式训练并行技术(一)-概述

大模型分布式训练并行技术(二)-数据并行

大模型分布式训练并行技术(三)-流水线并行

大模型分布式训练并行技术(四)-张量并行

大模型分布式训练并行技术(五)-序列并行

大模型分布式训练并行技术(六)-多维混合并行

大模型分布式训练并行技术(七)-自动并行

大模型分布式训练并行技术(八)-MOE并行

大模型分布式训练并行技术(九)-总结

本文为分布式训练并行技术的第一篇,对大模型进行分布式训练常见的并行技术进行简要介绍。

数据并行

数据并行是最常见的并行形式,因为它很简单。在数据并行训练中,数据集被分割成几个碎片,每个碎片被分配到一个设备上。这相当于沿批次(Batch)维度对训练过程进行并行化。每个设备将持有一个完整的模型副本,并在分配的数据集碎片上进行训练。在反向传播之后,模型的梯度将被全部减少,以便在不同设备上的模型参数能够保持同步。典型的数据并行实现:PyTorch DDP。

f0442afe-4247-11ee-a2ef-92fbcf53809c.png

image.png

模型并行

在数据并行训练中,一个明显的特点是每个 GPU 持有整个模型权重的副本。这就带来了冗余问题。另一种并行模式是模型并行,即模型被分割并分布在一个设备阵列上。

通常有两种类型的模型并行:张量并行和流水线并行。

张量并行是在一个操作中进行并行计算,如:矩阵-矩阵乘法。

流水线并行是在各层之间进行并行计算。

因此,从另一个角度来看,张量并行可以被看作是层内并行,流水线并行可以被看作是层间并行。

张量并行

张量并行训练是将一个张量沿特定维度分成 N 块,每个设备只持有整个张量的 1/N,同时不影响计算图的正确性。这需要额外的通信来确保结果的正确性。

以一般的矩阵乘法为例,假设我们有 C = AB。我们可以将B沿着列分割成[B0 B1 B2 ... Bn],每个设备持有一列。然后我们将 A 与每个设备上 B 中的每一列相乘,我们将得到[AB0 AB1 AB2 ... ABn]。此刻,每个设备仍然持有一部分的结果,例如,设备(rank=0)持有 AB0。为了确保结果的正确性,我们需要收集全部的结果,并沿列维串联张量。通过这种方式,我们能够将张量分布在设备上,同时确保计算流程保持正确。

f05eae6a-4247-11ee-a2ef-92fbcf53809c.png

image.png

典型的张量并行实现:Megatron-LM(1D)、Colossal-AI(2D、2.5D、3D)。

流水线并行

流水线并行的核心思想是,模型按层分割成若干块,每块都交给一个设备。

在前向传播过程中,每个设备将中间的激活传递给下一个阶段。

在后向传播过程中,每个设备将输入张量的梯度传回给前一个流水线阶段。

这允许设备同时进行计算,从而增加训练的吞吐量。

f07ad702-4247-11ee-a2ef-92fbcf53809c.png

image.png

流水线并行训练的一个明显缺点是训练设备容易出现空闲状态(因为后一个阶段需要等待前一个阶段执行完毕),导致计算资源的浪费,加速效率没有数据并行高。

f0e64cda-4247-11ee-a2ef-92fbcf53809c.png

image.png

典型的流水线并行实现:GPipe、PipeDream、PipeDream-2BW、PipeDream Flush(1F1B)。

优化器相关的并行

目前随着模型越来越大,单个GPU的显存目前通常无法装下那么大的模型了。那么就要想办法对占显存的地方进行优化。

通常来说,模型训练的过程中,GPU上需要进行存储的参数包括了模型本身的参数、优化器状态、激活函数的输出值、梯度以及一些零时的Buffer。各种数据的占比如下图所示:

f1136350-4247-11ee-a2ef-92fbcf53809c.png

image.png

可以看到模型参数仅占模型训练过程中所有数据的一部分,当进行混合精度运算时,其中模型状态参数(优化器状态+ 梯度+ 模型参数)占到了一大半以上。因此,我们需要想办法去除模型训练过程中的冗余数据。

而优化器相关的并行就是一种去除冗余数据的并行方案,目前这种并行最流行的方法是 ZeRO(即零冗余优化器)。针对模型状态的存储优化(去除冗余),ZeRO使用的方法是分片,即每张卡只存 1/N 的模型状态量,这样系统内只维护一份模型状态。ZeRO有三个不同级别,对模型状态进行不同程度的分片:

ZeRO-1 : 对优化器状态分片(Optimizer States Sharding)

ZeRO-2 : 对优化器状态和梯度分片(Optimizer States & Gradients Sharding)

ZeRO-3 : 对优化器状态、梯度分片以及模型权重参数分片(Optimizer States & Gradients & Parameters Sharding)

f13e115e-4247-11ee-a2ef-92fbcf53809c.png

image.png

异构系统并行

上述的方法中,通常需要大量的 GPU 来训练一个大型模型。然而,人们常常忽略一点,与 GPU 相比,CPU 的内存要大得多。在一个典型的服务器上,CPU 可以轻松拥有几百GB甚至上TB的内存,而每张 GPU 卡通常只有 48 或 80 GB的内存。这促使人们思考为什么 CPU 内存没有被用于分布式训练。

而最近的进展是依靠 CPU 甚至是 NVMe 磁盘来训练大型模型。主要的想法是,在不使用张量时,将其卸载回 CPU 内存或 NVMe 磁盘。

通过使用异构系统架构,有可能在一台机器上容纳一个巨大的模型。

f1704f20-4247-11ee-a2ef-92fbcf53809c.png

image.png

多维混合并行

多维混合并行指将数据并行、模型并行和流水线并行等多种并行技术结合起来进行分布式训练。

f187ded8-4247-11ee-a2ef-92fbcf53809c.png

image.png

通常,在进行超大规模模型的预训练和全参数微调时,都需要用到多维混合并行。

f1c5ea66-4247-11ee-a2ef-92fbcf53809c.png

image.png

为了充分利用带宽,通常情况下,张量并行所需的通信量最大,而数据并行与流水线并行所需的通信量相对来说较小。因此,同一个服务器内使用张量并行,而服务器之间使用数据并行与流水线并行。

f1db6e9a-4247-11ee-a2ef-92fbcf53809c.png

image.png

自动并行

上面提到的数据并行、张量并行、流水线并行等多维混合并行需要把模型切分到多张AI加速卡上面,如果让用户手动实现,对开发者来说难度非常大,需要考虑性能、内存、通信、训练效果等问题,要是能够将模型按算子或者按层自动切分到不同的加速卡上,可以大大的降低开发者的使用难度。因此,自动并行应运而生。

f2358ba0-4247-11ee-a2ef-92fbcf53809c.png

image.png

MOE并行 / 专家并行

通常来讲,模型规模的扩展会导致训练成本显著增加,计算资源的限制成为了大规模密集模型训练的瓶颈。为了解决这个问题,一种基于稀疏 MoE 层的深度学习模型架构被提出,即将大模型拆分成多个小模型(专家,expert), 每轮迭代根据样本决定激活一部分专家用于计算,达到了节省计算资源的效果;并引入可训练并确保稀疏性的门(gate)机制,以保证计算能力的优化。

使用 MoE 结构,可以在计算成本次线性增加的同时实现超大规模模型训练,为恒定的计算资源预算带来巨大增益。而 MOE 并行,本质上也是一种模型并行方法。下图展示了一个有六个专家网络的模型被两路专家并行地训练。其中,专家1-3被放置在第一个计算单元上,而专家4-6被放置在第二个计算单元上。

f2521608-4247-11ee-a2ef-92fbcf53809c.png

image.png

结语

本文针对大模型进行分布式训练常见的并行技术进行了简要的介绍。后续章节将针对常见并行技术的不同方案进行详细的讲解。

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

    关注

    1

    文章

    2707

    浏览量

    47707
  • 数据集
    +关注

    关注

    4

    文章

    1179

    浏览量

    24356
  • pytorch
    +关注

    关注

    2

    文章

    763

    浏览量

    12836
  • 大模型
    +关注

    关注

    2

    文章

    1543

    浏览量

    1139

原文标题:大模型分布式训练并行技术(一)-概述

文章出处:【微信号:zenRRan,微信公众号:深度学习自然语言处理】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    分布式软件系统

    的联接,动态的联接,广播通知联接等。 --------------------- 什么是分布式智能? NI LabVIEW 8的分布式智能结合了相关的技术和工具,解决了
    发表于 07-22 14:53

    分布式发电技术与微型电网

    几种分布式发电简介2.分布式发电与配电网互联问题3.微型电网技术4.分布式发电(电源)技术应用的障碍和瓶颈5.
    发表于 03-11 13:37

    分布式能源系统当微型电网技术应用

    以及异常、故障,对于区域电力系统AreaEPS的影响明显,就必须通过AreaEPS与DR的互联系统ICS联网。   电网微型电网的分布式电源并网技术的互联系统就是电网’>微型电网的个非常重要
    发表于 06-13 14:25

    《无线通信FPGA设计》分布式FIR的并行改写

    《无线通信FPGA设计》分布式FIR的并行改写,结果与matlab仿真结果基本吻合
    发表于 02-26 09:09

    浅谈分布式缓存技术

    包括会话状态和应用程序扩展时的状态数据;4,并行处理,涉及大量中间计算结果需要共享;5,分布式缓存为事件流提供连续查询(continuousquery)处理技术,满足实时需求6,分布式
    发表于 11-16 15:45

    如何利用FPGA设计无线分布式采集系统?

    近些年来,随着电子技术的发展,无线通信技术、计算机网络的发展,分布式无线数据采集网络技术开始兴起,并迅速的应用到各个领域。在些地形复杂,不
    发表于 10-14 07:10

    分布式系统的优势是什么?

    当讨论分布式系统时,我们面临许多以下这些形容词所描述的 同类型: 分布式的、删络的、并行的、并发的和分散的。分布式处理是个相对较新的领域,
    发表于 03-31 09:01

    各种分布式电源的电气特性

    PS:渗透率的概念:从字面上理解,“渗透”就是由分布式电源发出的功率进入(渗入)到配电系统,所谓的“率”就是由分布式电源发出的电和整个系统所消耗的电(或者说总发电量)的个比值。各种分布式
    发表于 07-12 07:54

    HDC2021技术分论坛:跨端分布式计算技术初探

    ,我们将对跨端分布式计算技术进行详细的分析。、跨端分布式算力技术介绍跨端分布式计算是Harmo
    发表于 11-15 14:54

    HDC2021技术分论坛:跨端分布式计算技术初探

    带来易协同、低延迟和高稳定的分布式体验。下面,我们将对跨端分布式计算技术进行详细的分析。、跨端分布式算力
    发表于 11-23 17:06

    文带你看懂分布式软总线在家庭场景的应用

    在整个软总线业务逻辑中分工合作,通过构筑分布式通信框架,达成分布式软总线通信的目标。图2 分布式软总线业务模型1. 发现通过分布式软总线的发
    发表于 01-06 11:32

    常见的分布式供电技术有哪些?

      分布式供电技术是指将发电设备建设在用户或供电系统端,将发电与负荷直接相连,通过局部供电的方式满足用户的电力需求。其主要特点是将传统的集中式供电方式改为分散供电方式,不仅既有大型电站向小型
    发表于 04-10 16:28

    OpenHarmony 分布式硬件关键技术

    喇叭和超高清摄像头等。 03►分布式硬件平台关键技术,OpenHarmony在设计之初时就采用了分布式硬件池化架构。通过对各设备能力的抽象,构建全局硬件资源池抽象
    发表于 08-24 17:25

    探究超大Transformer语言模型分布式训练框架

    模型的预训练计算。 上篇主要介绍了大模型训练的发展趋势、NVIDIA Megatron的模型并行
    的头像 发表于 10-20 09:25 2132次阅读

    基于PyTorch的模型并行分布式训练Megatron解析

    NVIDIA Megatron 是一个基于 PyTorch 的分布式训练框架,用来训练超大Transformer语言模型,其通过综合应用了数据并行
    的头像 发表于 10-23 11:01 1018次阅读
    基于PyTorch的<b class='flag-5'>模型</b><b class='flag-5'>并行</b><b class='flag-5'>分布式</b><b class='flag-5'>训练</b>Megatron解析