爱笑的小姐姐 · 23 小时前

Meta Shuffling的MoE Grouped GEMM kernel benchmark

紧接着昨天那篇PyTorch Blog的内容MetaShuffling:Meta的Fused MoE kernel工程方案,更激进的Kernel优化和尽量避免Padding,我把fbgemm开源的moe grouped gemm kernel(https://github.com/pytorch/FB...)拷贝了一下,fix了一个小bug,然后在H100(Hopper)和SGLang的Grouped GEMM Triton Kernel对比了一下正确性和性能,在正确性没问题的情况下,性能可以提升挺多的。细节放在这里了:https://github.com/sgl-projec... 。结论就是fbgemm可以在MoE模型上相比于SGLang的grouped gemm实现较大的性能提升,这个kernel可以在fp16/bf16和fp8 per-tensor quant的情况下直接应用到sglang的ep-moe的grouped gemm kernel中提升性能。不过TP模式下的Triton Fused MoE不是最直接的Grouped GEMM,需要有小伙伴按照这个Triton优化的技巧去改kernel才可以。

FBGEMM GroupedGEMM 基准测试结果

当使用 triton==3.2.0 运行基准测试时,会出现以下警告:我们无法使用 warp专用化, 但持久化kernel和 TMA load/store 仍然可用。

我把fbgemm开源的moe grouped gemm kernel(https://github.com/pytorch/FBGEMM/tree/main/fbgemm_gpu/experimental/gen_ai)拷贝了一下,fix了一个小bug,然后在H100(Hopper)和SGLang的Grouped GEMM Triton Kernel对比了一下正确性和性能,在正确性没问题的情况下,性能可以提升挺多的。细节放在这里了:https://github.com/sgl-project/sglang/pull/6924 。结论就是fbgemm可以在MoE模型上相比于SGLang的grouped gemm实现较大的性能提升,这个kernel可以在fp16/bf16和fp8 per-tensor quant的情况下直接应用到sglang的ep-moe的grouped gemm kernel中提升性能。不过TP模式下的Triton Fused MoE不是最直接的Grouped GEMM,需要有小伙伴按照这个Triton优化的技巧去改kernel才可以。

Qwen2-57B-A14B-Instruct BF16 W8A8 TP4

python3 benchmark/kernels/fbgemm/benchmark_fbgemm_grouped_gemm.py --model Qwen/Qwen2-57B-A14B-Instruct --tp-size 4

grouped-gemm-performance:
    batch_size  FBGEMM Grouped GEMM BF16  SGLang Grouped GEMM BF16
0          1.0                  0.032352                  0.022272
1          2.0                  0.032096                  0.022080
2          4.0                  0.032640                  0.021984
3          8.0                  0.031840                  0.021472
4         16.0                  0.030832                  0.021536
5         32.0                  0.032192                  0.021632
6         64.0                  0.393504                  0.595008
7        128.0                  0.393872                  0.598048
8        256.0                  0.394848                  0.589760
9        512.0                  0.397488                  0.605888
10      1024.0                  0.401248                  0.581952
11      2048.0                  0.407232                  0.559232
12      4096.0                  0.416368                  0.717936

图片

Qwen2-57B-A14B-Instruct FP8 W8A8 TP4

python3 benchmark/kernels/fbgemm/benchmark_fbgemm_grouped_gemm.py --model Qwen/Qwen2-57B-A14B-Instruct --tp-size 4

grouped-gemm-performance:
    batch_size  FBGEMM Grouped GEMM BF16  SGLang Grouped GEMM BF16
0          1.0                  0.032352                  0.022272
1          2.0                  0.032096                  0.022080
2          4.0                  0.032640                  0.021984
3          8.0                  0.031840                  0.021472
4         16.0                  0.030832                  0.021536
5         32.0                  0.032192                  0.021632
6         64.0                  0.393504                  0.595008
7        128.0                  0.393872                  0.598048
8        256.0                  0.394848                  0.589760
9        512.0                  0.397488                  0.605888
10      1024.0                  0.401248                  0.581952
11      2048.0                  0.407232                  0.559232
12      4096.0                  0.416368                  0.717936

图片

meta-llama/Llama-4-Scout-17B-16E-Instruct FP16 TP8

python3 benchmark/kernels/fbgemm/benchmark_fbgemm_grouped_gemm.py --model Qwen/Qwen2-57B-A14B-Instruct --tp-size 4

grouped-gemm-performance:
    batch_size  FBGEMM Grouped GEMM BF16  SGLang Grouped GEMM BF16
0          1.0                  0.032352                  0.022272
1          2.0                  0.032096                  0.022080
2          4.0                  0.032640                  0.021984
3          8.0                  0.031840                  0.021472
4         16.0                  0.030832                  0.021536
5         32.0                  0.032192                  0.021632
6         64.0                  0.393504                  0.595008
7        128.0                  0.393872                  0.598048
8        256.0                  0.394848                  0.589760
9        512.0                  0.397488                  0.605888
10      1024.0                  0.401248                  0.581952
11      2048.0                  0.407232                  0.559232
12      4096.0                  0.416368                  0.717936

图片

meta-llama/Llama-4-Scout-17B-16E-Instruct FP8 TP8

python3 benchmark/kernels/fbgemm/benchmark_fbgemm_grouped_gemm.py --model Qwen/Qwen2-57B-A14B-Instruct --tp-size 4

grouped-gemm-performance:
    batch_size  FBGEMM Grouped GEMM BF16  SGLang Grouped GEMM BF16
0          1.0                  0.032352                  0.022272
1          2.0                  0.032096                  0.022080
2          4.0                  0.032640                  0.021984
3          8.0                  0.031840                  0.021472
4         16.0                  0.030832                  0.021536
5         32.0                  0.032192                  0.021632
6         64.0                  0.393504                  0.595008
7        128.0                  0.393872                  0.598048
8        256.0                  0.394848                  0.589760
9        512.0                  0.397488                  0.605888
10      1024.0                  0.401248                  0.581952
11      2048.0                  0.407232                  0.559232
12      4096.0                  0.416368                  0.717936

图片

结论是FBGEMM相比SGLang的分组GEMM实现在MoE模型上可以实现显著的性能提升。这个kernel可以直接应用到SGLang的EP-MoE分组GEMM kernel中,以提升fp16/bf16和per-tensor量化fp8条件下的性能。

局限性

当前的局限性在于如果不编译Meta特定的Triton版本,warp专用kernel似乎无法使用。此外,这个kernel目前仅支持fp16/bf16和per-tensor量化的fp8w8a8 - 要与DeepSeek兼容还需要进一步修改。

END

作者:BBuf
来源:GiantPandaLLM

推荐阅读

欢迎大家点赞留言,更多 Arm 技术文章动态请关注极术社区嵌入式AI专栏欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。

推荐阅读
关注数
18969
内容数
1478
嵌入式端AI,包括AI算法在推理框架Tengine,MNN,NCNN,PaddlePaddle及相关芯片上的实现。欢迎加入微信交流群,微信号:aijishu20(备注:嵌入式)
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息