Prhub

#29622 Budget EAGLE/STANDALONE draft KV pool in SWA pool configurators

原始 PR 作者 cctry 合并时间 2026-06-30 15:58 文件变更 1 提交数 1 评论 6 代码增减 +19 / -3

执行摘要

修复 SWA 池因未预算 draft KV 导致 OOM

DefaultPoolConfigurator 已正确为 EAGLE/STANDALONE draft KV 预算内存(pool_configurator.py lines 132-149),但 SWA 配置器缺失此调整,导致混合 SWA 模型(如 Gemma, Command-R, MiMo)配合 EAGLE3 时出现 PD decode OOM。

这是一次必要且安全的 bugfix,逻辑清晰。特别推荐给关注 SWA 与 speculative decode 内存管理的工程师精读,尤其是 pool_configurator.py_cell_size 的计算方式。

讨论亮点

review 中无实质性讨论,所有评论均为 bot 配额提示和 CI rerun 命令。

实现拆解

  1. HybridSWAPoolConfigurator.__init__ 中新增 draft 层检测:通过 mr.spec_algorithm.is_eagle()is_standalone() 判断并获取 mr.eagle_draft_num_layers,仅对非 draft 工作节点设置 self._draft_full_layers_num
  2. 修正 _cell_size 计算:在 full_layers_num == 0 分支增加 self._full_per_token * self._draft_full_layers_num;在 else 分支将 full 项由 self._full_layers_num 改为 self._full_layers_num + self._draft_full_layers_num
  3. 同步修正 SWAChunkCapPoolConfigurator.calculate_pool_sizesfull_cell_size 同样改为 self._full_per_token * (self._full_layers_num + self._draft_full_layers_num),确保预算分配正确。
  4. 无测试文件变更:仅源代码逻辑调整,CI 已通过基本验证。
文件 模块 状态 重要度
python/sglang/srt/model_executor/pool_configurator.py 内存分配 modified 6.38

关键符号

HybridSWAPoolConfigurator.__init__ SWAChunkCapPoolConfigurator.calculate_pool_sizes

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

评论区精华

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

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

风险与影响

【回归风险】当 draft_full_layers_num = 0(即无 speculative decode 场景)时,行为与修改前完全一致,计算式中 draft 项为 0,无回归风险。【性能风险】涉及 CUDA graph replay metadata 生成的变更,但此 PR 仅修正内存预算逻辑,不改变算子或图生成流程,性能影响可忽略。【兼容性】eagle_draft_num_layers 属性在修改前已存在,仅在非 draft worker 上使用,无兼容问题。

影响范围:仅修改 pool_configurator.py,限制于 SWA 配置器(HybridSWAPoolConfiguratorSWAChunkCapPoolConfigurator)。直接影响使用 SWA 模型 + EAGLE/STANDALONE speculative decoding 的用户,解决 PD decode OOM。对于无 speculative decoding 的场景,行为无变化。

无测试覆盖

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论