Prhub

#25473 fix(overlap): skip empty future interval for dp attention idle ranks

原始 PR 作者 hnyls2002 合并时间 2026-05-16 17:08 文件变更 1 提交数 1 评论 3 代码增减 +3 / -0

执行摘要

跳过 DP attention 空闲 rank 的空区间存储

在 DP attention 中,空闲 rank 的 future interval 为空 slice,如果直接赋值会导致无效的 tensor 操作。PR 描述明确说明需要将 store_to_map_for_new_batch 中的空 slice guard 镜像到 store_to_mapspec_algo.is_none() 分支。

建议尽快合入,属于明确的小 bugfix,补全了边界情况处理,确保与相关方法的一致性。

讨论亮点

无实质性讨论;自动化机器人 gemini-code-assist[bot] 仅给出正面评价,作者通过 /rerun-test 触发 DP attention 测试并已通过。

实现拆解

  1. python/sglang/srt/managers/overlap_utils.pystore_to_map 方法中,当 self.spec_algo.is_none() 时,在获取 intv 后增加 if self.is_empty_slice(intv): return 检查,如果 intv 为空则直接返回,不执行后续的 self.token_ids_buf[intv] = batch_result.next_token_ids
  2. 该 guard 与 store_to_map_for_new_batch 方法中的已有逻辑完全一致,只是补全了前者遗漏的分支。
文件 模块 状态 重要度
python/sglang/srt/managers/overlap_utils.py 调度器 modified 4.59

关键符号

store_to_map

关键源码片段

python/sglang/srt/managers/overlap_utils.py core-logic

修复核心位置:为 DP attention idle rank 的空 future interval 增加 guard,避免无效的 tensor 赋值。

def store_to_map(self, future_indices: FutureIndices, batch_result: GenerationBatchResult):
    if self.spec_algo.is_none():
        intv = future_indices.interval
        # 新增 guard:与 store_to_map_for_new_batch 保持一致,
        # 空区间(空闲 DP rank)无需存储任何内容,直接返回
        if self.is_empty_slice(intv):
            return
        self.token_ids_buf[intv] = batch_result.next_token_ids
    else:
        draft_input: EagleDraftInput = batch_result.next_draft_input
        self.store_to_map_for_new_batch(future_indices, draft_input)

评论区精华

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

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

风险与影响

低风险:仅增加了提前返回 guard,且逻辑与同一文件中已有的 store_to_map_for_new_batch 方法完全对称,设计上无风险。

仅影响 DP attention 空闲 rank 的执行路径,避免空 slice 写入 token_ids_buf,防止潜在的内存越界或无效操作。其他场景不受影响。

边界情况修复

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论