大模型学习路线(6)——分布式并行 & DeepSpeed

文章目录

一、分布式并行理论

0. 分布式并行内容介绍

1. 数据并行

1.1. 数据并行DP

1.2. 分布式数据并行DDP

1.3. 分片共享数据并行FSDP

1.4. 主要区别

2. 模型并行

2.1. 流水并行PP

2.2. 张量并行TP

3. 多维混合并行

二、分布式并行实践(以DeepSpeed为例)

参考说明


一、分布式并行理论

0. 分布式并行内容介绍

        分布式并行分数据并行模型并行(张量并行、流水并行)多维混合并行三类。

图1. 分布式并行(引用自ZOMI酱up主)        

1. 数据并行

         将大数据集分割成小批次,分布到多个设备上进行训练。每个设备拥有模型的完整副本,独立进行前向和反向传播。通过聚合各个设备的梯度来更新模型参数。

       图1. 数据并行(引用自ZOMI酱up主)

# 数据并行关键代码
device = torch.device('cuda: 1, 3')

model = CreateModel()

# 数据并行的标记
model = nn.DataParallel(model, device_ids=[1, 3])    
model.to(device)

1.1. 数据并行DP

  • 也称为单机多卡数据并行。
  • 在单个节点上使用多个GPU进行训练。
  • 将输入数据分割并在不同的GPU上并行处理。
  • 梯度同步通常通过简单的集合操作(如sum或average)实现。

1.2. 分布式数据并行DDP

  • 适用于跨多个节点的分布式训练。
  • 每个节点都有模型的完整副本和一部分数据。
  • 使用 PyTorch 的 DistributedDateParallel 模块,该模块处理了梯度的聚合和通信。
  • 需要配置进程组(process group)来管理不同节点间的通信。

1.3. 分片共享数据并行FSDP

  • 一种更细粒度的数据并行策略,适用于大规模模型。
  • 模型被分割成多个部分(shards),每个部分在不同的GPU上运行。
  • 适用于单个GPU无法容纳整个模型的情况。
  • 需要更复杂的通信和同步机制,因为它涉及到模型的切分

1.4. 主要区别

  • 应用场景:DP主要用于单机多GPU环境,DDP适用于多节点多GPU的分布式环境,而FSDP适用于需要在多个GPU上分割模型的大规模模型训练。
  • 模型和数据分布:DP中模型副本在不同GPU上但在同一节点,DDP模型副本分布在不同节点,FSDP模型被切分成多个部分分布在不同GPU上。
  • 通信复杂性:FSDP在模型切分和梯度同步方面通常比DP和DDP更复杂。

2. 模型并行

图2. 模型并行(流水并行、张量并行,引用自ZOMI酱up主)

2.1. 流水并行PP

        按模型Layer层切分到不同设备,即层间并行。

图3. 流水并行(引用自ZOMI酱up主)

2.2. 张量并行TP

        数学原理如下:

(1)双设备张量切分

图4

(2)四设备张量切分

图5

(3)切分到两个节点的 Tensor 节点张量重排

图6

3. 多维混合并行

图7

3.1. 混合并行(Hybrid Parallelism)

        混合并行包括数据并行、模型并行(张量并行和流水并行)以及pipeline并行。指将不同的并行策略结合使用,以充分利用硬件资源并提高训练效率。它可以显著提高大规模分布式训练的效率,尤其是在处理大型模型时。

3.2. 多维并行(Multi-Dimensional Parallelism)

        多维并行是指在不同的维度上应用并行策略,例如在数据维度、模型维度和计算步骤维度上同时进行并行处理。这种并行方式允许模型在多个维度上扩展,从而更好地适应不同的硬件配置和训练需求,可以更全面地利用分布式系统的计算能力。


二、分布式并行实践(以DeepSpeed为例)

DeepSpeeddemo参考如下链接:

视频教程:DeepSpeed:炼丹小白居家旅行必备【神器】_哔哩哔哩_bilibili

github: GitHub - OvJat/DeepSpeedTutorial: DeepSpeed Tutorial


参考说明

1. DeepLearningSystem/06Foundation/08Parallel/old at main · chenzomi12/DeepLearningSystem (github.com)icon-default.png?t=N7T8https://github.com/chenzomi12/DeepLearningSystem/tree/main/06Foundation/08Parallel/old2. 混合并行?多维并行?有多维度混合在一起并行吗?【分布式并行】系列第06篇_哔哩哔哩_bilibiliicon-default.png?t=N7T8https://www.bilibili.com/video/BV1gD4y1t7Ut/?spm_id_from=333.788&vd_source=741fbd6a09f652574b8e335339fdc5703. CIFAR-10 Tutorial - DeepSpeedicon-default.png?t=N7T8https://www.deepspeed.ai/tutorials/cifar-10/4. Getting Started - DeepSpeedicon-default.png?t=N7T8https://www.deepspeed.ai/getting-started/

  • 24
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 深度学习模型分布式并行推理设计一般可以通过以下步骤实现: 1. 将模型进行切割,将模型的各个层次划分为不同的部分。 2. 将切割后的模型分配到不同的计算节点中进行推理计算。 3. 对于分配到不同计算节点的模型部分,进行数据并行处理,使得每个计算节点都能够对自己的数据进行计算。 4. 对于每个计算节点的计算结果进行聚合,得到最终的推理结果。 在分布式并行推理设计中,还需要考虑数据传输和通信的问题,以保证计算节点之间的数据同步和一致性。同时,还需要根据具体的硬件环境和应用需求,选择合适的分布式并行推理框架,如TensorFlow、PyTorch等,以实现高效的分布式并行计算。 ### 回答2: 深度学习模型分布式并行推理设计是指将模型的推理过程划分为多个子任务,并同时在多个计算设备上进行并行计算,以提高推理速度和效率。 在进行分布式并行推理设计时,需要考虑以下几个关键步骤: 首先,需要将深度学习模型进行切分。通常,可以将模型按照层级进行切分,将每个层级的计算划分到不同的计算设备上。这样可以使得每个设备只负责部分计算,减轻单个设备的计算压力,提高推理效率。 其次,需要考虑数据的分割和传输。在深度学习模型中,通常需要输入大量数据进行推理。因此,在分布式并行推理过程中,需要将输入数据进行合理的切分,并将切分后的数据分配到不同的计算设备上进行并行计算。同时,还需要考虑数据的传输和同步机制,以保证计算设备之间的数据一致性。 接着,需要进行并行计算的任务分配和调度。在分布式并行推理设计中,需要将切分后的模型和数据任务分配给不同的计算设备,并合理调度计算设备之间的通信和计算任务,以实现高效的并行计算。 最后,需要考虑结果的合并和输出。在分布式并行推理完成后,需要将各个计算设备得到的结果进行合并,并输出最终的推理结果。同时,还需要考虑结果的同步和一致性,以确保输出结果的准确性和完整性。 总而言之,深度学习模型分布式并行推理设计是一个复杂而关键的任务,需要考虑模型划分、数据传输、任务调度等多个方面的问题。通过合理设计和优化,可以实现高效的深度学习模型推理,并在大规模计算设备上快速完成推理任务。 ### 回答3: 深度学习模型分布式并行推理设计是指将一个大型的深度学习模型部署到多个计算节点上,通过分布式计算的方式实现模型的推理。下面是关于如何设计深度学习模型分布式并行推理的一些建议: 1. 模型并行设计:将模型分割成多个子模型,并将不同的子模型分配到不同的计算节点上进行计算。可以基于模型的结构特点进行切割,例如如果模型是由多个卷积层组成,可以每个卷积层分配一个计算节点。 2. 数据并行设计:将训练数据分割成多份,并将每份数据分配到不同的计算节点上进行计算。每个计算节点都使用一部分数据来进行推理,然后将结果进行合并。 3. 网络拓扑设计:将不同的计算节点通过高速网络连接起来,形成一个分布式的计算集群。可以采用主从架构,其中一个计算节点作为主节点负责控制任务的调度和结果的合并,其他计算节点作为从节点进行计算。 4. 任务调度算法:设计一种合适的任务调度算法来决定每个计算节点的工作任务分配。可以考虑负载均衡、任务优先级等因素,使各个计算节点的计算负载尽可能均衡,并确保推理任务能够按时完成。 5. 通信机制设计:考虑到分布式计算节点之间需要进行数据传输和通信,需要设计合适的通信机制来保证传输速度和数据完整性。可以使用消息传递接口或者共享内存等机制进行节点间的数据交换。 以上仅是关于深度学习模型分布式并行推理设计的一些基本建议,具体的实现方案因应用场景和需求而有所不同。需要根据具体情况进行深入研究和调优,以提高并行推理的效率和性能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值