Prhub

#25775 [Perf][Qwen3.5] Add case 512 to topkGatingSoftmaxKernelLauncher,

原始 PR 作者 Chen-0210 合并时间 2026-05-25 16:08 文件变更 3 提交数 5 评论 6 代码增减 +6 / -3

执行摘要

topk_softmax 内核新增 512 专家支持

PR body 指出需要为具有 512 个专家的模型(如 Qwen3.5-397B-A17B)启用融合单内核路径。此前 num_experts=512 时,Fallback 到默认分支,需要分配临时工作区(flattened softmax 结果),性能明显下降。

可快速合并。关注点在于阈值变更后,2048+ 专家模型仍正确使用 workspace。

讨论亮点

无实质性讨论。

实现拆解

  1. 内核启动分支扩展:在 sgl-kernel/csrc/moe/moe_topk_softmax_kernels.cutopkGatingSoftmaxKernelLauncher 中添加 case 512: LAUNCH_SOFTMAX(T, 512, WARPS_PER_TB); break;,使得 512 专家也能调用专属模板特化,走融合单内核路径。
  2. 工作区阈值调整:在同一文件中将 needs_workspace 条件从 num_experts > 256 改为 num_experts > 512,确保 512 专家不走需要分配额外空间的回退路径。
  3. benchmark 配置更新sgl-kernel/benchmark/bench_moe_topk_softmax.pytopk_range 增加 10,覆盖模型真实 topk 值。
  4. 单元测试参数扩展sgl-kernel/tests/test_moe_topk_softmax.pytopk 参数化增加 10
文件 模块 状态 重要度
sgl-kernel/benchmark/bench_moe_topk_softmax.py 基准测试 modified 4.82
sgl-kernel/tests/test_moe_topk_softmax.py 测试 modified 3.42
sgl-kernel/csrc/moe/moe_topk_softmax_kernels.cu CUDA 内核 modified 2.92

关键符号

topkGatingSoftmaxKernelLauncher topk_softmax

关键源码片段

sgl-kernel/csrc/moe/moe_topk_softmax_kernels.cu core-logic

核心 CUDA 内核的 switch-case 分支和工作区阈值变更。

// 在 topkGatingSoftmaxKernelLauncher 的 switch 中新增 case 512
case 512:
  LAUNCH_SOFTMAX(T, 512, WARPS_PER_TB);
  break;
// 同时将 needs_workspace 阈值从 256 提升至 512,
// 确保 512 专家走融合内核路径而非 fallback 路径
const bool needs_workspace = !is_pow_2 || num_experts > 512;

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

变更仅涉及 kernel launcher 的 switch-case 分支和阈值常量,改动很小。风险极低。

针对 Qwen3.5-397B-A17B 等 512 专家模型,topk_softmax 延迟降低约 1.79x-4.25x,E2E 吞吐在高并发下提升约 7.24%。对其他专家数量的模型无影响。

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论