大模型训练框架Megatron原理

news/2024/12/28 18:29:29/

这篇文章是关于NVIDIA Megatron框架的深入分析,该框架用于训练超大的Transformer语言模型。

摘要

Megatron:基于PyTorch的分布式训练框架,用于训练超大的Transformer语言模型。
目标:通过综合应用数据并行、Tensor并行和Pipeline并行来复现如GPT-3这样的大型模型。

引言


大模型的重要性:在NLP领域,大模型能带来更精准的语义理解和推理能力。
挑战:显存限制、计算需求巨大,以及不同并行策略的通信模式和通信量问题。

1.数据并行


概念:在每个worker上复制一份模型,输入数据集被分片,梯度定期汇总。
限制:GPU的batch_size过小,降低GPU利用率,增加通信成本;最大设备数受限于batch_size。

2.模型并行


概念:将模型的内存和计算分布在多个worker之间,解决单个设备无法容纳的问题。
类型:
        流水线并行 :将模型的不同层放到不同设备上。
        张量并行 :在层内进行分割,将矩阵运算分配到不同设备上。

技术组合


并行技术的组合使用:不同的并行技术可以结合使用,但会导致复杂的相互作用。
Megatron-LM:展示了如何结合流水线、张量和数据并行技术,在1000个GPU上训练大型语言模型。

张量模型并行(Tensor Model Parallelism)


原理:通过将矩阵乘法分割到多个GPU上,减少通信和控制GPU计算范围。
Transformer模型并行:特指层内切分,即Tensor Model Parallel。
切分Transformer:Megatron将Masked Multi Self Attention和Feed Forward都进行切分以并行化。
切分MLP:MLP块的第一部分是GEMM,后面是GeLU,Megatron提供了两种并行化GEMM的选项。
切分self attention:利用多头注意力操作中固有的并行性,以列并行方式对GEMM进行分区。

3.并行配置

3.1 符号说明

一些用于描述并行配置的符号,这些符号包括:

  • t:张量模型并行度(Tensor Model Parallelism degree)
  • p:流水线模型并行度(Pipeline Model Parallelism degree)
  • d:数据并行度(Data Parallelism degree)
  • m:微批次数量(microbatch count)
  • B:总批次大小(total batch size)
  • b:微批次大小(microbatch size)
  • s:序列长度(sequence length)
  • h:隐藏层大小(hidden size)
3.2 Tensor and Pipeline Model Parallelism

张量模型并行和流水线模型并行的配置:

  • 张量模型并行:在同一服务器内的不同GPU之间分割模型的参数和计算。
  • 流水线模型并行:跨服务器的不同GPU之间分割模型的层,每个阶段执行模型的一部分计算。

当使用流水线并行时,会引入流水线气泡(pipeline bubbles),这是由于流水线中的微批次需要在设备间传递,导致某些设备在等待数据时出现空闲。气泡的大小与流水线深度和微批次数量有关。

3.3 Data and Model Parallelism

数据并行和模型并行的结合使用:

  • 流水线模型并行:当 t=1t=1(即不考虑张量模型并行)时,流水线的微批次数量是 m=B/(d⋅b)m=B/(d⋅b),流水线气泡大小是 (n/d−1)⋅(B/(d⋅b))(n/d−1)⋅(B/(d⋅b))。
  • 数据和张量模型并行:当使用张量模型并行时,每个微批次都需要执行all-reduce通信,这在多GPU服务器之间可能非常昂贵。而数据并行对于每个批次只需执行一次all-reduce。

结论:

  1. 结论#1:在使用多GPU服务器时,通常应该将张量模型并行度控制在单个服务器内的GPU数量以内,然后使用流水线模型并行来跨服务器扩展到更大的模型。
  2. 结论#2:当使用数据和模型并行时,总的模型并行大小应该是 M=t⋅pM=t⋅p,这样模型参数和中间元数据可以放入GPU内存。数据并行性可用于将训练扩展到更多GPU。
3.4 Microbatch Size

微批次大小 bb 对模型训练吞吐量的影响。微批次大小既影响操作的算术强度,也影响流水线气泡大小。最佳微批次大小取决于模型的吞吐量和内存占用特性,以及流水线深度 pp、数据并行尺寸 dd 和批尺寸 BB。

经验之谈#3:

  • 经验之谈#3:最佳微批次尺寸 bb 取决于模型的吞吐量和内存占用特性,以及流水线深度 pp、数据并行尺寸 dd 和批尺寸 BB。
3.5 对比

对比了不同的并行机制:

  • 张量与流水线并行:张量模型并行在节点内最佳,因为它减少了通信量。流水线模型并行使用更便宜的点对点通信,可以跨节点执行。
  • 流水线与数据并行:流水线模型并行主要用于支持不适合单个worker的大型模型训练,数据并行用于扩大训练规模。
  • 张量与数据并行:数据并行通信不频繁,而张量模型并行需要对每个微批进行all-to-all通信,这在多GPU节点上可能非常昂贵。

结论


Megatron的PTD-P技术:结合了流水线并行、张量并行和数据并行,在训练万亿参数的大型模型时达到了高聚合吞吐量。

张量模型并行(Tensor Model Parallelism)

在张量模型并行中,模型的参数和计算被分割到不同的GPU上。如果 tt 是张量模型并行度,那么每个GPU上只需要存储和计算模型参数的一部分。这允许模型的总大小超过单个GPU的内存限制。

数据并行(Data Parallelism)

数据并行涉及复制模型到多个GPU上,并在每个GPU上处理数据的一个子集。然后,所有GPU上的梯度被汇总(通过all-reduce操作)以更新模型参数。如果有 dd 个数据并行副本,那么总的模型副本数就是 dd。

微批次大小(Microbatch Size)

微批次大小 bb 是指在流水线模型并行中,每个GPU在单个阶段处理的数据量。选择合适的微批次大小对于优化训练吞吐量和减少流水线气泡至关重要。微批次大小影响计算时间,因为它决定了每个GPU上计算的算术强度。

通信量

在张量模型并行中,每个层的前向传播和后向传播都需要进行all-reduce操作,这增加了通信量。如果 tt 是张量模型并行度,那么每个微批次需要 2⋅t2⋅t 次all-reduce操作(前向和后向各一次)。因此,总的通信量与微批次数量 mm 和张量模型并行度 tt 成正比。

例如,有2台机器,每台机器8卡,一共16张卡;在tensor-parallel-size=2, pipeline-parallel-size=4的时候,每个模型的“子块”是如何被分配到16张卡上的?

_TENSOR_MODEL_PARALLEL_GROUP:

取值示例为[g0, g1], [g2, g3], ..., [g14, g15]

_PIPELINE_MODEL_PARALLEL_GROUP:

[g0, g4, g8, g12],[g1, g5, g9, g13],[g2, g6, g10, g14],[g3, g7, g11, g15]

_DATA_PARALLEL_GROUP:

[g0, g2],[g1, g3], [g4, g6], [g5, g7], [g8, g10], [g9, g11], [g12, g14], [g13, g15]

world_size/(tensor_model_parallel_size* pipeline_model_parallel_size) = 16/(2*4)=2。

参考

[细读经典]Megatron论文和代码详细分析(2)

[细读经典]Megatron论文和代码详细分析(1)

Megatron-LM源码阅读(一)

Megatron-LM源码阅读(二)

megatron学习总结

GTC 2020: Megatron-LM: Training Multi-Billion Parameter Language Models Using Model Parallelism

www.DeepL.com/Translator

Log in | NVIDIA Developer

NVIDIA Megatron:超大Transformer语言模型的分布式训练框架 (一)

NVIDIA Megatron:超大Transformer语言模型的分布式训练框架 (二)


http://www.ppmy.cn/news/1558852.html

相关文章

网络安全攻防学习平台 - 基础关

基本方法(本次用到) 开发者工具:一般浏览器都自带开发者工具(快捷键为F12),点击后,可以查看当前网页的源代码,智能一点的浏览器,将鼠标移到指定的代码上,就会…

获取程序启动类

当程序有多个启动入口时,需要根据不同的启动类来决定方法是否执行,此时就需要获取启动类。 首先根据系统参数 sun.java.command 来获取启动类,如果以jar包方式启动,则获取到的就是jar包名称,此时需要从线程栈中获取mai…

Linux网络——UDP的运用

Linux网络——UDP的运用 文章目录 Linux网络——UDP的运用一、引入二、服务端实现2.1 创建socket套接字2.2 指定网络接口并bind2.3 接收数据并处理2.4 整体代码2.5 IP的绑定的细节 三、用户端实现3.1 创建套接字3.2 指定网络接口3.3 发生数据并接收3.4 绑定问题 四、代码五、UD…

ByConity BSP 解锁数据仓库新未来

文章目录 前言BSP 模式简介基于 TPC-DS 的 ELT 活动测试环境登录 ECS数据查询配置 执行 02.sqlsql解释:1. 第一步:创建 wscs 临时表2. 第二步:创建 wswscs 临时表3. 第三步:对比 2001 年和 2002 年的数据子查询 1:提取…

【ETCD】【实操篇(十七)】 etcd 集群定期维护指南

目录 概述Raft 日志保留键空间历史压缩:v3 API 键值数据库碎片整理空间配额快照备份 概述 为了保持 etcd 集群的可靠性,需要定期进行维护。根据 etcd 应用程序的需求,这些维护通常可以自动化进行,并且不会导致停机或性能显著下降…

深度学习-论文即插即用模块1

[深度学习] 即插即用模块详解与实践 深度学习近年来已经成为人工智能的核心驱动力,各种模型和技术被广泛应用于图像处理、自然语言处理、语音识别等领域。然而,构建深度学习模型的过程通常复杂且耗时。为了提高开发效率并降低技术门槛,“即插…

SpringCloudAlibaba实战入门之路由网关Gateway断言(十二)

上一节课中我们初步讲解了网关的基本概念、基本功能,并且带大家实战体验了一下网关的初步效果,这节课我们继续学习关于网关的一些更高级有用功能,比如本篇文章的断言。 一、网关主要组成部分 上图中是核心的流程图,最主要的就是Route、Predicates 和 Filters 作用于特定路…

idea 安装插件(在线安装、离线安装)

目录 在线安装 离线安装 在线安装 1、打开IntelliJ IDEA 2024.x软件, 点击file-Settings 2、点击搜索框,输入plugins,找到plugins列,输入xxx软件--点击install 安装 3、重启idea 离线安装 1、在官网上下载插件包 (1&…