Megatron-LM#
Megatron 这片论文中提出的张量并行(也称模型并行),主要是针对 transformer 这种模型结构所设计的。所以其会对 MLP 层和 MHA 层有不同的设计,分别描述如下。
MLP 部分#
原始公式:
Y=GeLU(X⋅A)Z=Dropout(Y⋅B)
Tensor Parallel 的拆分过程如下图所示,将矩阵 A 拆分为 [A1,A2],将矩阵 B 拆分为 [B1B2]:

公式 Y=GeLU(X⋅A) 拆分之后矩阵的形状如下图所示(得到 Y1 和 Y2 之后,将这两个矩阵 concat 在一起就可以得到矩阵 Y,当然实际上不会有这个 concat 操作,因为不需要得到完整的矩阵 Y):
图1 |
---|
![]() |
公式 Z=Dropout(Y⋅B) 拆分之后矩阵的形状如下图所示,得到 Z1 和 Z2 之后,将这两个矩阵 逐个元素相加 之后得到矩阵 Z(矩阵 Z、Z1、Z2 的维度都是相同的):
图2 |
---|
![]() |
上面是以两张卡为例进行介绍的,矩阵都是被划分为了两份,那么如果是有三张卡,矩阵需要被划分为三份的话,应该如何操作?并且矩阵划分为的三份的维度必须要完全一致吗?
MHA 部分#
原始公式:
Y=Self-Attention(X)Z=Dropout(Y⋅B)

上图中的右侧部分也就是图2,如果有多个头时也是基本相同的,比如有四个头时拆分后矩阵的形状如下图所示。将矩阵 Z1、Z2、Z3、Z4 逐个元素相加起来就得到矩阵 Z。
图3 |
---|
![]() |