Prhub

#20858 [Bugfix] Fix effective_mamba_size over-allocation

原始 PR 作者 yunkchen 合并时间 2026-04-01 16:17 文件变更 1 提交数 7 评论 22 代码增减 +12 / -3

执行摘要

修复 HybridMambaDecodeReqToTokenPool 中 effective_mamba_size 计算错误,避免内存过度分配和 CUDA OOM。

根据PR body描述,部署混合Mamba模型(如Qwen3.5 MoE)在disaggregation decode模式下,当显式设置--max-mamba-cache-size后,HybridMambaDecodeReqToTokenPool会错误地将pre_alloc_size加到用户指定的mamba_size上,造成3倍内存过度分配,引发CUDA OOM错误,需要修复以正确管理内存分配。

建议精读此PR,重点关注设计决策:如何平衡用户指定参数和内部预分配需求,以及通过min函数和警告处理边界条件的实践。对于涉及内存池和调度的开发者,此变更提供了参数验证的参考。

讨论亮点

review中核心讨论包括:

  1. hzh0425询问修改pre_alloc_size的意图,担心影响PD池,yunkchen解释后移除了该修改以避免副作用。
  2. ShangmingCai和hzh0425讨论effective_mamba_size的计算逻辑,从简单赋值演进为使用min函数并添加警告,以确保池容量一致性,ShangmingCai还提议添加assert但最终采纳了警告方案。决策结论:不修改pre_alloc_size,用min限制effective_mamba_size并警告用户。

实现拆解

唯一修改的文件是python/sglang/srt/disaggregation/decode.py中HybridMambaDecodeReqToTokenPool类的__init__方法。关键改动点:将effective_mamba_size的计算逻辑从原来的(mamba_size if mamba_size is not None else size) + pre_alloc_size改为条件判断:如果mamba_size不为None,则effective_mamba_size = min(mamba_size, size + pre_alloc_size)并在mamba_size超过size + pre_alloc_size时记录警告;否则,effective_mamba_size = size + pre_alloc_size。移除了先前尝试修改pre_alloc_size的代码。

文件 模块 状态 重要度
python/sglang/srt/disaggregation/decode.py disaggregation/decode modified 7.0

关键符号

HybridMambaDecodeReqToTokenPool.__init__

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

评论区精华

pre_alloc_size 修改意图及其影响 设计

hzh0425 询问修改 pre_alloc_size 是否会影响 PD 池的请求到令牌池,yunkchen 解释原意是避免 GPU 内存浪费,但考虑到潜在副作用,最终移除了该修改。

结论:不修改 pre_alloc_size,仅调整 effective_mamba_size 计算逻辑。 · 已解决

effective_mamba_size 计算逻辑的正确性 正确性

ShangmingCai 确认变更后,与 hzh0425 讨论是否添加 assert 或使用 min 函数,yunkchen 采纳建议,从简单赋值改为 min(mamba_size, size + pre_alloc_size) 并添加警告。

结论:使用 min 函数限制 effective_mamba_size,并在超过时记录警告,以确保池容量一致性。 · 已解决

风险与影响

技术风险包括:

  1. 核心路径变更:修改了effective_mamba_size计算逻辑,可能影响其他配置场景或引入回归错误。
  2. 潜在兼容性问题:如果用户指定的mamba_size小于size + pre_alloc_size,池大小可能被截断,尽管添加了警告,但用户需注意此行为变化。
  3. 缺少直接测试覆盖:PR body中提及了基准测试和性能分析检查项,但材料未显示具体测试代码,可能依赖CI验证。

对用户:解决了部署混合Mamba模型时的内存过度分配问题,避免CUDA OOM错误,提高服务稳定性和资源利用率。对系统:减少不必要的GPU内存占用,优化内存管理,降低崩溃风险。对团队:作为重要bugfix,维护了代码质量,强调了参数验证和警告处理的设计模式。

核心路径变更 潜在兼容性问题

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论