# PR #20978 完整报告

- 仓库：`sgl-project/sglang`
- 标题：perf: pad max-num-requests in decode cuda graph for higher coverage
- 合并时间：2026-03-23 08:06
- 原文链接：http://prhub.com.cn/sgl-project/sglang/pull/20978

---

## 执行摘要
本 PR 通过将 max-num-requests padding 到 mul-base 倍数，避免在 CUDA graph 捕获过程中被过滤，从而在长上下文、小并发场景下提升性能覆盖范围，优化图形执行效率。

## 功能与动机
解决在长上下文、小并发情况下，由于 mul-base 过滤导致最大请求数未被 CUDA graph 捕获而引发的性能显著下降问题。PR body 中明确表述：'For long-context scenarios with small concurrecy, the `mul-base` filtering could lead to the `max-num-requests` is not captured. leading to substantial perf drop.'，旨在通过 padding 策略确保最大请求数被正确捕获，防止性能损失。

## 实现拆解
修改位于 `python/sglang/srt/model_executor/cuda_graph_runner.py` 的 `get_batch_sizes_to_capture` 函数，关键改动包括：
- 计算 `num_max_requests` 为 `model_runner.req_to_token_pool.size`。
- 将 `num_max_requests` padding 到 `mul_base` 的倍数：`num_max_requests = (num_max_requests + mul_base - 1) // mul_base * mul_base`。
- 检查 `max(capture_bs) > num_max_requests`，如果是，则将 `num_max_requests` 添加到 `capture_bs` 中。
- 添加 assert 确保 `capture_bs` 非空且为正数：`assert len(capture_bs) > 0 and capture_bs[0] > 0, f"{capture_bs=}"`。

## 评论区精华
review 讨论非常有限，只有审核者 `hnyls2002` 的 approval 评论：'LGTM'，没有深入讨论或争议点，因此缺乏技术洞察或设计权衡的交流。

## 风险与影响
风险包括：padding 逻辑若错误计算可能导致 CUDA graph 捕获不准确，影响性能优化；assert 添加可能干扰错误处理；由于 PR body 中未明确测试覆盖情况，可能存在回归风险。影响方面，预计在长上下文、小并发场景下提升推理性能，优化系统效率，对用户和开发者均有积极意义。

## 关联脉络
在当前仓库的近期历史 PR 中，未见直接相关的 PR。不过，PR #20697 修复了 VRAM 泄漏问题，也涉及性能优化，可能与本 PR 共同提升系统整体效率，但无直接代码或讨论关联。