科研第五步:如何使用DDP分布式多GPU并行跑pytorch深度学习训练

本文详细介绍了如何在PyTorch中使用DDP(DistributedDataParallel)进行分布式多GPU训练,包括DP与DDP的区别、参数配置、代码示例和启动流程。特别关注了同步更新策略及DDP在实际场景中的优势和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DDP分布式多GPU并行跑pytorch深度学习模型

多卡并行代码模板

前言

PyTorch的数据并行相对于TensorFlow而言,要简单的多,主要分成两个API:

DataParallel(DP):Parameter Server模式,一张卡为reducer,实现也超级简单,一行代码。
DistributedDataParallel(DDP):All-Reduce模式,本意是用来分布式训练,但是也可用于单机多卡。

数据并行 vs 模型并行:

模型并行:模型大到单个显卡放不下的地步,就把模型分为几个部分分别放于不同的显卡上单独运行,各显卡输入相同的数据;
数据并行:不同的显卡输入不同的数据,运行完全相同的完整的模型。
相比于模型并行,数据并行更为常用。DP(Data Parallel)和DDP(Distributed Data Parallel)都属于数据并行。

数据并行:同步更新 vs 异步更新:

数据并行中,每个显卡通过自己拥有的那一份数据进行前向推理和梯度计算,根据梯度进行模型权重更新时,就涉及到了参数更新方式使用同步更新还是异步更新。

同步更新:所有的GPU都计算完梯度后,累加到一起求均值进行参数更新,再进行下一轮的计算;
异步更新:每个GPU计算完梯度后,无需等待其他更新,立即更新参数并同步。
同步更新有等待,速度取决于最慢的那个GPU;异步更新没有等待,但是会出现loss异常抖动等问题,实践中,一般使用的是同步更新。

一、DP是什么

DP模式是很早就出现的、单机多卡的、参数服务器架构的多卡训练模式,在PyTorch,即是:

from torch.nn import DataParallel

device = torch.device("cuda")

model = MyModel()
model = model.to(device)
model = DataParallel(model)

在DP模式中,总共只有一个进程,多个线程(受到GIL很强限制)。master节点相当于参数服务器,其会向其他卡广播其参数;在梯度反向传播后,各卡将梯度集中到master节点,master节点对搜集来的参数进行平均后更新参数,再将参数统一发送到其他卡上。这种参数更新方式,会导致master节点的计算任务、通讯量很重,从而导致网络阻塞,降低了训练速度。

DP模型的另一个缺点就是master节点的负载很重,因为把损失和损失相对于最后一层的梯度计算都放在了master节点上。
个人感觉,DDP出现之后,因为其训练效率更高,DP的应用空间已经很少,所以重点介绍DDP模式。

</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值