Prhub

#25724 Return a mamba tracking entry from the cache lookup instead of mutating caller lists

原始 PR 作者 fzyzcjy 合并时间 2026-05-19 09:21 文件变更 1 提交数 1 评论 1 代码增减 +28 / -16

执行摘要

重构 Mamba 缓存查询返回 NamedTuple

PR 标题和提交信息明确指出,旧版本中 _mamba_radix_cache_v2_req_prepare_for_extend 接收三个调用方拥有的列表并在内部进行追加操作,这些副作用跨越了方法体,不够透明。通过返回一个 NamedTuple 并在调用方显式追加,可以将副作用集中管理,使代码意图更清晰。

该 PR 是典型的“提取返回值”重构,代码整洁度提升明显,值得精读以学习如何消除跨方法副作用。

讨论亮点

无 review 评论或讨论。

实现拆解

  1. 定义 NamedTuple:在 schedule_batch.py 中,于 ScheduleBatch 类之前新增 _MambaRadixCacheV2TrackEntry NamedTuple,包含 track_maskbool)、track_indexint)、track_seqlenint)三个字段。
  2. 修改导入:在文件顶部的 typing 导入中增加 NamedTuple
  3. 重构方法签名:将 _mamba_radix_cache_v2_req_prepare_for_extend 的参数从三个列表(mamba_track_mask_cpumamba_track_indices_cpumamba_track_seqlens_cpu)简化为仅接收 req: Req,返回类型改为 _MambaRadixCacheV2TrackEntry
  4. 方法内部调整:移除方法内部的三个 .append() 调用,改为在方法末位返回一个 _MambaRadixCacheV2TrackEntry(mask, index, seqlen) 实例。其中 track_index 的获取方式由 mamba_track_indices_cpu.append(...) 改为本地变量 track_index = ...
  5. 调用方适配:在 ScheduleBatch.prepare_for_extend 中,将原来的调用方式替换为 track_entry = self._mamba_radix_cache_v2_req_prepare_for_extend(req),然后显式将 track_entry 的三个字段分别追加到对应的列表中。

该重构不涉及测试、配置或部署配套改动,属于纯源代碼重构。

文件 模块 状态 重要度
python/sglang/srt/managers/schedule_batch.py 调度 modified 7.09

关键符号

_mamba_radix_cache_v2_req_prepare_for_extend prepare_for_extend __repr__

关键源码片段

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

唯一变更文件,包含了核心逻辑的修改和新增序号定义。

# 文件 : python/sglang/srt/managers/schedule_batch.py
# 以下为 PR 新增的 NamedTuple 定义及调用处关键变更class _MambaRadixCacheV2TrackEntry(NamedTuple):
    track_mask: bool
    track_index: int
    track_seqlen: int
​
​
@dataclasses.dataclass
class ScheduleBatch(ScheduleBatchDisaggregationDecodeMixin):
    ...
​
    def prepare_for_extend(self):
        ...
        if get_global_server_args().enable_mamba_extra_buffer():
            # 以前直接传入列表让方法追加,现在返回条目后再显式追加
            track_entry = self._mamba_radix_cache_v2_req_prepare_for_extend(req)
            mamba_track_mask_cpu.append(track_entry.track_mask)
            mamba_track_indices_cpu.append(track_entry.track_index)
            mamba_track_seqlens_cpu.append(track_entry.track_seqlen)
        ...
​
    def _mamba_radix_cache_v2_req_prepare_for_extend(
        self, req: Req,
    ) -> "_MambaRadixCacheV2TrackEntry":
        # 方法内部不再直接操作外部列表,而是构造并返回 NamedTuple
        mask = req.extend_input_len >= mamba_cache_chunk_size
        track_index = req.mamba_ping_pong_track_buffer[
            req.mamba_next_track_idx
        ].item()
        ... # 计算 mamba_track_seqlen ...
        return _MambaRadixCacheV2TrackEntry(
            track_mask=mask,
            track_index=track_index,
            track_seqlen=mamba_track_seqlen,
        )

评论区精华

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

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

风险与影响

重构范围限定在单个私有方法及其调用处,变更逻辑等价,且 PR 作者即为合并者,风险低。但缺少对应的单元测试覆盖该私有方法的返回行为,若未来有他人修改该方法逻辑,可能因未理解返回值结构而引入 bug。

影响范围仅限于 python/glang/srt/managers/schedule_batch.pyScheduleBatch 类的两个方法(prepare_for_extend_mamba_radix_cache_v2_req_prepare_for_extend)。对外部模块无影响,属于局部重构。对用户透明,无功能变化。

缺少测试覆盖

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论