Prhub

#22905 [misc] fix ray folder lint

sgl-project/sglang · 作者 Qiaolin-Yu · 合并时间 2026-04-16 06:08

分析状态 已生成
文件变更 2提交数 1 · 评论 1
代码增减 +17 / -33
refactor ray run-ci

执行摘要

修复 Ray 模块代码格式问题,移除多余括号和换行以符合 lint 规范。

PR 标题直接表明动机是修复 Ray 文件夹的 lint 问题。PR body 为模板,未提供具体背景,但从变更内容可推断,这是为了遵循代码风格规范(如 pre-commit 钩子或 CI lint 检查)而进行的格式化调整。

该 PR 不值得精读,除非您关注代码风格规范或 Ray 模块的详细实现。可快速浏览以确认无意外逻辑变更。关注点在于团队如何通过小规模重构保持代码整洁。

讨论亮点

无 review 评论,表明这是一个低风险、纯格式化的变更,可能由作者直接合并或经过自动化检查。

实现拆解

  1. 简化字符串格式化表达式:在 python/sglang/srt/ray/engine.py 中,将 dist_init_addr 的赋值从多行括号表达式改为单行字符串格式化,移除冗余括号。
  2. 调整函数调用格式:在同一文件中,将 _calculate_rank_ranges_compute_parallelism_ranks 的调用从多行括号表达式改为更紧凑的单行或合理换行格式。
  3. 优化局部变量计算:简化 local_gpu_idx 的计算表达式,移除多余括号并调整换行。
  4. 统一错误日志格式:将多个 logger.errorraise RuntimeError 调用从多行括号表达式改为单行,提升可读性。
  5. 同步调整数据并行控制器:在 python/sglang/srt/ray/data_parallel_controller.py 中,类似地简化 self._launch_ray_tp_group_compute_parallelism_ranks 的调用和 dist_init_addr 的字符串格式化,并移除 rank_port_args.tokenizer_ipc_name 赋值中的多余括号。
文件 模块 状态 重要度
python/sglang/srt/ray/engine.py Ray 引擎 modified 6.27
python/sglang/srt/ray/data_parallel_controller.py Ray 控制器 modified 5.03
python/sglang/srt/ray/engine.py core-logic

Ray 引擎的核心调度逻辑文件,负责启动调度器 actor 和协调并行计算。本次修改涉及字符串格式化、函数调用和错误处理格式,虽不改变功能,但影响代码可读性。

def _launch_scheduler_processes(
    cls,
    server_args: ServerArgs,
    port_args: PortArgs,
    pg: PlacementGroup,
):
    # ... 其他代码 ...
​
    if server_args.dp_size == 1:
        # 简化 dist_init_addr 的字符串格式化,移除多余括号
        dist_init_addr = f"{rank0_node_ip}:{server_args.port + ZMQ_TCP_PORT_DELTA}"
        logger.info(f"dist_init_addr: {dist_init_addr}")
​
        # 调整 _calculate_rank_ranges 调用格式,从多行括号改为更紧凑的单行
        pp_range, tp_range, pp_per_node, tp_per_node = _calculate_rank_ranges(
            nnodes,
            server_args.pp_size,
            server_args.tp_size,
            node_rank=node_idx,
        )
​
        for pp_rank in pp_range:
            for tp_rank in tp_range:
                # 简化 local_gpu_idx 计算,移除多余括号并调整换行
                local_gpu_idx = (pp_rank % pp_per_node) * tp_per_node + (
                    tp_rank % tp_per_node
                )
​
                # 调整 _compute_parallelism_ranks 调用,保持清晰但减少冗余
                attn_cp_rank, moe_dp_rank, moe_ep_rank = _compute_parallelism_ranks(server_args, tp_rank)
​
        # 统一错误日志格式,将多行括号表达式改为单行
        except ray.exceptions.RayActorError as e:
            for actor in scheduler_actors:
                try:
                    ray.kill(actor)
                except Exception:
                    logger.error(f"Failed to kill Ray scheduler actor: {actor}")
            raise RuntimeError(f"Scheduler actor failed to initialize: {e}")
​
        # ... 其他代码 ...
python/sglang/srt/ray/data_parallel_controller.py entrypoint

数据并行控制器的入口文件,管理多 DP rank 的调度器启动。修改涉及函数调用和字符串格式化简化,保持代码风格一致。

class DataParallelController:
    # ... 其他代码 ...
​
    def launch_dp_schedulers(self, server_args: ServerArgs, port_args: PortArgs):
        # ... 其他代码 ...
​
        # 简化 _launch_ray_tp_group 调用,移除多余括号
        for dp_rank in range(server_args.dp_size):
            self._launch_ray_tp_group(server_args, dp_port_args_list[dp_rank], dp_rank)
​
    def _launch_ray_tp_group(self, server_args, port_args, dp_rank, worker_ports=None):
        # ... 其他代码 ...
​
        if server_args.enable_dp_attention:
            # 简化 tokenizer_ipc_name 赋值,移除多余括号
            rank_port_args.tokenizer_ipc_name = port_args.tokenizer_ipc_name
​
        # 调整 _compute_parallelism_ranks 调用格式
        attn_cp_rank, moe_dp_rank, moe_ep_rank = _compute_parallelism_ranks(
            server_args, tp_rank
        )
​
        # 简化 dist_init_addr 的字符串格式化
        dist_init_addr = f"{self.rank0_node_ip}:{rank_port_args.nccl_port}"
​
        # ... 其他代码 ...

关键符号

_launch_scheduler_processes launch_dp_schedulers launch_dp_attention_schedulers _launch_ray_tp_group

评论区精华

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

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

风险与影响

技术风险极低。变更仅涉及代码格式调整(如移除括号、调整换行),未修改任何业务逻辑、算法或配置。回归风险近乎为零,因为功能保持不变。性能、安全和兼容性无影响。

对用户无直接影响,因为这是内部代码维护。对系统无功能影响,但有助于提升代码可读性和维护性,符合团队代码规范。对团队而言,减少了 lint 警告,有利于持续集成流程的顺畅运行。

无功能变更

关联 Issue

未识别关联 Issue

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

完整报告

执行摘要

  • 一句话:修复 Ray 模块代码格式问题,移除多余括号和换行以符合 lint 规范。
  • 推荐动作:该 PR 不值得精读,除非您关注代码风格规范或 Ray 模块的详细实现。可快速浏览以确认无意外逻辑变更。关注点在于团队如何通过小规模重构保持代码整洁。

功能与动机

PR 标题直接表明动机是修复 Ray 文件夹的 lint 问题。PR body 为模板,未提供具体背景,但从变更内容可推断,这是为了遵循代码风格规范(如 pre-commit 钩子或 CI lint 检查)而进行的格式化调整。

实现拆解

  1. 简化字符串格式化表达式:在 python/sglang/srt/ray/engine.py 中,将 dist_init_addr 的赋值从多行括号表达式改为单行字符串格式化,移除冗余括号。
  2. 调整函数调用格式:在同一文件中,将 _calculate_rank_ranges_compute_parallelism_ranks 的调用从多行括号表达式改为更紧凑的单行或合理换行格式。
  3. 优化局部变量计算:简化 local_gpu_idx 的计算表达式,移除多余括号并调整换行。
  4. 统一错误日志格式:将多个 logger.errorraise RuntimeError 调用从多行括号表达式改为单行,提升可读性。
  5. 同步调整数据并行控制器:在 python/sglang/srt/ray/data_parallel_controller.py 中,类似地简化 self._launch_ray_tp_group_compute_parallelism_ranks 的调用和 dist_init_addr 的字符串格式化,并移除 rank_port_args.tokenizer_ipc_name 赋值中的多余括号。

关键文件:

  • python/sglang/srt/ray/engine.py(模块 Ray引擎;类别 source;类型 core-logic;符号 _launch_scheduler_processes): Ray 引擎的核心调度逻辑文件,负责启动调度器 actor 和协调并行计算。本次修改涉及字符串格式化、函数调用和错误处理格式,虽不改变功能,但影响代码可读性。
  • python/sglang/srt/ray/data_parallel_controller.py(模块 Ray控制器;类别 source;类型 entrypoint;符号 launch_dp_schedulers, launch_dp_attention_schedulers, _launch_ray_tp_group): 数据并行控制器的入口文件,管理多 DP rank 的调度器启动。修改涉及函数调用和字符串格式化简化,保持代码风格一致。

关键符号:_launch_scheduler_processes, launch_dp_schedulers, launch_dp_attention_schedulers, _launch_ray_tp_group

关键源码片段

python/sglang/srt/ray/engine.py

Ray 引擎的核心调度逻辑文件,负责启动调度器 actor 和协调并行计算。本次修改涉及字符串格式化、函数调用和错误处理格式,虽不改变功能,但影响代码可读性。

def _launch_scheduler_processes(
    cls,
    server_args: ServerArgs,
    port_args: PortArgs,
    pg: PlacementGroup,
):
    # ... 其他代码 ...
​
    if server_args.dp_size == 1:
        # 简化 dist_init_addr 的字符串格式化,移除多余括号
        dist_init_addr = f"{rank0_node_ip}:{server_args.port + ZMQ_TCP_PORT_DELTA}"
        logger.info(f"dist_init_addr: {dist_init_addr}")
​
        # 调整 _calculate_rank_ranges 调用格式,从多行括号改为更紧凑的单行
        pp_range, tp_range, pp_per_node, tp_per_node = _calculate_rank_ranges(
            nnodes,
            server_args.pp_size,
            server_args.tp_size,
            node_rank=node_idx,
        )
​
        for pp_rank in pp_range:
            for tp_rank in tp_range:
                # 简化 local_gpu_idx 计算,移除多余括号并调整换行
                local_gpu_idx = (pp_rank % pp_per_node) * tp_per_node + (
                    tp_rank % tp_per_node
                )
​
                # 调整 _compute_parallelism_ranks 调用,保持清晰但减少冗余
                attn_cp_rank, moe_dp_rank, moe_ep_rank = _compute_parallelism_ranks(server_args, tp_rank)
​
        # 统一错误日志格式,将多行括号表达式改为单行
        except ray.exceptions.RayActorError as e:
            for actor in scheduler_actors:
                try:
                    ray.kill(actor)
                except Exception:
                    logger.error(f"Failed to kill Ray scheduler actor: {actor}")
            raise RuntimeError(f"Scheduler actor failed to initialize: {e}")
​
        # ... 其他代码 ...

python/sglang/srt/ray/data_parallel_controller.py

数据并行控制器的入口文件,管理多 DP rank 的调度器启动。修改涉及函数调用和字符串格式化简化,保持代码风格一致。

class DataParallelController:
    # ... 其他代码 ...
​
    def launch_dp_schedulers(self, server_args: ServerArgs, port_args: PortArgs):
        # ... 其他代码 ...
​
        # 简化 _launch_ray_tp_group 调用,移除多余括号
        for dp_rank in range(server_args.dp_size):
            self._launch_ray_tp_group(server_args, dp_port_args_list[dp_rank], dp_rank)
​
    def _launch_ray_tp_group(self, server_args, port_args, dp_rank, worker_ports=None):
        # ... 其他代码 ...
​
        if server_args.enable_dp_attention:
            # 简化 tokenizer_ipc_name 赋值,移除多余括号
            rank_port_args.tokenizer_ipc_name = port_args.tokenizer_ipc_name
​
        # 调整 _compute_parallelism_ranks 调用格式
        attn_cp_rank, moe_dp_rank, moe_ep_rank = _compute_parallelism_ranks(
            server_args, tp_rank
        )
​
        # 简化 dist_init_addr 的字符串格式化
        dist_init_addr = f"{self.rank0_node_ip}:{rank_port_args.nccl_port}"
​
        # ... 其他代码 ...

评论区精华

无 review 评论,表明这是一个低风险、纯格式化的变更,可能由作者直接合并或经过自动化检查。

  • 暂无高价值评论线程

风险与影响

  • 风险:技术风险极低。变更仅涉及代码格式调整(如移除括号、调整换行),未修改任何业务逻辑、算法或配置。回归风险近乎为零,因为功能保持不变。性能、安全和兼容性无影响。
  • 影响:对用户无直接影响,因为这是内部代码维护。对系统无功能影响,但有助于提升代码可读性和维护性,符合团队代码规范。对团队而言,减少了 lint 警告,有利于持续集成流程的顺畅运行。
  • 风险标记:无功能变更

关联脉络

  • PR #22898 [Ray] Auto-create placement group in RayEngine when none is detected: 同属 Ray 模块,修改了同一文件(engine.py),涉及 Ray 调度逻辑,但本 PR 是纯格式修复,而 22898 是功能增强。

参与讨论