Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MoE #244

Open
thinksoso opened this issue Apr 6, 2022 · 3 comments
Open

MoE #244

thinksoso opened this issue Apr 6, 2022 · 3 comments

Comments

@thinksoso
Copy link
Contributor

thinksoso commented Apr 6, 2022

MoE(Mixture-Of-Experts, 混合专家系统),在不增加计算量的情况下增加模型容量。采用的技术是Conditional computation,通过加入可训练的门控网络,决定专家系统的稀疏组合。直观看来,就是把一个大模型,按层拆分成不同的小模型组合,在输入样本时,动态地选择对应的小模型计算。
使用SPARSELY-GATE机制来选择模型,MoE包含一个门控网络决定激活哪些层。
image

@thinksoso
Copy link
Contributor Author

MOE层的细节:

加噪声和topK的门控层
image

batch缩小问题

这种方式导致每个expert分到的样本太少。假设有n个experts,batch_size=b,每次会有k个expert被选择,每个expert会接收到平均kb/n << b个样本。

这里提出了一些增大batch的解决方法:

  • 数据并行和模型并行: 相当于变相的扩大b,假设有d个device,每个device上一次处理b个样本,那么在这次训练中,batch=bd,从而每个expert会接收kbd/n个样本。
  • 单步拆分: 在我们的实验中,MoE中每个expert都是一个单层全连接,而这个层次是在LSTM层之间,因而,可以把训练LSTM时的多步给拆分开,从而相当于增大MoE训练的batch_size。
  • 采用一些方法优化模型训练时的内存,从而进一步增大batch size。

专家贡献不均衡问题

有些门控网络趋向于选择同样的一些专家,而这些专家因为被选择的多,训练的更加充分,导致更容易被选择,造成正反馈。
加入重要性loss,使专家的重要性尽量趋同
image

不同专家得到样本数不一样

image
加入新的loss,使每个专家得到的样本数量尽量一致

@thinksoso
Copy link
Contributor Author

DeepSpeed对MoE的改进

  • 拓展到自回归任务上(比如GPT3)
  • moe有更低的 parameter efficiency, 即参数的增长和效果的增加不成正比
  • 参数增加使得需要的GPU增加,带来推理性能的下降

解决办法

  • 在自回归任务上尝试了moe,相比GPT3和MT-NLG,达到同样的效果降低了五倍消耗
  • 使用Pyramid-Residual MoE(PR-MoE)提高parameter efficiency,可以减少三倍参数。并提出了压缩版的PR-MoE, MoS(Mixture-of-Students),减少3.7倍参数。
  • 开发 DeepSpeed-MoE inference system.

PR-MoE

两个结论

  1. 在较深的层加MoE效果更好(更深即更顶层)
    image

  2. 相比每次选取更多的专家,采用 Residual-MoE效果更好,效果接近的情况下,减少了通信消耗(因为每次只用两个专家)
    image

综合这两个因素,采用PR-MoE
image

因为每层的专家个数不一样,专家并行很难确定统一的并行度,所以需要专家并行和数据并行结合在一起,如果每层的专家数小于GPU数,就用数据并行复制专家来填满GPU
image

@thinksoso
Copy link
Contributor Author

deepspeed采用G-sharded对MoE的实现
https://arxiv.org/pdf/2006.16668.pdf
image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant