到目前为止,“MoE环游记”系列已经写了7篇文章,其中5篇都是围绕着MoE的路由和负载均衡展开的。从路由的形式来看,它们可以分为静态计算和动态计算两类;从实现负载均衡的方法上看,它们又可以分为Aux-Loss和Loss-Free两类,其中Loss-Free又可以DeepSeek所提的SignSGD方案以及笔者所提的QB方案。
还有一个细节是,我们此前讨论的Loss-Free方案,都是在实现全局批次意义下的均衡,而很多时候我们会加上一个序列级的Aux Loss,来避免序列级的极端不均衡。如果我们相信每个Aux-Loss方案都有对应的Loss-Free版本,那么序列级的Loss-Free均衡,又应该怎么实现呢?这便是文本要探讨的主题。
前文回顾
首先让我们回顾一下之前关于负载均衡的探讨。在文章《MoE环游记:2、不患寡而患不均》中,我们首次讨论MoE的负载均衡问题,所提的解决方案为Aux Loss,即添加额外的损失函数来促进均衡,Aux Loss的问题是有额外的权重系数要调,优点是可以随意调节均衡的颗粒度,可以实现序列、分组或者全局层次的均衡(当然越全局通信也越大)。