TP DP PP 并行训练方法介绍

张量并行TP

挖坑

流水线并行 PP

经典的流水线并行范式有Google推出的Gpipe,和微软推出的PipeDream。两者的推出时间都在2019年左右,大体设计框架一致。主要差别为:在梯度更新上,Gpipe是同步的,PipeDream是异步的。异步方法更进一步降低了GPU的空转时间比。虽然PipeDream设计更精妙些,但是Gpipe因为其“够用”和浅显易懂,更受大众欢迎(torch的pp接口就基于Gpipe)。因此本文以Gpipe作为流水线并行的范例进行介绍。https://zhuanlan.zhihu.com/p/613196255

gpipe论文 https://arxiv.org/pdf/1811.06965.pdf

naive模型并行

在这里插入图片描述
图片来自https://arxiv.org/pdf/1806.03377.pdf

如果一个模型一个gpu放不下,就某些层放在一个卡,上图表示一共四个卡,F0表示第0个batch,灰色的第一个卡计算完第0个batch交给黄色的卡。黄卡上放的模型的层的输入是灰色的卡上放的模型的输出。一次只有一个gpu工作。

GPipe

把mini batch分成micro batch,这样多个gpu可以同时计算。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vWgbtoCx-1691048478616)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/8aa74ef6-308b-48d9-b961-ac72a6031873/Untitled.png)]

具体的算法:

用户定义好L层的网络、前向、损失函数等以后,GPipe 就会将网络划分为 K 个单元,并将第 k 个单元放置在第 k 个加速器上。通信原语自动插入到分区边界,以允许相邻分区之间的数据传输。分区算法最小化所有单元估计成本的方差,以便通过同步所有分区的计算时间来最大化管道的效率。

前向过程:GPipe先把大小为N的minibatch分成M个相等的micro batch,通过 K 个加速器进行流水线处理。在向后传递过程中,每个micro batch通过 K 个加速器进行流水线处理。在向后传递过程中,通过 K 个加速器进行流水线处理。在向后传递过程中,每个micro batch计算梯度都是基于跟前向同一个模型,没有误差哦。每个mini batch的最后,M个micro的梯度都计算完了

在前向计算期间,每个加速器仅存储分区边界处的输出激活。在向后传递期间,第 k 个加速器重新计算复合前向函数 Fk。

在micro-batch的划分下,我们在计算Batch Normalization时会有影响。Gpipe的方法是,在训练时计算和运用的是micro-batch里的均值和方差,但同时持续追踪全部mini-batch的移动平均和方差,以便在测试阶段进行使用。Layer Normalization则不受影响。

总结:
如果模型太大一张卡放不下,按照层来切开,第一层放在第一张卡,第二层放在第二张卡,这样第二层要等第一层的计算结果作为输入,等待的时候卡就空闲了很浪费。

gpipe的做法是batch再切开切成micro batch,这样虽然第一个microbatch的时候要等待,但是多张卡可以同时工作了。

GPipe 还用recomputation这个简单有效的技巧来降低内存,进一步允许训练更大的模型

如何按照层自动划分:根据计算量分配到每张卡

gpipe的micro batch上是需要累计梯度的

重计算,多计算一次前向换空间,但是不是梯度来了从头前向一次,中间有几个激活其实存下来了,叫做checkpoint,然后从checkpoing的激活值的位置前向就行。(因为每张卡上不止一个micro batch,所以激活的数量也是好几份,这个量就比较大)

Gpipe流水线其存在两个问题:硬件利用率低,内存占用大。于是在另一篇流水并行的论文里,微软 PipeDream 针对这些问题提出了改进方法,就是1F1B (One Forward pass followed by One Backward pass)策略。

PipeDream

微软在论文 PipeDream: Fast and Efficient Pipeline Parallel DNN Training

PipeDream 模型的基本单位是层,PipeDream将DNN的这些层划分为多个阶段。每个阶段(stage)由模型中的一组连续层组成

在这里插入图片描述

1F1B

由于前向计算的 activation 需要等到对应的后向计算完成后才能释放(无论有没有使用 Checkpointing 技术),因此在流水并行下,如果想尽可能节省缓存 activation 的份数,就要尽量缩短每份 activation 保存的时间,也就是让每份 activation 都尽可能早的释放,所以要让每个 micro-batch 的数据尽可能早的完成后向计算,因此需要把后向计算的优先级提高

在这里插入图片描述

参考:
[源码解析] 深度学习流水线并行Gpipe https://www.cnblogs.com/rossiXYZ/

数据并行DP

FSDP

fair scale的fsdp

https://engineering.fb.com/2021/07/15/open-source/fsdp/

Fully Sharded Data Parallel (FSDP) 是一种DP算法,offload一部分计算到cpu。但是模型的参数在多个gpu之间是share的?每个microbatch的计算还是local to每个gpu的

在标准 DDP 训练中,每个工作人员处理一个单独的批次,并使用allreduce对各gpu的梯度进行求和。虽然 DDP 已经变得非常流行,但它占用的 GPU 内存超出了其需要,因为模型权重和优化器状态会在所有 DDP 工作线程之间复制。

FSDP是pytorch1.11的新特性。其新特性目的主要是训练大模型。我们都知道pytorch DDP用起来简单方便,但是要求整个模型能加载一个GPU上,这使得大模型的训练需要使用额外复杂的设置进行模型拆分。pytorch的FSDP从DeepSpeed ZeRO以及FairScale的FSDP中获取灵感,打破模型分片的障碍(包括模型参数,梯度,优化器状态),同时仍然保持了数据并行的简单性。

<think>嗯,用户问的是DPPPTP如何划分,这三个术语在不同领域可能有不同的含义,所以我得先确定用户指的是哪个领域的。首先,DP常见的有数据并行、动态规划,或者数据库中的依赖保留。PP可能是项目集管理中的项目组合,或者并行处理,还有介词短语。TP可能是传输协议、时间点恢复,或者事务处理。用户没有给出具体领域,可能需要先猜测一下。 考虑到用户可能是计算机科学或项目管理的背景,可能指的是项目管理中的阶段划分,比如项目集管理(PP)、项目组合管理(DP)、时间计划(TP)。不过不太确定。另外,在分布式系统中,DP可能指数据处理,PP并行处理,TP是事务处理。或者在语法分析中,比如依存句法中的DPPPTP结构,比如语言学中的短语划分。 比如在生成语法中,DP是限定词短语,PP是介词短语,TP是时态短语。如果是语言学的话,划分方式就是按照句法结构来。比如TP作为时态短语,通常是句子的核心,包含时态信息,DP作为名词短语的扩展,PP则由介词引导。需要进一步确认。 用户可能需要的是语言学中的划分,所以应该先解释这三个短语的结构和在生成语法中的角色。比如DP代替传统的NP,由限定词主导,PP由介词主导,TP作为句子的时态层。然后给出例子,比如“那个男孩”是DP,“在公园”是PP,整个句子的结构可能由TP统领。这样划分的依据是X-bar理论和生成语法的框架。 不过也有可能用户指的是其他领域,比如软件工程中的阶段划分,但可能性较低。为了确保全面,可能需要简要说明不同领域的可能解释,但重点放在语言学上,因为这是更常见的DP/PP/TP划分场景。 另外,用户可能是在学习句法分析,需要了解这些短语结构的层次关系。比如在句法树中,TP位于CP之下,包含时态和主语,DP作为论元出现在TP中,PP作为附加语。需要详细说明每个短语的结构和功能,以及它们在句子中的位置和相互关系。 总结回答的结构:首先确定领域为语言学中的句法分析,然后分别介绍DPPPTP的定义、结构、功能,举例说明,最后总结它们的划分依据和理论背景。</think>语言学(尤其是生成语法理论)中,**DP(限定词短语)、PP(介词短语)、TP(时态短语)** 是句法结构中的重要概念,其划分基于短语的句法功能和核心成分。以下是具体介绍: -- ### **1. DP(Determiner Phrase,限定词短语)** - **定义**: DP 是以限定词(如冠词、指示词、所有格等)为核心的短语,传统上被归为名词短语(NP),但在生成语法中,DP 被视为更高层级的结构,限定词是核心,NP 是其补足语。 - **结构**: `DP = Determiner + NP` 例如: - *[DP 那个 [NP 男孩]]*(“那个男孩”) - *[DP 我的 [NP 书]]*(“我的书”) - **功能**: 充当句子的主语、宾语等论元角色,提供指称意义(如特指、泛指)。 --- ### **2. PP(Prepositional Phrase,介词短语)** - **定义**: PP 以介词(如“在”“关于”“用”)为核心,后接一个补足语(通常是 DP 或 NP)。 - **结构**: `PP = Preposition + DP/NP` 例如: - *[PP 在 [DP 桌子 [NP 上]]]*(“在桌子上”) - *[PP 关于 [DP 这个 [NP 问题]]]*(“关于这个问题”) - **功能**: 修饰动词或名词,表示时间、地点、方式等附加信息,通常充当状语或定语。 --- ### **3. TP(Tense Phrase,时态短语)** - **定义**: TP 是生成语法中句子的核心层级,以时态(Tense)为核心,包含时间信息和主语位置,通常位于 CP(标句词短语)之下。 - **结构**: `TP = Tense + VP`(动词短语) 例如: - *[TP 他 [T 过去时] [VP 吃 了 苹果]]*(“他吃了苹果”) - *[TP 她 [T 将来时] [VP 会 来]]*(“她会来”) - **功能**: 表达句子的时态(过去、现在、将来)和主语-谓语关系,是句子的基本时间框架。 --- ### **划分依据与理论背景** 1. **X杠理论(X-bar Theory)**: 所有短语均围绕一个核心词(Head)展开,结构为:**核心词 + 补足语(Complement) + 限定语(Specifier)**。DPPPTP 均遵循此模式。 2. **功能层级**: - **TP** 提供时态和主语位置,构成句子的骨架。 - **DP** 和 **PP** 作为论元或修饰语,依附于 TP 或 VP。 3. **例句分析**: “那个男孩在公园里读书。” - *[DP 那个男孩]*(主语) - *[PP 在 [DP 公园里]]*(地点状语) - *[TP 他 [T 过去时] [VP 读书]]*(时态与谓语) --- ### **总结** - **DP** 取代传统 NP,体现限定词的核心地位。 - **PP** 提供附加信息,依赖介词引导。 - **TP** 是句子的时态中枢,统领主语和谓语。 这种划分反映了生成语法对句子结构的抽象化分析,强调功能词(如限定词、介词、时态)在句法中的核心作用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值