Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >大模型训练:Megatron-Core中的通信优化

大模型训练:Megatron-Core中的通信优化

作者头像
BBuf
发布于 2024-06-03 13:24:05
发布于 2024-06-03 13:24:05
1.2K0
举报
文章被收录于专栏:GiantPandaCVGiantPandaCV

作者丨Lin Zhang

来源丨https://zhuanlan.zhihu.com/p/694877232

编辑丨GiantPandaCV

提到大模型的训练框架,相信大家对Megatron-LM应该都比较熟悉。知乎上有不少文章介绍Megatron-LM对应的三篇论文,或者是源码实现,这些内容对于初学者的帮助很大。

然而,和之前的文章不同。这篇文章的目的不是科普扫盲,也不是源码解析,而是从研究者的视角,简单地聊一聊Megatron-Core中的通信优化设计。

分布式训练中的通信优化是我博士期间的老本行。在去年的一个学术会议上,我和一个学弟聊到了如何在Megatron-LM上做通信优化。尽管这样的想法十分常见,当时的代码库中却没有考虑这些。

我们当时觉得可能是英伟达的集群带宽太高,并不太在意通信优化。没想到过了大概一年,这些想法已经全部在Megatron-Core中实现[1]。有趣的是,MegaScale同期也发表了论文,提到了类似的做法[2]。

总的来说,在框架层面,通信优化能做的事情不多,真正有效的手段也就那么几样(overlapping, tensor fusion, tensor partitioning)。以至于通信优化本身的工作,发论文老是会被审稿人批评创新性不足。

言归正传,让我们先简单回顾一下3D并行的基础知识。

Megatron-LM和3D并行

Megatron-LM是一个为transformer大模型设计的分布式训练框架。除了传统数据并行的维度,Megatron-LM实现了流水线并行和张量并行,用于切分大模型的层数和权重,解决内存墙的问题。

在Megatron-LM的三篇文章中,第一篇介绍了张量并行的技术[3],对于transformer模型而言,主要是attention中的注意力头,和ffn中的隐藏层可以并行处理,在具体实现上则是设计了column-wise线性层和row-wise线性层的抽象。对于张量并行而言,每次前向传递和反向传递的过程中,attention和ffn都需要all-reduce通信。此外,张量并行一般还会对embedding和cross entropy进行切分。

第二篇文章介绍了3D并行的技术[4],也就是通过数据并行+张量并行+流水线并行,训练千亿乃至万亿规模的大模型。文章分析了3D并行的最佳切分方式,其中最重要的一点,就是我们需要将通信开销最大的张量并行限制在单个节点内。另外,在流水线并行的部分,文章提出了interleaved 1F1B,采取交错式的模型切分方案,来降低流水线并行中存在的气泡开销(bubble)。

当然,对于更大规模的训练来说,流水线气泡的问题依旧存在。简单来说,由于训练过程中的global batch size受限,随着数据并行和流水线并行的规模持续扩大,我们无法保证micro-batch数量远大于流水线并行。对于这个问题,从硬件的角度,我们可以通过设计超节点增大张量并行的规模;或者从算法的角度,我们可以使用例如LAMB优化器来增大global batch size。

第三篇文章,针对张量并行中激活值内存浪费的问题,提出了序列并行的技术[5]。也就是说,我们可以将输入按照序列的维度进行切分,在需要进行相应的attention或者ffn计算的时候再重新聚合。在具体的实现上,我们可以将all-reduce拆分成all-gather和reduce-scatter,实现all-gather+column-wise线性层、以及row-wise线性层+reduce-scatter的抽象。其中,all-gather+线性层的反向传递可以进行通信优化,这点我们之后再展开。

值得注意的是,这篇文章详细分析了GPT训练中激活值内存的分布。当然,这和当前Llama模型的情况有些不同,主要包括Llama中没有使用dropout,以及SwiGLU比GeLU需要更多的激活值开销。同时,对于Huggingface中的模型实现,非融合算子版本的layernorm/rmsnorm,以及cross entropy的实际内存开销也会大于文章中的理论分析。最后,文章里提到对self-attention采取选择性重计算的方案,当前基本上已经被flash-attention所取代。

Megatron-Core和通信优化

Megatron-Core中的通信优化包括数据并行、张量并行、和流水线并行。

首先是数据并行,DeepSpeed中的ZeRO系列可以在数据并行的维度上对模型、梯度、和优化器参数进行切分[6]。其中,ZeRO-1将原本数据并行中的all-reduce梯度操作切分成reduce-scatter梯度+all-gather参数,这样做的好处是优化器更新可以在切分后的参数量上进行,从而减少了内存开销。

Megatron-Core支持ZeRO-1形式的数据并行,即在DDP中实现reduce-scatter反向传递得到的梯度,在distributed optimizer中实现all-gather优化器更新后的模型参数。一般来说,降低数据并行的通信开销有两个常用的手段。首先,我们可以通过梯度累加,比如说流水线并行中的micro-batching,来降低数据并行中通信的比例,这一点对ZeRO-1依旧适用。

此外,我们可以将通信和计算进行隐藏。和传统的DDP相比,ZeRO-1允许将reduce-scatter和反向传递进行隐藏,将all-gather和前向传递进行隐藏。同时,为了提高通信效率,我们需要将小参数进行合并(即tensor fusion[7])。我之前有篇论文做的就是这方面的工作,其中通信优化部分的实现方式和现在Megatron-Core里的实现基本一样。当然,类似的技巧对于ZeRO-3来说依旧适用,例如PyTorch中的FSDP也实现了类似的通信隐藏[8]。

其次是张量并行,前面提到,Megatron-LM对于all-gather+线性层的反向传递进行了通信优化。为了节省内存开销,Megatron-LM只存了all-gather之前的输入,所以在反向传递阶段,我们需要all-gather保存的输入用来计算权重的梯度,另外我们还需要对于计算得到的输入的梯度进行reduce-scatter。于是,我们可以将all-gather和计算输入的梯度进行隐藏,然后将reduce-scatter和计算权重的梯度进行隐藏。这种通信和计算无依赖关系的隐藏,又叫做bulk overlap。

除了以上例子,Megatron-LM并没有对其他操作进行通信优化,包括前向传递中的all-gather+矩阵乘,和矩阵乘+reduce-scatter,因为这两个操作中的计算和通信存在依赖关系,无法直接进行隐藏。针对这种情况,我们可以使用tensor partitioning的技术,将一个大的矩阵乘法和集合通信操作,拆分成一系列小的矩阵乘法和集合通信操作,然后对更加细粒度的计算和通信进行流水线式的隐藏。当然,将一个tensor切分得太小,反而会影响实际性能,一般来说切成4份是比较常见的配置。

除了直接切分张量以外,我们还可以将集合通信操作拆分成一系列的p2p通信操作,例如all-gather操作可以拆分成ring-based send/recv通信[9],其中拆分后的通信和计算同样可以进行隐藏。

具体实现上,Megatron-Core调用了Transformer Engine中的线性层,支持bulk overlap通信隐藏,以及张量切分或者p2p切分方式的通信隐藏。同时,为了降低通信和计算之间存在的干扰,TE使用userbuffer进行张量并行的进程间通信。

最后是流水线并行,流水线并行中需要用到大量的send/recv操作,实现起来非常繁琐。为此,Megatron-LM设计了一系列的p2p通信接口,用来打包send-next, recv-prev, send-prev, recv-next操作,防止p2p通信因为执行顺序不同导致的死锁问题。

Megatron-Core支持1F1B和interleaved 1F1B这两种流水线并行方案,并针对interleaved 1F1B进行了通信隐藏优化。一方面,因为interleaved 1F1B在大模型训练中更为常用,同时其通信开销要远远大于普通的1F1B方案。另一方面,对于1F1B而言,哪怕使用异步的send/recv操作,其实也没有太多的通信优化空间[10]。而对于interleaved 1F1B来说,在steady阶段,我们可以将forward-send-forward-recv通信和反向传递的计算隐藏,然后将backward-send-backward-recv通信和前向传递的计算隐藏。

总结

对于大模型训练来说,集群的有效算力 = 单卡的有效算力 x 集群规模 x 线性度 x 可靠性。其中,Megatron-Core将3D并行中的通信和计算进行隐藏,也就是尽可能提高大模型训练的线性度。

在当前大模型结构逐步收敛的背景下,在训练框架的层面上,大模型系统优化(包括通信优化)并没有剩下太多空间,其中针对MoE的优化显然成了大家(包括Megatron团队)今年的研究重点。

参考

  1. 1. Megatron-Core, https://github.com/NVIDIA/Megatron-LM?tab=readme-ov-file#megatron-core 2. MegaScale: Scaling Large Language Model Training to More Than 10,000 GPUs, https://arxiv.org/abs/2402.15627
  2. 3. Megatron-LM: Training Multi-Billion Parameter Language Models Using Model Parallelism, https://arxiv.org/abs/1909.08053
  3. 4. Efficient Large-Scale Language Model Training on GPU Clusters Using Megatron-LM, https://arxiv.org/abs/2104.04473
  4. 5. Reducing Activation Recomputation in Large Transformer Models, https://arxiv.org/abs/2205.05198
  5. 6. ZeRO: Memory Optimizations Toward Training Trillion Parameter Models, https://arxiv.org/abs/1910.02054
  6. 7. Horovod: fast and easy distributed deep learning in TensorFlow, https://arxiv.org/abs/1802.05799
  7. 8. PyTorch FSDP: Experiences on Scaling Fully Sharded Data Parallel, https://arxiv.org/abs/2304.11277
  8. 9. Scaling Vision Transformers to 22 Billion Parameters, Figure 3, https://arxiv.org/abs/2302.05442
  9. 10 On Optimizing the Communication of Model Parallelism, Figure 4, https://arxiv.org/abs/2211.05322

- The End -

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-05-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 GiantPandaCV 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
历时6个月,Hugging Face开源LLM「超大规模实战手册」!200页3万字4000次训练
最近,Hugging Face发布了一个「超大规模训练手册」,教我们如何在GPU集群上训练LLM。
新智元
2025/03/03
1930
历时6个月,Hugging Face开源LLM「超大规模实战手册」!200页3万字4000次训练
Megatron-LM 分布式执行调研
Created by: strint Created time: May 31, 2023 6:02 PM
BBuf
2023/08/22
2.1K0
Megatron-LM 分布式执行调研
[源码解析] 模型并行分布式训练Megatron (5) --Pipedream Flush
NVIDIA Megatron 是一个基于 PyTorch 的分布式训练框架,用来训练超大Transformer语言模型,其通过综合应用了数据并行,Tensor并行和Pipeline并行来复现 GPT3,值得我们深入分析其背后机理。本系列有 5 篇文章,通过论文和源码和大家一起学习研究。本文将看看 Megatron 如何给流水线各个阶段安排执行执行序列。
罗西的思考
2022/05/09
1.8K0
[源码解析] 模型并行分布式训练Megatron (5) --Pipedream Flush
以 GPT-175B 为例,聊聊大语言模型分布式训练的最佳实践
导读本文分享主题为大语言模型分布式训练的相关技术及量化分析,并以GPT-175B 为例,介绍相关技术的最佳实践。
NewBeeNLP
2023/12/20
1.8K0
以 GPT-175B 为例,聊聊大语言模型分布式训练的最佳实践
AI Infra论文阅读之将流水线并行气泡几乎降到零(附基于Meagtron-LM的ZB-H1开源代码实现解读)
这篇论文对应的链接为:https://openreview.net/pdf?id=tuzTN0eIO5 ,最近被ICLR 2024接收,但不少AI Infra的同行已经发现了这个工作的价值,并且已经开源在 https://github.com/sail-sg/zero-bubble-pipeline-parallelism ,在一些AI Infra相关的地方也存在一些讨论和介绍。比如 https://www.zhihu.com/question/637480969/answer/3354692418
BBuf
2024/02/22
2.4K0
AI Infra论文阅读之将流水线并行气泡几乎降到零(附基于Meagtron-LM的ZB-H1开源代码实现解读)
DeepSeek组网的演进与效率提升
近年来,千亿至万亿参数规模的大语言模型(LLM)训练已成为人工智能领域的核心战场。随着模型复杂度的指数级增长, 并行计算与网络拓扑的协同设计逐渐成为突破算力瓶颈的关键挑战。
星融元Asterfusion
2025/03/24
1490
[源码解析] 模型并行分布式训练 Megatron (4) --- 如何设置各种并行
NVIDIA Megatron 是一个基于 PyTorch 的分布式训练框架,用来训练超大Transformer语言模型,其通过综合应用了数据并行,Tensor并行和Pipeline并行来复现 GPT3,值得我们深入分析其背后机理。
罗西的思考
2022/05/09
2.5K0
[源码解析] 模型并行分布式训练 Megatron (4) --- 如何设置各种并行
DeepSeek开源周 Day04:从DualPipe聊聊大模型分布式训练的并行策略
今天是DeepSeek开源周的第四天,官方开源了一种新型并行计算优化策略——DualPipe。 其实大家阅读过Deepseek-V3技术报告的同学,对这个技术并不陌生。
致Great
2025/02/28
4000
DeepSeek开源周 Day04:从DualPipe聊聊大模型分布式训练的并行策略
[论文翻译] 分布式训练 Parameter Sharding 之 Google Weight Sharding
本系列会以5~6篇文章,介绍parameter sharding。Parameter sharding 就是把模型参数等切分到各个GPU之上。我们会以 Google,微软和Facebook的论文,博客以及代码来进行分析。
罗西的思考
2022/05/09
1.1K0
[论文翻译] 分布式训练 Parameter Sharding 之 Google Weight Sharding
AI智算中心,大模型训练背后的网络流量“奥秘”
前言:自2017年起,AI模型的规模每半年翻一番,从初代Transformer的6500万增长到GPT-4的1.76万亿,预计下一代大语言模型将达到10万亿规模。另一方面,用于模型训练的数据量持续增长,如C4数据集,原始数据量累计超过9.5PB,每月新增200-300TB,目前经过清洗加工后的数据集大小约38.5 TB,训练样本数364.6M。进一步,随着多模态大模型的兴起,训练数据从单一的文本过渡到图像和视频乃至3D点云,数据规模将是文本数据的1万倍以上。
星融元Asterfusion
2024/07/24
5360
AI智算中心,大模型训练背后的网络流量“奥秘”
模型训练过程和国产算力面临的挑战
典型的模型训练流程可以从计算的角度分为三个关键步骤:前向计算、反向计算和参数更新。这些步骤构成了模型在训练中的核心计算过程。
刘盼
2024/04/02
2360
模型训练过程和国产算力面临的挑战
【AI系统】分布式通信与 NVLink
在进入大模型时代后,大模型的发展已成为 AI 的核心,但训练大模型实际上是一项比较复杂的工作,因为它需要大量的 GPU 资源和较长的训练时间。
用户11307734
2024/11/27
1990
大语言模型--张量并行原理及实现
NCCL是一个Nvidia专门为多GPU之间提供通讯的通讯库,或者说是一个多GPU卡通讯的框架 ,提供了包括AllReduce、Broadcast、Reduce、AllGather、ReduceScatter等集合通讯API。NCCL屏蔽了底层复杂的细节,向上提供API供训练框架调用,向下连接机内机间的GPU以完成模型参数的高效传输。
aaronwjzhao
2024/01/11
2.9K6
Facebook推出数据并行训练算法FSDP:采用更少的GPU,更高效地训练更大数量级的模型
作者 | Facebook工程团队 译者 | 王强 策划 | 刘燕 大规模训练 AI 模型并非易事。 除了需要大量算力和资源外,训练非常大的模型背后也有着相当大的工程复杂性。在 Facebook AI Research(FAIR)Engineering,我们一直在努力构建各种工具和基础设施,让大型 AI 模型训练起来更加轻松。 我们最近的一部分成果包括了 层内模型并行、流水线模型并行、优化器状态 + 梯度分片 和 多专家模型 等领域的工作,旨在提升为任意数量的任务训练高级 AI 模型的效率。 完全分片数据
深度学习与Python
2023/04/01
1.2K0
Facebook推出数据并行训练算法FSDP:采用更少的GPU,更高效地训练更大数量级的模型
大语言模型--流水线并行原理及实现
Google 2019年发表的论文GPipe: Easy Scaling with Micro-Batch Pipeline Parallelism,1811.06965 (arxiv.org)
aaronwjzhao
2024/05/11
1.1K0
用FP8训练大模型有多香?微软:比BF16快64%,省42%内存
大型语言模型(LLM)具有前所未有的语言理解和生成能力,但是解锁这些高级的能力需要巨大的模型规模和训练计算量。在这种背景下,尤其是当我们关注扩展至 OpenAI 提出的超级智能 (Super Intelligence) 模型规模时,低精度训练是其中最有效且最关键的技术之一,其优势包括内存占用小、训练速度快,通信开销低。目前大多数训练框架(如 Megatron-LM、MetaSeq 和 Colossal-AI)训练 LLM 默认使用 FP32 全精度或者 FP16/BF16 混合精度。
机器之心
2023/11/02
9130
用FP8训练大模型有多香?微软:比BF16快64%,省42%内存
32卡176%训练加速,开源大模型训练框架Megatron-LLaMA来了
9 月 12 日,淘天集团联合爱橙科技正式对外开源大模型训练框架 ——Megatron-LLaMA,旨在让技术开发者们能够更方便的提升大语言模型训练性能,降低训练成本,并且保持和 LLaMA 社区的兼容性。测试显示,在 32 卡训练上,相比 HuggingFace 上直接获得的代码版本,Megatron-LLaMA 能够取得 176% 的加速;在大规模的训练上,Megatron-LLaMA 相比较 32 卡拥有几乎线性的扩展性,而且对网络不稳定表现出高容忍度。目前 Megatron-LLaMA 已在开源社区上线。
机器之心
2023/09/19
1.1K0
32卡176%训练加速,开源大模型训练框架Megatron-LLaMA来了
拆掉英伟达护城河,细节曝光!世界最快超算用3072块AMD GPU训完超万亿参数LLM
位于美国橡树岭国家实验室(Oak Ridge National Laboratory)的全世界最大的超算Frontier,集合了37888个MI250X GPU和9472个Epyc 7A53 CPU。
新智元
2024/01/17
2900
拆掉英伟达护城河,细节曝光!世界最快超算用3072块AMD GPU训完超万亿参数LLM
并行训练算法一锅炖: DDP, TP, PP, ZeRO
模型训练过程中涉及到的参数主要包含两大类,model data 和 non-model data,具体表示如下:
marsggbo
2022/11/30
5K0
并行训练算法一锅炖: DDP, TP, PP, ZeRO
万字干货!手把手教你如何训练超大规模集群下的大语言模型
快手总结了一套超大规模集群下大语言模型训练方案。该方案在超长文本场景下,在不改变模型表现的情况下,训练效率相较 SOTA 开源方案,有显著的吞吐提升。通过细致的建模,可保证 Performance Model 十分接近真实性能,基于此 Performance Model,解决了大模型训练调参困难的问题。
深度学习与Python
2024/06/17
1.9K0
万字干货!手把手教你如何训练超大规模集群下的大语言模型
推荐阅读
相关推荐
历时6个月,Hugging Face开源LLM「超大规模实战手册」!200页3万字4000次训练
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档