Prhub

#22577 Add hisparse staging + decode offload guards to is_fully_idle()

原始 PR 作者 hnyls2002 合并时间 2026-04-11 15:12 文件变更 1 提交数 1 评论 3 代码增减 +6 / -0

执行摘要

修复调度器空闲检测逻辑,增加 HiSparse 和 KV 卸载的临时状态检查。

PR body明确指出:is_fully_idle()函数在HiSparse(#20343)和解码KV卸载功能添加之前编写,这些功能将空闲检查放在self_check_during_idle或各自的事件循环中,但从未传播到is_fully_idle()。这意味着is_fully_idle()的其他使用者(flush_cache、hicache attach/detach、release_memory_occupation)可能在内存池处于临时状态时执行,存在破坏性操作风险。

建议相关模块的工程师精读此PR,了解调度器空闲检测的完整状态机。特别关注is_fully_idle()函数中各种异步操作的检查逻辑,这对理解系统在复杂状态下的行为很重要。同时建议检查相关测试是否充分覆盖新增的状态检查。

讨论亮点

Review讨论较少,只有ispobock的批准评论,没有具体技术讨论。PR body中作者详细说明了动机和实现思路,强调遵循现有HiCache模式。测试计划包括运行test_scheduler_pause_generation.py测试和依赖现有CI覆盖。

实现拆解

scheduler.py文件的is_fully_idle()函数中,在if not for_health_check:分支下添加了两个检查:

  1. 如果存在decode_offload_manager,检查ongoing_offload队列是否为空;
  2. 如果启用HiSparse,检查hisparse_coordinator是否有进行中的暂存操作。这两个检查遵循现有的HiCache异步操作检查模式。
文件 模块 状态 重要度
python/sglang/srt/managers/scheduler.py scheduler modified 8.0

关键符号

is_fully_idle

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

评论区精华

空闲检测逻辑完整性 正确性

PR body 详细说明了原有逻辑未考虑 HiSparse 和 decode offload 的临时状态,可能导致破坏性操作在错误时机执行。

结论:添加了 `decode_offload_manager.ongoing_offload` 和 `hisparse_coordinator.has_ongoing_staging()` 检查,遵循现有 HiCache 模式。 · 已解决

风险与影响

风险较低:

  1. 变更范围小(仅6行代码),逻辑清晰;
  2. 遵循现有HiCache检查模式,保持一致性;
  3. 健康检查路径不受影响(for_health_check=True时跳过新增检查);
  4. 潜在风险是新增检查可能引入误判,导致is_fully_idle()返回false positive,但考虑到这些检查针对的是已知的临时状态,这种风险较小。

影响范围中等:

  1. 直接影响调度器的空闲检测逻辑,影响所有依赖is_fully_idle()的操作(flush_cache、hicache attach/detach、release_memory_occupation);
  2. 确保在HiSparse暂存和KV卸载的临时状态下不会执行破坏性操作,提升系统稳定性;
  3. 对用户透明,但可能影响系统在特定状态下的行为;
  4. 需要确保测试覆盖充分,特别是HiSparse和decode offload的相关场景。
核心路径变更 状态机完整性

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论