Prhub

#22480 [Observability] Add pending token count to prefill log and get_load

原始 PR 作者 ch-wan 合并时间 2026-04-10 17:05 文件变更 3 提交数 3 评论 2 代码增减 +40 / -3

执行摘要

为长上下文预填充请求添加待处理令牌数监控指标,增强调度器可观测性。

根据PR body描述,当前引擎日志仅显示#queue-req和#running-req,对于长上下文请求(单个请求可能包含数十万令牌跨多个分块预填充)的负载理解不足。新增的#pending-token指标有助于:1)监控分块预填充进度;2)在处理长上下文请求时跨引擎负载均衡。

该PR值得精读,重点关注_get_num_pending_tokens()中chunk_deduct参数的设计,它巧妙处理了调度时间(prefix_indices未更新)和查询时间(prefix_indices已更新)的时间差问题,体现了对调度器内部状态同步的深刻理解。

讨论亮点

由于review_comments_count为0,没有公开的review讨论。从提交历史看,作者在第二个提交中清理了scheduler.py中关于prefix_indices和chunk_deduct的过时注释,表明在实现过程中对时间差处理逻辑进行了微调。

实现拆解

实现分为三个关键部分:1)数据结构扩展:在PrefillStats类(scheduler_metrics_mixin.py)添加num_pending_tokens字段,在GetLoadReqOutput类(io_struct.py)添加同名字段;2)核心计算逻辑:新增_get_num_pending_tokens()辅助函数,计算等待队列令牌总数加上当前分块请求剩余令牌数,通过chunk_deduct参数处理调度时间和查询时间的时间差;3)集成调用:在get_new_batch_prefill()中调度时快照num_pending_tokens到PrefillStats,在report_prefill_stats()中输出到日志,在get_load()中填充到返回结构。

文件 模块 状态 重要度
python/sglang/srt/observability/scheduler_metrics_mixin.py 调度器可观测性 modified 9.0
python/sglang/srt/managers/scheduler.py 调度器核心 modified 7.0
python/sglang/srt/managers/io_struct.py IO 结构 modified 5.0

关键符号

_get_num_pending_tokens() PrefillStats.from_adder() get_new_batch_prefill() report_prefill_stats() get_load()

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

评论区精华

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

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

风险与影响

风险较低:1)功能风险:新增指标计算逻辑正确性依赖chunk_deduct参数的正确传递,若参数计算错误可能导致指标不准确;2)性能风险:_get_num_pending_tokens()需遍历等待队列求和,在队列较长时可能有轻微开销,但PR body说明为轻量级计算;3)兼容性风险:修改了PrefillStats.from_adder()签名(新增可选参数),但调用方已适配,不影响现有功能。

影响范围:1)用户影响:为运维人员提供更细粒度的预填充进度监控,尤其有助于长上下文请求的调试和负载均衡决策;2)系统影响:新增指标仅用于观测,不改变模型输出或核心调度逻辑;3)团队影响:为后续负载均衡和调度优化提供数据基础。

时间差处理逻辑 轻量级遍历开销

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论