执行摘要
- 一句话:修复动态分块profiling在GLM-5模型上的崩溃
- 推荐动作:建议合并,该修复精准定位了profiling路径中缺失的标志初始化问题,改动极小且正确性明确。
功能与动机
Issue #23057报告:在GLM-5等使用DeepEP的模型上,--enable-dynamic-chunking导致profiling崩溃,原因为profiling路径绕过prepare_mlp_sync_batch,未设置_is_extend_in_batch。该错误还引发KV cache泄漏和NCCL超时。
实现拆解
- 添加导入:在
scheduler_pp_mixin.py中导入set_is_extend_in_batch(来自sglang.srt.layers.dp_attention)。
- 显式设置标志:在
profile_and_init_predictor方法的profiling循环中,在调用model_runner.forward()之前,添加set_is_extend_in_batch(batch.forward_mode.is_extend()),确保在forward时该标志已正确初始化。
- 无其他文件变更:仅修改一个文件,新增3行代码。
关键文件:
python/sglang/srt/managers/scheduler_pp_mixin.py(模块 调度器;类别 source;类型 core-logic;符号 profile_and_init_predictor): 核心调度器,包含动态分块profiling逻辑。修复了在此处profiling循环中缺失的_is_extend_in_batch设置。
关键符号:profile_and_init_predictor
关键源码片段
python/sglang/srt/managers/scheduler_pp_mixin.py
核心调度器,包含动态分块profiling逻辑。修复了在此处profiling循环中缺失的_is_extend_in_batch设置。
# python/sglang/srt/managers/scheduler_pp_mixin.py (modified)
# 在 profile_and_init_predictor 方法的 profiling 循环中,添加标志设置
# 导入 set_is_extend_in_batch(已添加)
from sglang.srt.layers.dp_attention import (
get_attention_dp_rank,
get_attention_dp_size,
is_dp_attention_enabled,
set_is_extend_in_batch, # 新增导入
)
# ... 在循环内部,forward 之前
forward_batch = ForwardBatch.init_new(model_worker_batch, model_runner)
set_is_extend_in_batch(batch.forward_mode.is_extend()) # 新增:确保标志正确设置
_ = model_runner.forward(
forward_batch=forward_batch, pp_proxy_tensors=pp_proxy
)
评论区精华
风险与影响
- 风险:低风险。仅添加一行函数调用,不改变现有逻辑。但需确认是否还有其他类似路径(如非PP模式)存在相同问题。
- 影响:修复了特定模型(使用DeepEP的MoE模型如GLM-5)在动态分块下的功能性崩溃,确保动态分块可用。影响范围有限,但修复了关键路径上的静默错误。
- 风险标记:核心路径修复
关联脉络
参与讨论