分布式训练&deepspeed的各stage

本文探讨了数据并行、模型并行(包括层间和层内)、混合并行以及深度学习框架如Deepspeed中的ZeRO优化技术。重点介绍了分布式数据并行DDP,强调了不同并行方式对GPU内存使用和速度的影响。

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

1、数据并行(DP)

        如果有三张卡,就会有三个模型(一个模型复制三份)

        并行顺序:

                ①数据切分成三块

                ②模型复制三份

                ③每个模型对自己那部分数据前向传播

                ④得到的三份输出全都汇聚到GPU0(第一张卡)

                ⑤在GPU0上计算loss和梯度

                ⑥把梯度分三份分别给三个GPU

                ⑦每个GPU分别进行自己那部分的反向传播

                ⑧反向传播结果归到GPU0,由GPU0进行总计算,减小梯度,更新参数,再把更新后的模型重新复制三份到三个GPU。再次划分数据为三份。

        优点:速度快

        缺点:GPU0既要分发任务又要存放模型,容易OOM。模型大小受限于单卡容量(第一张卡显存的85%左右大小的模型是比较合适的),并且需要每张卡内都完整执行训练过程

2、模型并行

        ①层间并行(流水并行,pipeline parrallel,PP,把模型按层拆开,GPU0是第一层以此类推):当第一个batch的数据正向传播到最后一个GPU计算结束开始反向传播,传播到倒数第二个GPU上的时候,最后一个GPU开始计算第二个batch的反向传播值,以此类推。当第一个batch反向传播到第一个GPU的时候,第二个GPU上是第二个batch第三个GPU上是第三个batch...

        ②层内并行(张量并行,tensor parrallel,TP,按照权重把模型的每层都拆开):相当于multihead的head分开。注意 head 数要能整除卡数。

3、混合并行

        数据并行+层内+层间并行

        假设一共有384张卡,每48张卡复制一个模型,那么数据可以分为8份【数据并行 n=8】

        对每48张卡实现层内和层间并行:对multihead ➗ 4 ,那么此时模型每层需要 12 张卡 【层内并行 n=4】

        对于层间并行就是执行流水线计算 【层间并行  n=12

deepspeed的stage含义:

ZeRO-0:只数据并行

ZeRO-1:对优化器状态分片(显存降低4倍)

ZeRO-2:对优化器状态、梯度都进行分片(显存降低8倍)

ZeRO-3:对优化器状态、梯度、模型参数都进行分片(显存降低更多,但通信成本增加1.5倍)

zero-offload:内存扩展显存

zero-infinity:NVMe固态硬盘扩展

速度:0>1>2>2+offload>3>3+offload

GPU内存占用情况与速度相同(显存降得越多,速度越慢)

4、真正的分布式数据并行(Distributed Data Parallel,DDP):

        ①多个进程,每个进程都加载数据和模型(DP只有GPU0加载数据和模型,然后分发)

        ②各进程同时前向传播

        ③各进程分别计算loss,反向传播,计算梯度(不需要汇总到GPU0)

        ④各进程间通信,将梯度在各卡同步(此时每个卡梯度相同)

        ⑤各进程分别更新模型(不需要再从GPU0复制)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值