执行摘要
- 一句话:标记死代码字段并添加 TODO 注释
- 推荐动作:值得快速合并,因为它提前标记了指标失效的根因,便于后续有人修复合入时应置一个 setter。建议后续 PR 修复 regression(在
__init__ 或对应配置更新处添加赋值),并考虑为 sglang:utilization 补充单元测试。
功能与动机
PR body 指出 max_running_requests_under_SLO 在 regression (#22713) 后失去了 setter,导致两个读取点始终回退到 None,进而使 sglang:utilization 指标卡在 0。当前提交仅添加注释,不修改行为,以避免在一次 commit 中混入机械标记和功能性修复。
实现拆解
python/sglang/srt/managers/scheduler.py:在 init_model_worker 方法中 emit_constants 调用处,为 max_running_requests_under_SLO 参数添加了 # TODO 注释,说明该属性没有 setter,属于死链。
python/sglang/srt/observability/scheduler_metrics_mixin.py:在 calculate_utilization 方法的 getattr 调用前添加了更详细的 # TODO 注释,指出这一死链导致 sglang:utilization 指标永远为 0,并注明 regression 来源为 #22713。
- 两个改动各行只有一行注释新增,
+1/-0,完全不涉及逻辑变更,属于纯机械的标记性提交。
关键文件:
python/sglang/srt/managers/scheduler.py(模块 调度器;类别 source;类型 core-logic): 标记了 metrics collector 中 emit_constants 调用的死属性参数
python/sglang/srt/observability/scheduler_metrics_mixin.py(模块 可观测性;类别 source;类型 core-logic): 标记了 utilization 计算中读入的死属性,并指明 sglang:utilization 卡 0 的根因
关键符号:init_model_worker, calculate_utilization
关键源码片段
python/sglang/srt/managers/scheduler.py
标记了 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
标记了 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 没有 reviewer 评论,只有一个来自 gemini-code-assist[bot] 的 quota 超限提示,无实质讨论。
风险与影响
- 风险:本 PR 只添加注释,无任何运行时行为变更,风险极低。真正的风险在于后续修复可能被遗忘。
- 影响:对用户无直接影响,对维护者有正面影响:通过注释清晰标记了死代码的坐标和根因,降低了未来维护和修复的心智负担。
- 风险标记:暂无
关联脉络
- PR #22713 未知: PR body 指出 #22713 引入了 regression,导致 max_running_requests_under_SLO 失去了 setter。本 PR 的注释正是为后续修复该 regression 做准备。
参与讨论