Prhub

#30280 Delete sgl-kernel AOT router GEMM and fused A GEMM

原始 PR 作者 b8zhong 合并时间 2026-07-22 08:45 文件变更 19 提交数 20 评论 8 代码增减 +10 / -1834

执行摘要

删除 sgl-kernel AOT GEMM 内核及配套代码

PR body 仅说明 'Since we migrated already'。这些 AOT kernel 的对应功能已由 JIT kernel 覆盖,删除旧代码可以减少维护成本、加快编译速度,并统一内核实现路径。

该 PR 是典型的技术债务清理,设计清晰,风险可控,建议合并。值得关注的决策是:将复杂 kernel 从 AOT 移至 JIT 统一框架,可以简化跨平台支持并提升性能调优效率。

讨论亮点

唯一的技术讨论来自 Fridge003 的 review 评论:

询问:'Can we delete the musa kernel? Since the jit kernel is only in cuda' (位于 common_extension_musa.cc:100)
答复:b8zhong 确认 'Yes. They said they didn't need it on Slack',表明团队已确认 MUSA 平台也无需这些 AOT kernel。

实现拆解

按照以下步骤清理:

  1. 删除 CUDA kernel 源文件:移除 sgl-kernel/csrc/gemm/dsv3_router_gemm_bf16_out.cudsv3_router_gemm_float_out.cudsv3_router_gemm_entry.cudsv3_fused_a_gemm.cu,这些是 AOT 编译的 CUDA kernel。
  2. 删除 Python 绑定与 API:从 sgl_kernel/gemm.py 中移除 dsv3_fused_a_gemm 函数,从 __init__.py 和 CMakeLists.txt 中移除相关注册,并删除 MUSA 扩展中的对应绑定。
  3. 删除测试与 benchmark:移除 test_dsv3_fused_a_gemm.py 以及 benchmark_deepgemm_dsv3_router_gemm_blackwell.pybench_dsv3_fused_a_gemm.py 等 benchmark 文件。
  4. 更新 JIT kernel 入口:修改 fused_a_gemm.pydsv3_router_gemm.py,确保它们直接指向 JIT 实现而非 AOT;调整已迁移的 benchmark 脚本的导入路径。
  5. 处理冲突与 MUSA:在合并过程中解决与 main 分支的多次冲突,并确认 MUSA 平台不需要这些 kernel,也删除了 musa 绑定。
文件 模块 状态 重要度
sgl-kernel/csrc/gemm/dsv3_fused_a_gemm.cu CUDA 内核 removed 6.79
sgl-kernel/csrc/gemm/dsv3_router_gemm_bf16_out.cu CUDA 内核 removed 6.81
sgl-kernel/python/sgl_kernel/gemm.py Python 绑定 modified 6.73
benchmark/kernels/deepseek/benchmark_deepgemm_dsv3_router_gemm_blackwell.py 基准测试 removed 8.88
python/sglang/jit_kernel/fused_a_gemm.py JIT 内核 modified 5.61

关键符号

dsv3_fused_a_gemm dsv3_router_gemm create_benchmark_configs dsv3_router_gemm_sgl dsv3_router_gemm_flashinfer

关键源码片段

sgl-kernel/python/sgl_kernel/gemm.py core-logic

Python API 入口:移除了 dsv3_fused_a_gemm 的绑定函数。删除后用户代码若直接调用该函数将报错,但官方调用已迁移至 JIT kernel。

# sgl-kernel/python/sgl_kernel/gemm.py ( 修改后 )
# 原 dsv3_fused_a_gemm 函数已被移除,由 jit_kernel.fused_a_gemm 替代def fp8_scaled_mm(mat_a, mat_b, scales_a, scales_b, out_dtype, bias=None):
    return torch.ops.sgl_kernel.fp8_scaled_mm.default(
        mat_a, mat_b, scales_a, scales_b, out_dtype, bias
    )# [ 已删除 ] def dsv3_fused_a_gemm(mat_a, mat_b, output=None):
# [ 已删除 ] ... # 直接调用 torch.ops.sgl_kernel.dsv3_fused_a_gemm.default# 后续函数保持不变

评论区精华

是否删除 MUSA 平台的绑定 question

Fridge003 在 review 中提问:'Can we delete the musa kernel? Since the jit kernel is only in cuda'(位于 common_extension_musa.cc:100)。b8zhong 回复:'Yes. They said they didn't need it on Slack'。

结论:确认 MUSA 平台不需要这些 AOT kernel,删除 musa 绑定是安全的。 · 已解决

风险与影响

  1. 功能兼容性:低风险。所有原 AOT kernel 功能已由 JIT kernel 覆盖,且已有对应测试。
  2. MUSA 平台:低风险。作者已通过 Slack 确认 MUSA 团队不需要这些 kernel,且 PR 同时删除了 musa 绑定。
  3. 回归风险:中等。由于 PR 涉及多次合并冲突解决,可能存在细小的残留依赖。但 CI 已通过。
  4. 打包体积:正面影响,sgl-kernel 编译产物变小。

对用户:无直接功能影响。对开发团队:减少维护负担,加快编译速度,促进内核实现统一。对系统:sgl-kernel 包不再包含 dsv3_router_gemm 和 dsv3_fused_a_gemm 的 AOT 实现。

MUSA 平台确认 JIT 功能覆盖验证

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论