Prhub

#21499 Add SWA support for runtime busy memory check

原始 PR 作者 hnyls2002 合并时间 2026-04-12 15:39 文件变更 1 提交数 4 评论 5 代码增减 +44 / -26

执行摘要

为混合 SWA 模型添加运行时繁忙内存检查支持,修复 NotImplementedError。

根据PR body描述,此前self_check_during_busy调用tree_cache.protected_size(),在SWARadixCache上会抛出NotImplementedError。因此需要为混合SWA模型(具有分离的完整和SWA KV缓存池)添加相应的繁忙内存检查支持,并处理流式会话尚未支持的情况。

该PR值得内存管理和调度器模块的工程师精读,特别是关注_get_total_uncached_sizes中双池未缓存令牌的计算逻辑,以及_self_check_during_busy_swa中双池守恒不变性的设计。对于使用SWA模型的团队,建议验证新检查在各自场景下的行为。

讨论亮点

由于review评论为空,没有公开的讨论记录。从提交历史看,作者在实现过程中进行了多次简化重构:最初添加SWA繁忙检查,然后合并未缓存大小辅助函数为单一的_get_total_uncached_sizes,最后简化了批次身份检查逻辑。

实现拆解

主要修改集中在scheduler_runtime_checker_mixin.py文件中:1)新增_get_total_uncached_sizes()方法,统一计算完整池和SWA池的未缓存令牌总数,替代原有的_get_batch_uncached_size_get_total_uncached_size;2)新增_self_check_during_busy_swa()方法,为SWA模型实现双池守恒不变性检查;3)从现有逻辑中提取_self_check_during_busy_default()作为默认检查;4)在self_check_during_busy()中添加对SessionAwareCache的早期返回。此外,在两个测试文件中启用了严格内存检查环境变量。

文件 模块 状态 重要度
python/sglang/srt/managers/scheduler_runtime_checker_mixin.py scheduler modified 9.0

关键符号

_get_total_uncached_sizes _self_check_during_busy_swa _self_check_during_busy_default self_check_during_busy

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

评论区精华

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

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

风险与影响

1)回归风险:修改了核心内存检查逻辑,可能影响现有非SWA模型的繁忙检查正确性,但作者通过保留提取的默认检查方法并运行相关测试(如test_radix_attention.pytest_retract_decode.py)来缓解。2)性能影响:新增的双池计算可能增加少量开销,但仅在繁忙检查启用时触发。3)兼容性:当流式会话启用时跳过检查,可能掩盖潜在内存问题,但这是已知限制。4)测试覆盖:虽然启用了两个SWA相关测试的环境变量,但未看到针对新检查逻辑的专项测试。

对用户:使混合SWA模型能够启用严格内存检查,有助于在高压场景下及早发现内存泄漏或溢出问题,提升系统稳定性。对系统:扩展了内存检查机制对新兴SWA架构的支持,保持了内存安全 invariant 的完整性。对团队:代码结构更清晰,将SWA特定逻辑分离,便于后续维护和扩展。

核心路径变更 缺少专项测试

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论