Prhub

#2183 cleanup

原始 PR 作者 zhuzilin 合并时间 2026-07-06 18:24 文件变更 9 提交数 1 评论 0 代码增减 +27 / -117

执行摘要

清理无用代码与参数,强化多节点安全

代码库中存在已不再使用的旧函数和过时参数,增加阅读和维护负担。多节点部署时部分 HTTP 控制接口应在所有节点上被调用,但只有 rank 0 需要实际执行,否则可能引发异常或冗余操作。变量命名 num_gpu_per_engine 容易与 num_gpus_per_engine 混淆,需明确表示“单节点内每引擎 GPU 数”。

建议尽快合入。此 PR 是典型的“清理债务”型变更,风险低、收益明确。特别值得关注的是变量重命名策略和 node_rank guard 模式,可在未来多节点功能中复用。

讨论亮点

无 review 评论。变更由作者独立完成,提交信息仅含 'cleanup',未产生讨论。

实现拆解

  1. 删除过时函数
    - slime/utils/ppo_utils.py:移除 get_advantages_and_returns(63 行),该功能已完全被 batch 版 get_advantages_and_returns_batch 覆盖。所有调用点之前已迁移。
    - slime/utils/arguments.py:移除 parse_critic_args(5 行),因为 parse_megatron_role_args 可直接调用,无需包装。
    - slime/ray/rollout.py:移除 onload_weights_from_disk 方法(12 行),该功能已被更通用的 onload(tags=[WEIGHTS]) 替代。

  2. 清理函数参数
    - slime/backends/megatron_utils/server/logprob_utils.py:从 _slice_response_rows_for_current_cp_rank_get_log_probs_and_optional_samples 中移除 max_seq_lens 参数及其传递,该参数未在函数体内使用。
    - 相应调整了内部调用链,避免传递无用参数。

  3. 强化多节点安全
    - slime/backends/sglang_utils/sglang_engine.py:在 pause_generationcontinue_generationstart_profilestop_profile 四个方法开头增加 if self.node_rank != 0: return,确保非 rank 0 节点不执行这些操作,避免冗余请求或状态混乱。

  4. 变量重命名
    - slime/ray/rollout.pyslime/ray/rollout_validation.pytests/test_rollout_validation.py:将 num_gpu_per_engine 统一重命名为 num_gpus_per_engine_on_node,提升命名清晰度,并同步更新校验逻辑中的参数名。

  5. 测试适配
    - tests/test_rollout_validation.py:更新测试用例中参数名,以匹配新的函数签名。

文件 模块 状态 重要度
slime/utils/ppo_utils.py PPO 工具 modified 7.21
slime/ray/rollout.py Rollout 管理 modified 7.01
slime/backends/sglang_utils/sglang_engine.py SGLang 引擎 modified 5.83

关键符号

get_advantages_and_returns onload_weights_from_disk parse_critic_args

关键源码片段

slime/ray/rollout.py core-logic

删除了 onload_weights_from_disk 方法,重构了 recover_updatable_engines,重命名变量 num_gpu_per_engine 为 num_gpus_per_engine_on_node。

# 删除 onload_weights_from_disk 方法(原因:已被 onload(tags=[WEIGHTS]) 替代)
# 重构前:
# def onload_weights_from_disk(self):
# if not self.needs_offload or not self.model_path:
# return []
# return [engine.update_weights_from_disk.remote(self.model_path) for engine in self.engines if engine is not None]
#
# 重构 recovery 方法:recover_updatable_engines 直接调用 srv.recover(),
# 不再手动拼装返回值列表,使代码更简洁。
#
# 变量重命名:num_gpu_per_engine -> num_gpus_per_engine_on_node 以明确含义
slime/backends/sglang_utils/sglang_engine.py core-logic

为四个控制方法添加 node_rank != 0 guard,避免非主节点执行 profile、pause 等操作。

def pause_generation(self):
    # 只有 node_rank == 0 的引擎才实际发送 HTTP 请求
    if self.node_rank != 0:
        return
    response = requests.post(f"http://{self.server_host}:{self.server_port}/pause_generation", json={})
    response.raise_for_status()
    return response# continue_generation、start_profile、stop_profile 同理添加 guard

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

风险极低。所有删除的函数均已确认不再被任何生产代码调用(PR 作者通过工具检查过调用关系);移除的参数在函数体内无引用;新增的 node_rank != 0 guard 是防御性编程,仅跳过本该由主节点执行的操作。若下游有未发现的隐式依赖,可能导致运行时导入错误,但 CI 已通过。

对用户无直接影响,对开发团队而言降低了代码复杂度,减少未来维护时的认知负担。多节点部署时控制接口行为更稳健。变更加速了后续重构和功能迭代。

删除函数必须确认无调用残留 多节点 guard 改变原有行为需验证

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论