[Ray] Support multi-replica serving by making scheduler actor names unique (#22917)
This commit is contained in:
@@ -185,8 +185,9 @@ class RayDataParallelController(DataParallelController):
|
|||||||
num_cpus=0,
|
num_cpus=0,
|
||||||
num_gpus=1,
|
num_gpus=1,
|
||||||
name=(
|
name=(
|
||||||
f"sglang_scheduler_rank0node={self.rank0_node_ip}"
|
f"sglang_scheduler_node{self.rank0_node_ip}"
|
||||||
f"_dp{actual_dp_rank}_pp{pp_rank}_tp{tp_rank}"
|
f"_dp{actual_dp_rank}_pp{pp_rank}_tp{tp_rank}"
|
||||||
|
f"_pg{self.pg.id.hex()[:8]}_bundle{bundle_idx}"
|
||||||
),
|
),
|
||||||
scheduling_strategy=PlacementGroupSchedulingStrategy(
|
scheduling_strategy=PlacementGroupSchedulingStrategy(
|
||||||
placement_group=self.pg,
|
placement_group=self.pg,
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import threading
|
|||||||
from typing import Callable
|
from typing import Callable
|
||||||
|
|
||||||
import ray
|
import ray
|
||||||
|
from ray.util.placement_group import PlacementGroup
|
||||||
from ray.util.scheduling_strategies import PlacementGroupSchedulingStrategy
|
from ray.util.scheduling_strategies import PlacementGroupSchedulingStrategy
|
||||||
|
|
||||||
from sglang.srt.entrypoints.engine import (
|
from sglang.srt.entrypoints.engine import (
|
||||||
@@ -30,7 +31,7 @@ from sglang.srt.entrypoints.engine import (
|
|||||||
_compute_parallelism_ranks,
|
_compute_parallelism_ranks,
|
||||||
)
|
)
|
||||||
from sglang.srt.ray.scheduler_actor import SchedulerActor
|
from sglang.srt.ray.scheduler_actor import SchedulerActor
|
||||||
from sglang.srt.server_args import ZMQ_TCP_PORT_DELTA, PortArgs, ServerArgs
|
from sglang.srt.server_args import PortArgs, ServerArgs
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@@ -42,7 +43,9 @@ class RaySchedulerInitResult(SchedulerInitResult):
|
|||||||
scheduler_actors: list = dataclasses.field(default_factory=list)
|
scheduler_actors: list = dataclasses.field(default_factory=list)
|
||||||
|
|
||||||
|
|
||||||
def _find_engine_bundle(placement_group, nnodes: int) -> tuple[int, str]:
|
def _find_engine_bundle(
|
||||||
|
placement_group: PlacementGroup, nnodes: int
|
||||||
|
) -> tuple[int, str]:
|
||||||
"""Find which placement group bundle is on the same node as the Engine.
|
"""Find which placement group bundle is on the same node as the Engine.
|
||||||
Rank0 scheduler must be co-located with the Engine. Returns (bundle_index, engine_ip).
|
Rank0 scheduler must be co-located with the Engine. Returns (bundle_index, engine_ip).
|
||||||
"""
|
"""
|
||||||
@@ -146,7 +149,7 @@ class RayEngine(Engine):
|
|||||||
f"Use {gpus_per_node} GPUs/node, world_size={world_size}"
|
f"Use {gpus_per_node} GPUs/node, world_size={world_size}"
|
||||||
)
|
)
|
||||||
|
|
||||||
dist_init_addr = f"{rank0_node_ip}:{server_args.port + ZMQ_TCP_PORT_DELTA}"
|
dist_init_addr = f"{rank0_node_ip}:{port_args.nccl_port}"
|
||||||
logger.info(f"dist_init_addr: {dist_init_addr}")
|
logger.info(f"dist_init_addr: {dist_init_addr}")
|
||||||
|
|
||||||
scheduler_actors = []
|
scheduler_actors = []
|
||||||
@@ -172,7 +175,7 @@ class RayEngine(Engine):
|
|||||||
actor = SchedulerActor.options(
|
actor = SchedulerActor.options(
|
||||||
num_cpus=0,
|
num_cpus=0,
|
||||||
num_gpus=1,
|
num_gpus=1,
|
||||||
name=f"sglang_scheduler_rank0node={rank0_node_ip}_pp{pp_rank}_tp{tp_rank}",
|
name=f"sglang_scheduler_node{rank0_node_ip}_pp{pp_rank}_tp{tp_rank}_pg{pg.id.hex()[:8]}_bundle{bundle_idx}",
|
||||||
scheduling_strategy=PlacementGroupSchedulingStrategy(
|
scheduling_strategy=PlacementGroupSchedulingStrategy(
|
||||||
placement_group=pg,
|
placement_group=pg,
|
||||||
placement_group_bundle_index=bundle_idx,
|
placement_group_bundle_index=bundle_idx,
|
||||||
@@ -261,7 +264,7 @@ class RayEngine(Engine):
|
|||||||
# TCP addresses correctly (required for DP attention path).
|
# TCP addresses correctly (required for DP attention path).
|
||||||
dp_server_args = dataclasses.replace(
|
dp_server_args = dataclasses.replace(
|
||||||
server_args,
|
server_args,
|
||||||
dist_init_addr=f"{rank0_node_ip}:{server_args.port + ZMQ_TCP_PORT_DELTA}",
|
dist_init_addr=f"{rank0_node_ip}:{port_args.nccl_port}",
|
||||||
)
|
)
|
||||||
|
|
||||||
# Create the DP controller in-process. This blocks until all actors
|
# Create the DP controller in-process. This blocks until all actors
|
||||||
|
|||||||
Reference in New Issue
Block a user