执行摘要
- 一句话:删除 ScheduleBatch 死亡字段
- 推荐动作:建议快速合并。这是典型的死代码清理变更,逻辑清晰且经过 CI 验证。
功能与动机
PR body 指出:这两个 ScheduleBatch dataclass 字段在 init_new 中通过 any(req...) 计算,但从未在 batch 级别被读取。实际的捕获路径由全局 server 参数 + 每个请求的 req 标志控制,因此 batch 粒度的聚合字段自引入以来就是无效的。
实现拆解
- 删除字段定义:在
python/sglang/srt/managers/schedule_batch.py 的 ScheduleBatch 类中移除 return_routed_experts: bool = False 和 return_indexer_topk: bool = False 两行。
- 删除初始化逻辑:在
init_new 方法中移除对这两个字段的赋值语句(return_routed_experts=any(req.return_routed_experts for req in reqs) 等)。
- 移动测试文件:将
test/registered/8-gpu-models/test_return_indexer_topk.py 移动到 test/registered/rl/test_return_indexer_topk.py,与其他 RL 相关测试(如 test_return_routed_experts.py)放在一起。
关键文件:
python/sglang/srt/managers/schedule_batch.py(模块 调度器;类别 source;类型 core-logic): 核心变更文件:删除了两个无用的字段定义和初始化逻辑,精简 ScheduleBatch 数据类。
test/registered/rl/test_return_indexer_topk.py(模块 测试;类别 test;类型 rename-or-move): 测试文件被移动以保持与同类测试的组织一致性。
关键符号:未识别
关键源码片段
python/sglang/srt/managers/schedule_batch.py
核心变更文件:删除了两个无用的字段定义和初始化逻辑,精简 ScheduleBatch 数据类。
# 变更前(已删除的行)
# return_routed_experts: bool = False
# return_indexer_topk: bool = False
# 以及在 init_new 中:
# return_routed_experts=any(req.return_routed_experts for req in reqs),
# return_indexer_topk=any(req.return_indexer_topk for req in reqs),
# 变更后:这些行被完全移除,不会影响功能,因为实际控制逻辑在 per-request 级别。
评论区精华
无 review 评论。PR 作者使用 /rerun-test 命令触发了 CI,并确认两个受影响测试均在对应 GPU 环境中通过,表明删除操作不会引起回归。
风险与影响
- 风险:风险极低。删除的字段未被任何代码引用,仅用于测试中启动服务器时通过全局参数控制捕获行为。移动测试文件可能会影响 CI 路径依赖,但作者已通过 rerun 验证。
- 影响:影响范围仅限于代码整洁性:减少了
ScheduleBatch 的数据成员初始化和计算开销(尽管极小)。对用户无感知,对开发者降低维护负担。
- 风险标记:暂无
关联脉络
- PR #26423 [RL] Fix crash when the reqs in a batch have a mix of
return_routed_experts = True and False.: 该 PR 修复了 return_routed_experts 混合标志导致的崩溃,与本 PR 删除的 batch 级别字段属于同一功能域。测试文件 test_return_routed_experts.py 与移动后的 test_return_indexer_topk.py 同目录。
参与讨论