数据并行/模型并行(层间层内)/流水并行-> Zero >Lora

  • 数据并行(data parallelism, DP):假设有 张卡,每张卡都保存一个模型,每一次迭代(iteration/step)都将batch数据分割成 个等大小的micro-batch,每张卡根据拿到的micro-batch数据独立计算梯度,然后调用AllReduce计算梯度均值,每张卡再独立进行参数更新。
  • 模型并行(model parallelism/tensor parallelism, MP/TP):有的tensor/layer很大,一张卡放不下,将tensor分割成多块,一张卡存一块。
  • 流水并行(pipeline parallelism, PP):将网络按层切分,划分成多组,一张卡存一组。

模型并行

模型并行:层间模型并行(inter-layer)和层内模型并行(intra-layer)。
NUS的文章基本上都是针对intra-layer的model-paralleism,或者也可以叫tensor parallelism。
层内模型并行可以对输入矩阵,或者参数矩阵进行其中一个维度的切分,并将切片放到不同的设备上去。典型例子就是1D的Megatron。
层间模型并行则是对模型层进行切分,业界也有很多做框架的公司管它叫Pipeline并行,但是我的观点是层间模型并行只有真的流水起来了才能够叫Pipeline并行。
在这里插入图片描述
1D 2D 2.5D 3D模型并行详细介绍:
GPT 不同层的并行embedding self-att MLP

Zero

zero 1 2 3

ZeRO: Memory Optimizations Toward Training Trillion Parameter Models
发表在SC 20,DeepSpeed项目最初就是论文中ZeRO方法的官方实现。
ZeRO-Offload: Democratizing Billion-Scale Model Training发表在ATC 21
ZeRO-Infinity: Breaking the GPU Memory Wall for Extreme Scale Deep Learning 发表在SC 21,同样是进行offload,ZeRO-Offload更侧重单卡场景,而ZeRO-Infinity则是典型的工业界风格,奔着极大规模训练去了。
参考资料:https://zhuanlan.zhihu.com/p/428117575
deepspeed就是主要使用了这种方式

Lora

low rank adaption

Tensor Parallelism

张量模型并行(Tensor Model Parallelism),Megatron就是使用了这种方式
XA = Y

行并行(Row Parallelism)
就是把 A 按照行分割成两部分
在这里插入图片描述

列并行
Y=[Y1,Y2]

MLP
对于第一个全连接层:使用列分割
对于第二个全连接层:使用行切分

猜你喜欢

转载自blog.csdn.net/weixin_36378508/article/details/129838193