Prhub

#24334 extract adjust_hybrid_swa_layers_for_pp

原始 PR 作者 hnyls2002 合并时间 2026-05-04 09:52 文件变更 1 提交数 2 评论 5 代码增减 +21 / -17

执行摘要

抽取 hybrid SWA 层调整逻辑为独立方法

为即将到来的 DeepSeek-V4 重基(#23882)铺平道路,将已稳定的 hybrid SWA 层调整逻辑独立抽取,使该分支只需关注其新防护逻辑,减少合并冲突。

值得快速合并,为后续大 PR 降低冲突风险。精读价值中等,可关注其作为安全重构的实践示例。

讨论亮点

gemini-code-assist[bot] 提出优化建议:① 移除 hasattr 检查,因 is_hybrid_swa 已保证属性存在;② end_layer 是独占上界,应使用 range(self.start_layer, self.end_layer) 而非 +1;③ 使用集合加速查找。但 PR 作者未采纳,保持与原地逻辑严格一致(纯提取)。

实现拆解

  1. python/sglang/srt/model_executor/model_runner.py 中定义 adjust_hybrid_swa_layers_for_pp() 方法:当 self.is_hybrid_swaFalse 时立即返回,否则使用 self.start_layerself.end_layer 裁剪 full_attention_layer_idsswa_attention_layer_ids,并更新 model_config
  2. initialize() 中原有的内联层 ID 调整逻辑替换为 self.adjust_hybrid_swa_layers_for_pp() 调用,并置于 loop_num 块之前,以保持与后续 LoopCoder 逻辑的正确顺序。
  3. 删除原始内联代码段(约 17 行),使 initialize() 更加清晰。
  4. 仅涉及源码文件变更,无测试或配置修改。
文件 模块 状态 重要度
python/sglang/srt/model_executor/model_runner.py 模型运行器 modified 6.58

关键符号

adjust_hybrid_swa_layers_for_pp

关键源码片段

python/sglang/srt/model_executor/model_runner.py core-logic

唯一变更文件,将所有 hybrid SWA 层调整逻辑从 `initialize()` 抽取到新方法 `adjust_hybrid_swa_layers_for_pp()`,并前置调用点。

def adjust_hybrid_swa_layers_for_pp(self):
    # 非 hybrid SWA 模型无此属性,直接返回
    if not self.is_hybrid_swa:
        return
​
    # 根据 PP 分片范围裁剪 full-attention 层 ID 列表
    full_attention_layer_ids = [
        layer_idx
        for layer_idx in range(self.start_layer, self.end_layer + 1)
        if hasattr(self.model_config, "full_attention_layer_ids")
        and layer_idx in self.model_config.full_attention_layer_ids
    ]
    # 根据 PP 分片范围裁剪 SWA 层 ID 列表
    swa_attention_layer_ids = [
        layer_idx
        for layer_idx in range(self.start_layer, self.end_layer + 1)
        if hasattr(self.model_config, "swa_attention_layer_ids")
        and layer_idx in self.model_config.swa_attention_layer_ids
    ]
    # 将裁剪后的层 ID 列表写回 config,供 pool_configurator 等使用
    self.model_config.swa_attention_layer_ids = swa_attention_layer_ids
    self.model_config.full_attention_layer_ids = full_attention_layer_ids

评论区精华

优化建议:移除 hasattr、修正 end_layer 范围、使用集合 性能

gemini-code-assist[bot] 指出可移除 `hasattr` 检查、使用 `range(self.start_layer, self.end_layer)` 因为 `end_layer` 是独占上界、以及用集合加速 `in` 判断。

结论:未采纳,保持与原地逻辑完全一致以确保零行为变更。 · 已解决

风险与影响

极低风险。纯代码移动,AST 等价已验证。但若后续 is_hybrid_swa 逻辑或 end_layer 语义变更,需要同步维护新方法。

对用户无影响;对内部开发者,使 initialize() 更简洁,为即将出现的大规模重构(DSv4)提供了清晰的切分点。

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论