东莞网站建设制作价格,哪些网站建设公司,上传网站安装教程视频教程,冠县做网站推广近年来#xff0c;随着Transformer、MOE架构的提出#xff0c;使得深度学习模型轻松突破上万亿规模参数#xff0c;传统的单机单卡模式已经无法满足超大模型进行训练的要求。因此#xff0c;我们需要基于单机多卡、甚至是多机多卡进行分布式大模型的训练。
而利用AI集群随着Transformer、MOE架构的提出使得深度学习模型轻松突破上万亿规模参数传统的单机单卡模式已经无法满足超大模型进行训练的要求。因此我们需要基于单机多卡、甚至是多机多卡进行分布式大模型的训练。
而利用AI集群使深度学习算法更好地从大量数据中高效地训练出性能优良的大模型是分布式机器学习的首要目标。为了实现该目标一般需要根据硬件资源与数据/模型规模的匹配情况考虑对计算任务、训练数据和模型进行划分从而进行分布式存储和分布式训练。因此分布式训练相关技术值得我们进行深入分析其背后的机理。
下面主要对大模型进行分布式训练的并行技术进行讲解本系列大体分九篇文章进行讲解。
本文为分布式训练并行技术的第一篇对大模型进行分布式训练常见的并行技术进行简要介绍。
技术交流
技术要学会分享、交流不建议闭门造车。一个人可以走的很快、一堆人可以走的更远。
相关资料、数据、技术交流提升均可加我们的交流群获取群友已超过2000人添加时最好的备注方式为来源兴趣方向方便找到志同道合的朋友。 方式①、添加微信号mlc2060备注来自CSDN 技术交流 方式②、微信搜索公众号机器学习社区后台回复加群 数据并行
数据并行是最常见的并行形式因为它很简单。在数据并行训练中数据集被分割成几个碎片每个碎片被分配到一个设备上。这相当于沿批次Batch维度对训练过程进行并行化。每个设备将持有一个完整的模型副本并在分配的数据集碎片上进行训练。在反向传播之后模型的梯度将被全部减少以便在不同设备上的模型参数能够保持同步。典型的数据并行实现PyTorch DDP。 模型并行
在数据并行训练中一个明显的特点是每个 GPU 持有整个模型权重的副本。这就带来了冗余问题。另一种并行模式是模型并行即模型被分割并分布在一个设备阵列上。
通常有两种类型的模型并行张量并行和流水线并行。 张量并行是在一个操作中进行并行计算如矩阵-矩阵乘法。 流水线并行是在各层之间进行并行计算。
因此从另一个角度来看张量并行可以被看作是层内并行流水线并行可以被看作是层间并行。
张量并行
张量并行训练是将一个张量沿特定维度分成 N 块每个设备只持有整个张量的 1/N同时不影响计算图的正确性。这需要额外的通信来确保结果的正确性。
以一般的矩阵乘法为例假设我们有 C AB。我们可以将B沿着列分割成 [B0 B1 B2 … Bn]每个设备持有一列。然后我们将 A 与每个设备上 B 中的每一列相乘我们将得到 [AB0 AB1 AB2 … ABn] 。此刻每个设备仍然持有一部分的结果例如设备(rank0)持有 AB0。为了确保结果的正确性我们需要收集全部的结果并沿列维串联张量。通过这种方式我们能够将张量分布在设备上同时确保计算流程保持正确。 典型的张量并行实现Megatron-LM1D、Colossal-AI2D、2.5D、3D。
流水线并行
流水线并行的核心思想是模型按层分割成若干块每块都交给一个设备。 在前向传播过程中每个设备将中间的激活传递给下一个阶段。 在后向传播过程中每个设备将输入张量的梯度传回给前一个流水线阶段。
这允许设备同时进行计算从而增加训练的吞吐量。 image.png
流水线并行训练的一个明显缺点是训练设备容易出现空闲状态因为后一个阶段需要等待前一个阶段执行完毕导致计算资源的浪费加速效率没有数据并行高。 典型的流水线并行实现GPipe、PipeDream、PipeDream-2BW、PipeDream Flush1F1B。
优化器相关的并行
目前随着模型越来越大单个GPU的显存目前通常无法装下那么大的模型了。那么就要想办法对占显存的地方进行优化。
通常来说模型训练的过程中GPU上需要进行存储的参数包括了模型本身的参数、优化器状态、激活函数的输出值、梯度以及一些零时的Buffer。各种数据的占比如下图所示 可以看到模型参数仅占模型训练过程中所有数据的一部分当进行混合精度运算时其中模型状态参数(优化器状态 梯度 模型参数占到了一大半以上。因此我们需要想办法去除模型训练过程中的冗余数据。
而优化器相关的并行就是一种去除冗余数据的并行方案目前这种并行最流行的方法是 ZeRO即零冗余优化器。针对模型状态的存储优化去除冗余ZeRO使用的方法是分片即每张卡只存 1/N 的模型状态量这样系统内只维护一份模型状态。ZeRO有三个不同级别对模型状态进行不同程度的分片 ZeRO-1 : 对优化器状态分片Optimizer States Sharding ZeRO-2 : 对优化器状态和梯度分片Optimizer States Gradients Sharding ZeRO-3 : 对优化器状态、梯度分片以及模型权重参数分片Optimizer States Gradients Parameters Sharding image.png
异构系统并行
上述的方法中通常需要大量的 GPU 来训练一个大型模型。然而人们常常忽略一点与 GPU 相比CPU 的内存要大得多。在一个典型的服务器上CPU 可以轻松拥有几百GB甚至上TB的内存而每张 GPU 卡通常只有 48 或 80 GB的内存。这促使人们思考为什么 CPU 内存没有被用于分布式训练。
而最近的进展是依靠 CPU 甚至是 NVMe 磁盘来训练大型模型。主要的想法是在不使用张量时将其卸载回 CPU 内存或 NVMe 磁盘。
通过使用异构系统架构有可能在一台机器上容纳一个巨大的模型。 多维混合并行
多维混合并行指将数据并行、模型并行和流水线并行等多种并行技术结合起来进行分布式训练。 image.png
通常在进行超大规模模型的预训练和全参数微调时都需要用到多维混合并行。 为了充分利用带宽通常情况下张量并行所需的通信量最大而数据并行与流水线并行所需的通信量相对来说较小。因此同一个服务器内使用张量并行而服务器之间使用数据并行与流水线并行。 自动并行
上面提到的数据并行、张量并行、流水线并行等多维混合并行需要把模型切分到多张AI加速卡上面如果让用户手动实现对开发者来说难度非常大需要考虑性能、内存、通信、训练效果等问题要是能够将模型按算子或者按层自动切分到不同的加速卡上可以大大的降低开发者的使用难度。因此自动并行应运而生。 MOE并行 / 专家并行
通常来讲模型规模的扩展会导致训练成本显著增加计算资源的限制成为了大规模密集模型训练的瓶颈。为了解决这个问题一种基于稀疏 MoE 层的深度学习模型架构被提出即将大模型拆分成多个小模型(专家expert) 每轮迭代根据样本决定激活一部分专家用于计算达到了节省计算资源的效果并引入可训练并确保稀疏性的门( gate )机制以保证计算能力的优化。
使用 MoE 结构可以在计算成本次线性增加的同时实现超大规模模型训练为恒定的计算资源预算带来巨大增益。而 MOE 并行本质上也是一种模型并行方法。下图展示了一个有六个专家网络的模型被两路专家并行地训练。其中专家1-3被放置在第一个计算单元上而专家4-6被放置在第二个计算单元上。 结语
本文针对大模型进行分布式训练常见的并行技术进行了简要的介绍。后续章节将针对常见并行技术的不同方案进行详细的讲解。
如果觉得我的文章能够能够给您带来帮助期待您的点赞收藏加关注~~