Prhub

#25441 Annotate dead max_running_requests_under_SLO

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

执行摘要

标记死代码字段并添加 TODO 注释

PR body 指出 max_running_requests_under_SLO 在 regression (#22713) 后失去了 setter,导致两个读取点始终回退到 None,进而使 sglang:utilization 指标卡在 0。当前提交仅添加注释,不修改行为,以避免在一次 commit 中混入机械标记和功能性修复。

值得快速合并,因为它提前标记了指标失效的根因,便于后续有人修复合入时应置一个 setter。建议后续 PR 修复 regression(在 __init__ 或对应配置更新处添加赋值),并考虑为 sglang:utilization 补充单元测试。

讨论亮点

该 PR 没有 reviewer 评论,只有一个来自 gemini-code-assist[bot] 的 quota 超限提示,无实质讨论。

实现拆解

  1. python/sglang/srt/managers/scheduler.py:在 init_model_worker 方法中 emit_constants 调用处,为 max_running_requests_under_SLO 参数添加了 # TODO 注释,说明该属性没有 setter,属于死链。
  2. python/sglang/srt/observability/scheduler_metrics_mixin.py:在 calculate_utilization 方法的 getattr 调用前添加了更详细的 # TODO 注释,指出这一死链导致 sglang:utilization 指标永远为 0,并注明 regression 来源为 #22713。
  3. 两个改动各行只有一行注释新增,+1/-0,完全不涉及逻辑变更,属于纯机械的标记性提交。
文件 模块 状态 重要度
python/sglang/srt/managers/scheduler.py 调度器 modified 3.91
python/sglang/srt/observability/scheduler_metrics_mixin.py 可观测性 modified 3.91

关键符号

init_model_worker calculate_utilization

关键源码片段

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

标记了 metrics collector 中 emit_constants 调用的死属性参数

def init_model_worker(self):
    # ... 省略其他初始化代码 ...
    if self.enable_metrics:
        self.metrics_collector.emit_constants(
            max_total_num_tokens=self.max_total_num_tokens,
            # TODO: max_running_requests_under_SLO 没有 setter——死链。
            max_running_requests_under_SLO=getattr(
                self, "max_running_requests_under_SLO", None
            ),
            engine_startup_time=0.0,
            engine_load_weights_time=0.0,
            page_size=self.page_size,
            num_pages=self.max_total_num_tokens // self.page_size,
            context_len=self.model_config.context_len,
            startup_available_gpu_memory_gb=avail_mem,
        )
python/sglang/srt/observability/scheduler_metrics_mixin.py core-logic

标记了 utilization 计算中读入的死属性,并指明 sglang:utilization 卡 0 的根因

def calculate_utilization(self: Scheduler):
    if self.disaggregation_mode == DisaggregationMode.PREFILL:
        self.stats.utilization = -1
    else:
        # TODO: max_running_requests_under_SLO 没有 setter——
        # sglang:utilization 卡在 0(由 #22713 引入)。
        max_under_slo = getattr(self, "max_running_requests_under_SLO", None)
        if max_under_slo is not None and max_under_slo > 0:
            self.stats.utilization = max(
                self.stats.num_running_reqs.total / max_under_slo,
                self.stats.token_usage / 0.9,
            )

评论区精华

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

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

风险与影响

本 PR 只添加注释,无任何运行时行为变更,风险极低。真正的风险在于后续修复可能被遗忘。

对用户无直接影响,对维护者有正面影响:通过注释清晰标记了死代码的坐标和根因,降低了未来维护和修复的心智负担。

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论