主要观点总结
SGLang实现了Expert Parallel(EPMoE),这是其率先在开源推理框架中实现的。SGLang通过修改上层接口和底层实现,特别是利用GroupedGemmRunner类进行矩阵乘法,并实现了EPMoE类和其Forward方法,实现了类似EP MoE训练时的步骤。SGLang EP MoE Kernel通过预重排序和两次Group GEMM,以及两次重排序,最终得到最终输出。EPMoE和MoE EP训练流程的区别在于,EPMoE在推理时通过优化All2All流程来降低通信成本。SGLang EPMoE计算流程中最耗时的Group GEMM尚未使用FalshInfer的优化版本,因此可能效率不高。
关键观点总结
关键观点1: SGLang实现Expert Parallel(EPMoE)
SGLang是开源推理框架中率先实现EPMoE的。
关键观点2: 上层接口和底层实现修改
通过修改上层接口和底层实现,特别是利用GroupedGemmRunner类进行矩阵乘法,并实现了EPMoE类和其Forward方法。
关键观点3: EPMoE计算流程
通过预重排序和两次Group GEMM,以及两次重排序,得到最终输出。
关键观点4: EPMoE和MoE EP训练流程的区别
EPMoE在推理时通过优化All2All流程来降低通信成本。
关键观点5: EPMoE效率问题
SGLang EPMoE计算流程中最耗时的Group GEMM尚未使用FalshInfer的优化版本,可能效率不高。
文章预览
0x0. 前言 最近在SGlang仓库下做了一段时间的开发和学习,对SGLang的一些比较新的Feature也开始有一些了解。这篇文章就是尝试来梳理一下SGLang中Expert Parallel的实现,据我所知SGlang应该是开源推理框架中率先实现Expert Parallel的。我们可以学习一下它是如何实现的,以及它相比于普通的EP主要优化点在哪。SGLang在 https://github.com/sgl-project/sglang/pull/2371 中实现了Expert Parallel,我们从这里看就行。如果对MoE EP不熟悉可以参考 https://zhuanlan.zhihu.com/p/681154742 这篇文章或者阅读 DeepSeek 相关的资料。 0x1. 上层的接口 首先我们可以看到server_args.py中的改动,Expert Parallel接管了Tensor Parallel的位置,以Deepseek V3为例子,有256个Expert,现在打开Expert Parallel并且把 expert_parallel_size 设置为8的话,那么每张卡上分得完整的32个Expert。另外可以看到在初始化参数的时候,如果开启了Expe
………………………………