Prhub

#32045 [Kernel] Phase 4 batch-3: migrate tangled JIT subsystems + new groups into kernels.ops (RFC #29630)

原始 PR 作者 BBuf 合并时间 2026-07-22 21:15 文件变更 389 提交数 4 评论 2 代码增减 +8187 / -8159

执行摘要

JIT kernel 子系统迁移到 kernels.ops

遵循 RFC #29630 统一内核命名空间的总体规划,消除 sglang.jit_kernel 包中的冗余和混用,将算子按功能领域归入 kernels.ops 各子模块,为后续内核维护和扩展奠定基础。

建议快速合并,并关注后续的 shim 清理 PR。对中等了解团队内核架构的开发者来说,本 PR 展示了大规模代码迁移的最佳实践,值得阅读。

讨论亮点

该 PR 未收到人工 review 评论,仅有一条 Gemini Code Assist 自动停止提示和一条来自 BBuf 的 CI 链接。BBuf 提供的 CI 链接(Run #29912754833)用于验证变更,推测为内部验证通过。

实现拆解

  1. Stage 1 — 干净移动:将 19 个注意力算子(flash_attention_v3/v4、concat_mla、cutedsl_gdn/kda/paged_mqa、rope、fused_qknorm_rope、hadamard 等)、8 个 MoE 算子、timestep_embedding 直接复制到 kernels.ops/attention 和 kernels.ops/moe,删除旧文件。
  2. Stage 2 — 纠缠子系统迁移:处理难以直接移动的目录:
    • dsa/dsv4/ 合并到 kernels.ops.attention 的现有 Phase-2.5 目录,__init__ 重导出保持兼容。
    • trtllm_lora_temp/(包含其自包含的 data/csrc 和 data/include)整体搬到 kernels.ops.moe
    • diffusion/(含嵌套的 cutedsl/flydsl/triton)搬到 kernels.ops.diffusion
    • minimax_m3 拆分:rmsnorm→kernels.ops.layernorm,qk_norm_rope→attention,swiglu→moe。
    • triton/ 拆分:gdn_fused_proj→attention,hash_topk/sigmoid_gate_mul→moe。
  3. 新组构建:新增 lplb/kv_canary/model/inkling 三个算子组,注册到 _GROUPS 配置。
  4. 调用点更新:将 268 个文件(包含 srt、multimodal_gen、jit_kernel 自身)中的 sglang.jit_kernel.* 引用全部改写为新路径。
  5. 测试验证:68 个 CPU 内核测试全部通过,lint 检查通过。
文件 模块 状态 重要度
python/sglang/jit_kernel/trtllm_lora_temp/data/include/flashinfer/trtllm/fused_moe/runner.h JIT 内核 removed 8.65
python/sglang/jit_kernel/dsa/__init__.py JIT 内核 removed 7.68
python/sglang/kernels/ops/moe/trtllm_lora_temp/data/include/flashinfer/trtllm/fused_moe/runner.h 内核运算 added 7.06

关键符号

Runner pick_dsl_expand CuteDSLPagedMQALogitsRunner maybeGetMinTokenCount serializeMoeRoutingMethodType getMaxNumCtasInBatchDim RoutingMethodType

关键源码片段

python/sglang/jit_kernel/trtllm_lora_temp/data/include/flashinfer/trtllm/fused_moe/runner.h deletion

trtllm_lora_temp 的 MoE 核心头文件旧位置,被完整迁移到 kernels.ops.moe 下,代表最具挑战性的 C++ 代码搬迁 (586 行删除 )。

/*
 * 旧位置:sglang/jit_kernel/trtllm_lora_temp/data/include/flashinfer/trtllm/fused_moe/runner.h
 * 该文件在 Phase 4 batch-3 中被删除,完整迁至 kernels/ops/moe 下对应路径。
 * 下为原始内容节选,展示了 MoE 路由枚举和辅助函数。
 */#pragma once#include "DevKernel.h"
#include "flashinfer/trtllm/fused_moe/RoutingKernel.h"
#include <string>
#include "flashinfer/trtllm/batched_gemm/KernelRunner.h"
#include "flashinfer/trtllm/batched_gemm/trtllmGen_bmm_export/trtllm/gen/DtypeDecl.h"
#include "flashinfer/trtllm/common/cudaUtils.h"namespace tensorrt_llm {
namespace kernels {
namespace trtllmgen_moe {namespace MoE {
class Runner;
} // namespace MoEnamespace Routing {enum class RoutingMethodType : int64_t {
  Default = 0, // Softmax -> TopK
  Renormalize = 1, // TopK -> Softmax
  DeepSeekV3 = 2, // Sigmoid -> Group -> Expert
  Llama4 = 3, // Top1 -> Sigmoid
  RenormalizeNaive = 4, // Softmax -> TopK -> Renormalize
  TopK = 5, // TopK only
  SigmoidRenorm = 6, // Sigmoid -> TopK -> Renormalize
  MiniMax2 = 7, // Sigmoid + Bias -> TopK -> ScaledSumNormalize
  Sigmoid = 8, // Sigmoid -> TopK
  Unspecified = 9,
};inline int32_t maybeGetMinTokenCount(int32_t numPaddedTokens, int32_t hiddenSize, int32_t dtypeSizeBits) {
  int32_t minNumTokensRequired = common::divUp(128 * 1024 * 8, hiddenSize * dtypeSizeBits);
  return std::max(numPaddedTokens, minNumTokensRequired);
}} // namespace Routing
} // namespace trtllmgen_moe
} // namespace kernels
} // namespace tensorrt_llm
python/sglang/kernels/ops/moe/trtllm_lora_temp/data/include/flashinfer/trtllm/fused_moe/runner.h infrastructure

trtllm_lora_temp 的 MoE 核心头文件新位置,是 Stage 2 中最大搬迁单元,内容与原位置一致但路径更新。

/*
 * 新位置:sglang/kernels/ops/moe/trtllm_lora_temp/data/include/flashinfer/trtllm/fused_moe/runner.h
 * 该文件由旧位置整体搬迁而来,内容几乎不变,仅 include 路径因相对位置变化可能调整。
 * 展示了 MoE 路由枚举在新结构中的位置。
 */#pragma once#include "DevKernel.h"
#include "flashinfer/trtllm/fused_moe/RoutingKernel.h"
#include <string>
#include "flashinfer/trtllm/batched_gemm/KernelRunner.h"
#include "flashinfer/trtllm/batched_gemm/trtllmGen_bmm_export/trtllm/gen/DtypeDecl.h"
#include "flashinfer/trtllm/common/cudaUtils.h"namespace tensorrt_llm {
namespace kernels {
namespace trtllmgen_moe {namespace MoE {
class Runner;
} // namespace MoEnamespace Routing {enum class RoutingMethodType : int64_t {
  Default = 0, // Softmax -> TopK
  Renormalize = 1, // TopK -> Softmax
  DeepSeekV3 = 2, // Sigmoid -> Group -> Expert
  Llama4 = 3, // Top1 -> Sigmoid
  RenormalizeNaive = 4, // Softmax -> TopK -> Renormalize
  TopK = 5, // TopK only
  SigmoidRenorm = 6, // Sigmoid -> TopK -> Renormalize
  MiniMax2 = 7, // Sigmoid + Bias -> TopK -> ScaledSumNormalize
  Sigmoid = 8, // Sigmoid -> TopK
  Unspecified = 9,
};inline int32_t maybeGetMinTokenCount(int32_t numPaddedTokens, int32_t hiddenSize, int32_t dtypeSizeBits) {
  int32_t minNumTokensRequired = common::divUp(128 * 1024 * 8, hiddenSize * dtypeSizeBits);
  return std::max(numPaddedTokens, minNumTokensRequired);
}} // namespace Routing
} // namespace trtllmgen_moe
} // namespace kernels
} // namespace tensorrt_llm

评论区精华

CI 验证 other

BBuf 在 issue 评论中提供了一个 CI 链接(Run #29912754833),用于验证变更的通过情况。未收到其他人工 review 评论。

结论:68 个 CPU 内核测试通过,lint 通过。 · 已解决

风险与影响

导入错误:268 个文件调用点重写可能遗漏或写错路径,但 68 个 CPU 测试和 lint 提供基本覆盖。C++ 代码搬迁:trtllm_lora_temp 的 .cu 和 .cuh 文件搬迁可能因 include 路径或符号冲突导致编译失败。shim 兼容:本 PR 不包含 shim 的完整清理(由 batch-1 处理),存在新旧路径并存期间的维护成本。性能回归:算子移动后无逻辑变更,但命名空间变化可能导致 Python 导入缓存问题。

开发者:所有直接 import sglang.jit_kernel 的代码需迁移到 sglang.kernels.ops,但短期内 shim 保持兼容。系统:算子组织更清晰,便于后续按领域进行优化。团队:RFC #29630 进入收尾阶段,该 PR 完成后 jit_kernel 包仅剩 8 个兼容 shim。

大规模路径重写 C++ 代码搬迁 shim 兼容风险 缺乏 review 覆盖

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论