Prhub

#23978 Add engine_type label to tokenizer manager metrics

原始 PR 作者 merrymercy 合并时间 2026-04-29 10:52 文件变更 3 提交数 1 评论 2 代码增减 +16 / -9

执行摘要

为 Tokenizer 指标添加 engine_type 标签

Tokenizer manager metrics 缺少 engine_type 标签,导致无法在监控面板中按 prefill/decode/unified 角色过滤。PR body 明确指出此问题并通过添加标签解决。

值得精读,展示了如何通过提取公共方法消除重复代码并保持配置一致性,适合作为代码复用和可观测性增强的参考。

讨论亮点

无 review 讨论。

实现拆解

  1. DisaggregationMode 枚举中新增 to_engine_type() 静态方法,将 if/else 逻辑封装为单一调用点。
  2. scheduler_metrics_mixin.py 中将原有的内联 if/else 替换为对 DisaggregationMode.to_engine_type() 的调用,减少代码重复。
  3. tokenizer_manager.pyinit_metric_collector_watchdog 中计算 engine_type 并加入 labels 字典,使 Tokenizer 指标带上该标签。
文件 模块 状态 重要度
python/sglang/srt/disaggregation/utils.py 调度器 modified 6.07
python/sglang/srt/observability/scheduler_metrics_mixin.py 调度器 modified 5.75
python/sglang/srt/managers/tokenizer_manager.py 管理器 modified 5.19

关键符号

DisaggregationMode.to_engine_type

关键源码片段

python/sglang/srt/disaggregation/utils.py core-logic

新增了 DisaggregationMode.to_engine_type() 静态方法,将分散的 engine_type 计算逻辑统一集中管理。

class DisaggregationMode(Enum):
    NULL = "null"
    PREFILL = "prefill"
    DECODE = "decode"
​
    @staticmethod
    def to_engine_type(mode: str) -> str:
        # 将 disaggregation_mode 字符串转换为 engine_type 标签值
        if mode == DisaggregationMode.PREFILL.value:
            return "prefill"
        elif mode == DisaggregationMode.DECODE.value:
            return "decode"
        # 非 PD 场景默认 unified
        return "unified"

评论区精华

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

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

风险与影响

风险极低。仅修改标签生成逻辑,不改变指标数值或上报路径。但需注意 tokenizer_metrics_allowed_custom_labelsextra_metric_labels 的交互,避免标签覆盖问题。另外,fake_bootstrap_room_counter 被误删(可能与本 PR 无关),已通过 diff 确认,但未在 PR 中说明。

影响范围小,仅涉及可观测性模块。对最终用户无影响;对运维人员而言,Tokenizer 指标现在可以通过 engine_type 过滤,提升监控灵活性。

代码删除未说明

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论