Prhub

#22726 feat(metrics): expose raw KV cache pool token counts as prometheus gauges

原始 PR 作者 ishandhanani 合并时间 2026-04-14 09:30 文件变更 2 提交数 1 评论 11 代码增减 +28 / -0

执行摘要

新增三个 Prometheus 指标,暴露 KV 缓存池原始令牌计数,提升内存使用可见性。

PR body明确指出,现有sglang:token_usage指标仅报告非可回收令牌(活跃请求+固定会话),排除了可回收的radix缓存节点,导致缓存池看起来比实际更空。这在代理式工作负载中尤为关键,因为子代理KV在完成后仍滞留在radix树中——token_usage可能显示约2%的使用率,而物理GPU内存实际消耗了72%。暴露原始计数让运维人员能够根据需要推导任何比率。

该PR值得快速浏览,特别是对于关注系统监控和内存管理的工程师。虽然实现简单,但设计决策值得注意:

  1. 选择暴露原始计数而非预计算比率,提供了最大灵活性。
  2. 指标命名清晰,文档字符串明确,便于后续使用。
  3. 可作为学习如何向现有监控体系添加新指标的参考案例。
讨论亮点

由于review评论为空,未发现具体的技术讨论或争议点。PR由作者自行合并,表明变更可能较为直接或已通过其他渠道达成共识。

实现拆解

实现分为两个文件:

  1. metrics_collector.py:在SchedulerStats数据类中新增三个整数字段kv_available_tokenskv_evictable_tokenskv_used_tokens;在SchedulerMetricsCollector类中创建对应的Prometheus Gauge指标;在log_stats()方法中添加日志记录逻辑。
  2. scheduler_runtime_checker_mixin.py:在update_scheduler_stats()方法中,将self.full_available_sizeself.full_evictable_sizeself.full_num_used三个内部属性值填充到传入的stats对象的相应字段中,完成数据传递。
文件 模块 状态 重要度
python/sglang/srt/observability/metrics_collector.py observability modified 8.0
python/sglang/srt/managers/scheduler_runtime_checker_mixin.py scheduling modified 6.0

关键符号

SchedulerStats.__init__ SchedulerMetricsCollector.__init__ SchedulerMetricsCollector.log_stats update_scheduler_stats

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

评论区精华

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

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

风险与影响

风险较低,主要涉及:

  1. 指标命名与现有体系的一致性:新增指标前缀为sglang:,与现有指标(如sglang:token_usage)风格一致,无命名冲突风险。
  2. 数据准确性:依赖full_available_sizefull_evictable_sizefull_num_used等内部属性的正确性,若这些属性计算有误,将导致指标数据失真。
  3. 性能影响:新增三个Gauge指标的更新可能引入微小开销,但考虑到指标收集频率通常不高,影响可忽略。
  4. 兼容性:纯新增字段和指标,不影响现有功能或API,无向后兼容性问题。

影响范围:

  1. 对用户:运维和SRE团队获得更细粒度的KV缓存池监控能力,可准确诊断内存使用问题,尤其在代理式工作负载中。
  2. 对系统:新增指标将出现在Prometheus暴露的端点中,可能增加少量时间序列数据存储开销。
  3. 对团队:代码变更集中在可观测性模块,对核心推理路径无影响,易于理解和维护。
依赖内部属性准确性 新增监控开销

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论