Prhub

#21501 Release mm features on session close and support multiple /rerun-ut specs

sgl-project/sglang · 作者 hnyls2002 · 合并时间 2026-03-27 09:31

分析状态 已生成
文件变更 5提交数 2 · 评论 4
代码增减 +139 / -94
bugfix ci scheduling

执行摘要

修复会话关闭时多模态特征的内存泄漏,并扩展 /rerun-ut 命令支持多个测试规格。

根据PR body,会话请求(session reqs)跳过正常的清理路径(scheduler和output_processor),导致多模态特征张量在GPU内存中泄漏,需要修复。此外,为简化CI流程,需要支持在单个评论中指定多个测试规格运行/rerun-ut命令,如示例“/rerun-ut test_a.py test_b.py test_c.py”。

建议重点阅读session_controller.py中的_close()方法,理解会话内存清理的设计决策;CI变更可快速浏览,了解如何扩展slash命令处理多个参数。对于工程师,关注多模态特征生命周期管理的最佳实践。

讨论亮点

无review评论,变更由作者直接合并,未经过外部审查讨论。

实现拆解

实现分为两个模块:

  1. 多模态特征清理:在schedule_batch.py的MultimodalInputs类中新增release_features()方法,统一特征释放逻辑;在session_controller.py的_close()方法中调用该方法,确保会话关闭时释放内存;在scheduler.py和scheduler_output_processor_mixin.py中替换内联清理代码,使用统一方法。同时,在session_controller.py中添加BOS偏移调整的防御性clamp和警告,处理边缘情况。
  2. CI命令增强:重构scripts/ci/utils/slash_command_handler.py,将handle_rerun_ut拆分为支持多个测试规格的分发逻辑,并整合工作流链接到单个评论中。
文件 模块 状态 重要度
python/sglang/srt/managers/schedule_batch.py scheduling modified 6.0
python/sglang/srt/managers/session_controller.py session management modified 7.0
scripts/ci/utils/slash_command_handler.py CI infrastructure modified 4.0

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

关键符号

MultimodalInputs.release_features session_controller._close _resolve_and_dispatch_ut

评论区精华

无 review 讨论 other

PR 无 review 评论,变更由作者直接合并,未经过外部审查。

结论:无争议,直接实施。 · 已解决

风险与影响

技术风险包括:

  • 内存释放不完整:session_controller.py中的release_features()调用可能遗漏某些多模态输入实例,或未正确处理嵌套结构,导致残留泄漏。
  • 边界逻辑错误:BOS偏移调整的防御性clamp(max(0, s - 1))可能引入语义偏差,影响多模态输入的位置处理。
  • CI回归:slash_command_handler.py的重构可能破坏现有/rerun-ut命令的单规格功能,或引入并发问题(如与PR #21495已修复的重复URL问题)。
  • 测试覆盖不足:PR body提到依赖现有测试TestSessionControlVision,但未明确是否覆盖所有边缘场景。

影响范围:

  • 对用户:透明修复GPU内存泄漏,提升系统稳定性,尤其是在长时间会话场景下;无API变更,不影响直接使用。
  • 对系统:减少内存占用,避免潜在OOM,优化资源利用率。
  • 对团队:/rerun-ut命令的增强提高CI测试灵活性,支持批量运行,加速开发反馈循环;但需注意CI基础设施的维护成本。
内存管理风险 核心路径变更

关联 Issue

未识别关联 Issue

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

完整报告

执行摘要

本PR修复了会话关闭时多模态特征未释放导致的GPU内存泄漏问题,通过统一清理模式并扩展CI的/rerun-ut命令支持多个测试规格。变更直接影响系统内存管理和CI效率,属于重要bugfix,建议关注session_controller.py中的内存清理逻辑。

功能与动机

PR旨在解决两个问题:首先,会话请求(session reqs)跳过正常清理路径,导致多模态特征张量在GPU内存中泄漏,这是#21269的后续跟进;其次,改进CI命令,使/rerun-ut能够一次性处理多个测试规格,如/rerun-ut test_a.py test_b.py,以提升测试流程的灵活性。

实现拆解

实现分为两部分:

  1. 多模态特征清理
    • MultimodalInputs类(schedule_batch.py)中添加release_features()方法,遍历mm_items并将feature设为None,统一释放GPU内存。
    • session_controller.py_close()方法中,会话关闭时调用release_features(),确保会话相关特征被释放;同时添加BOS偏移调整的防御性clamp和警告。
    • scheduler.pyscheduler_output_processor_mixin.py中,用release_features()替换原有的内联清理代码,减少重复逻辑。
  2. CI命令增强
    • 重构slash_command_handler.py,将handle_rerun_ut拆分为_resolve_and_dispatch_ut,支持解析多个测试规格并分发工作流,最后整合结果到单个评论中。

评论区精华

无review评论,变更由作者直接合并,未经过外部技术讨论或争议。

风险与影响

风险

  • 内存释放可能不完整,例如在session_controller.py中通过id(mm)去重,若多模态输入结构复杂,可能导致遗漏释放。
  • BOS偏移调整的clamp逻辑(max(0, s - 1))可能引入位置计算错误,影响多模态输入的语义正确性。
  • CI重构可能引入回归,如并发处理或权限检查漏洞,需依赖现有测试覆盖。
    影响

  • 对系统:显著减少GPU内存泄漏风险,提升长时间会话的稳定性。

  • 对团队:/rerun-ut命令的增强简化测试流程,但需确保CI脚本的向后兼容性。

关联脉络

本PR是#21269的直接后续,延续了多模态输入会话修复的工作线;同时,与#21495相关,后者修复了/rerun-ut的并发问题,显示CI基础设施的持续演进。结合近期PR如#21490(flush_cache重构),可见团队在调度和内存管理方面的优化趋势。

参与讨论