MEGABLOCKS
Switch Transformers
- 模型介绍
Swith Transformer的MoE设计是门控网络每次只route到1个专家。采用softmax来计算门控网络层的输出。
-
可微的负载均衡loss(Load Balancing):
- 为了鼓励所有专家尽可能的负载均衡,拿到近似均匀分布的样本,本文加入了 负载均衡损失 ,这个loss在训练中直接加到总的loss上。当的时候损失是最小的,表示所有token完全平均分配到N个专家上。具体的,N(1,...,N)表示N个专家,B表示batch,T表示当前batch中token的数量,超参数是一个非常小的权重因子:
- 其中,表示专家i被分配到token的数量的占比,比如有100个token,专家i分配到了10个,那么:
- 其中,表示所有token分配到专家i 的概率占比,也就是求所有token经过门控层之后分配到专家i的平均概率**:
-
数据并行/模型并行/专家并行说明
B每个batch中token的数量,N:core的数量,n:数据并行的分区数量,m:模型并行的分区数量,E:专家的数量,C:Expert capacity,每个专家的batch size。
-
数据并行:上图中的第一列。n=N,m=1,模型weight权重在所有core上复制一份(第一列上图),数据是切分成N份分配给所有core,计算时分别处理一部分(第一列上图)。这种模式,计算前、反向传播过程中不需要通信,当所有cores计算结束之后需要将梯度聚合起来,也就是只在优化器阶段同步所有core。
-
模型并行:上图第二列。n=1,m=M,模型weight权重被切分到16个core上,每个core都会处理全部的B个token。因为层需要切分到每个core上(按照维度切分),在计算FFN层第二个矩阵乘法时,每个core上都送过去 的数据,然后所有core上的结果需要重新sum起来,因此在前向、后向计算时都会使用 all-reduce操作。
-
数据并行+模型并行:上图第三列。是数据并行和模型并行的结合。一共有N=n*m个core,每个core负责计算 B/n个tokens以及分配到的的模型权重和中间activation产出。在前向以及后向计算之间时的tensor大小是。这种模式cores被分为4组,每组共享一份全量的模型权重,4组模型权重做数据并行,4组模型组内切分做模型并行。数据切分,不同组模型处理不同的数据(不同颜色区分),在一个组内4个core做模型并行,数据被辅助成多份共用(如图中蓝色被复制成多份)。
-
专家并行+数据并行:上图第四列。每个专家分布到N个core上,互相独立,权重不同所以颜色不同。下方数据并行,数据是切分成N份分配给所有core,计算时分别处理一部分。
-
专家并行+数据并行+模型并行:从模型权重切分看,跟3模式相同,区别在于expert权重各不相同。从数据切分看,跟3模型相同。在设计模型的时候,我们需要平衡每个token的FLOPS和模型参数量,当我们增加了expert的数量,就会增加模型参数,但是并没有改变每个token的FLOPS。为了增加FLOPS,我们只能增加层的维度(这也意味着会增加参数量),这就引出一个权衡的问题:如果我们增加层的维度,会导致每个core计算OOM(out-of-memory),这个就不可避免的需要增加模型并行的分区数量m。但是,我们只有固定数量的core数量N,根据 , 我们就必须减少n,也就是需要使用更小的batch-size。所以,在实际模型设计中,需要平衡FLOPS、通信消耗以及core的内存是一件非常复杂的事情,需要具体问题具体分析。
Mixtral 8x7B
Mixtral 8x7B 是在Mixtral 7B基础上发展的, “8”的意思是每层由8个专家组成。
如上图所示,MoE模块的输出是所有专家网络输出的加权和,每个专家网络就是前馈神经网络,权重是由门控网络生成,假设有n个专家网络,其中是门控网络的输出向量(n维的概率向量),是第i个专家网络的输出向量,则MoE的输出可以表示成:
如果门控网络的输出概率向量是稀疏的,那么对应概率为零的专家网络就不需要参与计算。本文的实现方式非常简单,对于门控网络层的输出logits,先选取top-K,然后计算softmax进行归一化:
在本文中K设定为2,专家网络使用SwiGLU激活函数。则输入第x个token的最终输出y可以计算为:
DeepSeek-V3
参考: