Prhub

#22331 [HiSparse] Clarify decode token usage logs

sgl-project/sglang · 作者 huangtingwei9988 · 合并时间 2026-04-14 09:03

分析状态 已生成
文件变更 2提交数 4 · 评论 10
代码增减 +54 / -0
hisparse run-ci observability

执行摘要

澄清 HiSparse 解码令牌使用日志,区分 GPU 和 CPU 令牌统计。

PR body中展示了before和after的日志对比:before日志中'#token'和'token usage'未区分设备,after日志新增了'#gpu-token'、'gpu token usage'、'#cpu-token'、'cpu token usage',从而在HiSparse环境下提供更精确的资源使用洞察,解决日志信息不清晰的问题。

对于关注HiSparse性能监控的开发者,值得快速浏览实现细节,特别是get_token_stats和_get_hisparse_token_info方法的统计逻辑;对于一般用户,了解日志格式变化即可,无需深入代码。

讨论亮点

review中仅有一个来自hzh0425的评论,建议将字段重命名为host_tokens_usage(具体评论为'can we rename to host_tokens_usage'),但根据提交历史和最终代码,字段已命名为host_tokens和host_token_usage,表明该建议可能被采纳或讨论后达成一致;没有其他争议点或深度讨论。

实现拆解

实现分为两个关键文件:在python/sglang/srt/managers/hisparse_coordinator.py中新增HiSparseTokenStats NamedTuple(包含device_tokens、device_token_usage、host_tokens、host_token_usage字段)和get_token_stats方法,用于计算设备(GPU)和主机(CPU)的令牌使用量和利用率;在python/sglang/srt/managers/scheduler_runtime_checker_mixin.py中扩展PoolStats类添加is_hisparse、hisparse_device_tokens、hisparse_device_token_usage、hisparse_host_tokens、hisparse_host_token_usage字段,并修改_get_hisparse_token_info方法和get_decode_usage_msg_parts方法,以在日志中输出细分统计。

文件 模块 状态 重要度
python/sglang/srt/managers/hisparse_coordinator.py hisparse modified 6.0
python/sglang/srt/managers/scheduler_runtime_checker_mixin.py scheduler modified 5.0

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

关键符号

get_token_stats _get_hisparse_token_info

评论区精华

字段命名建议 style

hzh0425 建议重命名字段,具体评论为 'can we rename to host_tokens_usage',指向 hisparse_coordinator.py 中的 cpu_tokens 字段。

结论:最终代码使用了 host_tokens 和 host_token_usage,表明建议被采纳或调整,命名更一致。 · 已解决

风险与影响

风险较低:日志格式变更(从'#token'变为'#gpu-token'和'#cpu-token')可能影响依赖日志解析的监控工具,需确保向后兼容或更新相关工具;新增统计计算(如get_token_stats中的除法运算)可能引入轻微性能开销,但仅限于日志记录路径,对核心性能影响极小;代码变更集中在两个文件,回归风险可控,但需测试覆盖以确保逻辑正确性。

对用户:日志输出更详细,有助于调试和优化HiSparse配置,提升运维体验;对系统:无功能变更,仅增强可观测性,不影响推理或调度核心逻辑;对团队:提升了HiSparse模块的监控能力,便于性能分析和资源管理。

日志格式变更 轻微性能开销

关联 Issue

未识别关联 Issue

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

完整报告

执行摘要

本PR澄清了HiSparse稀疏注意力场景下的解码令牌使用日志,将原有单一的令牌统计细分为GPU令牌和CPU令牌的详细使用情况,增强了资源监控的清晰度;变更涉及hisparse_coordinator和scheduler_runtime_checker_mixin两个模块,通过新增统计数据和日志逻辑实现,风险较低,适合关注HiSparse性能监控的开发者参考。

功能与动机

PR的动机源于HiSparse环境中日志信息不够清晰的问题。在before日志中,仅显示#token: 20800, token usage: 0.29,无法区分GPU和CPU的令牌使用;after日志新增了#gpu-token: 20800, gpu token usage: 0.29, #cpu-token: 41422, cpu token usage: 0.29,从而提供更精确的资源利用率洞察,帮助用户更好地调试和优化HiSparse配置。

实现拆解

实现主要包括两个文件的关键改动:

  • python/sglang/srt/managers/hisparse_coordinator.py
    • 新增HiSparseTokenStats NamedTuple,包含device_tokensdevice_token_usagehost_tokenshost_token_usage字段。
    • 新增get_token_stats方法,通过分配器计算设备(GPU)和主机(CPU)的令牌使用量和利用率。
      python def get_token_stats(self) -> HiSparseTokenStats: device_allocator = self.token_to_kv_pool_allocator.hisparse_attn_allocator device_capacity = device_allocator.size device_tokens = device_capacity - device_allocator.available_size() host_capacity = self.mem_pool_host.size host_tokens = host_capacity - self.mem_pool_host.available_size() return HiSparseTokenStats( device_tokens=device_tokens, device_token_usage=(device_tokens / device_capacity if device_capacity > 0 else 0.0), host_tokens=host_tokens, host_token_usage=(host_tokens / host_capacity if host_capacity > 0 else 0.0), )
  • python/sglang/srt/managers/scheduler_runtime_checker_mixin.py
    • 扩展PoolStats类,添加is_hisparsehisparse_device_tokenshisparse_device_token_usagehisparse_host_tokenshisparse_host_token_usage字段。
    • 新增_get_hisparse_token_info方法,调用hisparse_coordinator.get_token_stats()并更新PoolStats
    • 修改get_decode_usage_msg_parts方法,在HiSparse启用时输出细分统计到日志。

评论区精华

review讨论较少,核心点是字段命名建议:

  • hzh0425评论:"can we rename to host_tokens_usage",针对cpu_tokens字段。
  • 最终代码已使用host_tokenshost_token_usage,表明建议被采纳,命名更统一,无其他争议。

风险与影响

  • 风险:日志格式变更可能破坏依赖旧格式的监控工具,需协调更新;新增统计计算引入轻微性能开销(除法运算),但仅在日志路径,影响可忽略;代码改动集中,回归风险低,但建议补充测试确保正确性。
  • 影响:用户获得更详细的HiSparse资源使用日志,便于性能分析;系统可观测性提升,无功能副作用;团队受益于增强的监控能力。

关联脉络

从同仓库历史PR看,暂无直接相关的HiSparse PR;但PR 18016(新增HiCache存储后端)涉及类似缓存和监控主题,可间接参考架构模式。本PR独立于其他功能演进,专注于HiSparse模块的日志改进。

参与讨论