Prhub

#22516 fix(server): clamp piecewise_cuda_graph_max_tokens to context_length

原始 PR 作者 janbernloehr 合并时间 2026-06-09 10:43 文件变更 1 提交数 1 评论 12 代码增减 +8 / -0

执行摘要

修复 PCG warmup 因 context_length 过小导致的崩溃

修复 Issue #21112:PCG warmup 在 H100 (FA3 后端) 上因 context_length 小于默认 PCG token 数导致非法内存访问,服务器启动时崩溃。

这是针对关键启动崩溃的最小化修复,值得精读以理解 PCG 配置与 context-length 的耦合。建议在 #30206 落地后确认最终方案。

讨论亮点
  1. Gemini 代码助手提议重构:建议将 max_total_tokens 和 Llama-2 限制也移出 if None 块,以统一处理用户显式传递的值,但作者保留最小改动。
  2. nvpohanh 提出潜在问题:认为 clamp 应乘以 max_running_requests,因为 PCG token 数可能跨多个请求。已提交 PR #30206 进行二次修复。

实现拆解

  1. 定位修改点:在 server_args.py_handle_gpu_memory_settings 方法中,if self.piecewise_cuda_graph_max_tokens is None: 块之后,新增一个条件判断。
  2. 新增 clamp 逻辑:如果 self.context_length 不为 None,则将 self.piecewise_cuda_graph_max_tokens 限制为 min(self.piecewise_cuda_graph_max_tokens, self.context_length)
  3. 保持一致性:该 clamp 放在原有 if None 块外部,确保即使 piecewise_cuda_graph_max_tokens 由用户显式指定,也受 context_length 约束。
  4. 无测试变更:本次修改仅 8 行源码,未新增测试。
文件 模块 状态 重要度
python/sglang/srt/server_args.py 服务器配置 modified 5.84

关键符号

_handle_gpu_memory_settings

关键源码片段

python/sglang/srt/server_args.py core-logic

核心配置文件,新增 clamp 逻辑防止 PCG warmup 越界崩溃。

# 在 _handle_gpu_memory_settings 方法中,原有 self.piecewise_cuda_graph_max_tokens 默认值设置之后# 新增 clamp 逻辑:若显式设置了 context_length,则将 PCG max tokens 限制为其值,
# 防止 warmup 编译超出 KV cache 容量的图导致非法内存访问 (#21112)
if self.context_length is not None:
    self.piecewise_cuda_graph_max_tokens = min(
        self.piecewise_cuda_graph_max_tokens, self.context_length
    )

评论区精华

clamp 逻辑需乘以 max_running_requests 正确性

nvpohanh 评论:clamp 应为 min(..., context_length * max_running_requests),因为 PCG 可能同时处理多个请求。

结论:nvpohanh 提交了 PR #30206 进行二次修复,当前 PR 仍被批准合并但后续需处理。 · resolved_in_followup

将现有 clamp 移出 if None 块的一致性建议 设计

Gemini code-assist 建议将 max_total_tokens 和 Llama-2 限制也移出 if None 块以统一处理用户显式传递的值。

结论:作者选择保持最小改动,未采纳。 · dismissed

风险与影响

  1. 修正可能不足:nvpohanh 指出现有 clamp 未考虑多请求场景,可能导致 PCG token 数仍然过大,但已通过后续 PR 修复。
  2. 回归风险低:改动仅 8 行 clamp 逻辑,且仅在 context_length 显式设置时生效,不影响默认行为。
  3. 无测试覆盖:缺少单元测试,后续修复应补充。
  1. 用户影响:修复了使用小 context-length + PCG 时的启动崩溃,用户不再需要 --disable-piecewise-cuda-graph 变通方案。
  2. 系统影响:无性能影响,仅约束 warmup 阶段的最大 token 数。
  3. 团队影响:后续 PR #30206 将进一步完善,需关注合并。
缺少测试覆盖 后续修复未合并

关联 Issue

#21112 [Bug] Piecewise CUDA Graph crashes with illegal memory access on H100 (FA3 backend) during warmup_compile

完整报告

参与讨论