[PD-Disagg] Fully support external DP dispatch w/ PD-disaggregation mode. (#19268)
Co-authored-by: Ratish P <114130421+ratish1@users.noreply.github.com>
This commit is contained in:
@@ -355,15 +355,15 @@ class DecodePreallocQueue:
|
||||
req.retraction_mb_id = None
|
||||
self.retracted_queue.append(req)
|
||||
else:
|
||||
dp_rank = self._resolve_dp_rank(req)
|
||||
if dp_rank is None:
|
||||
prefill_dp_rank = self._resolve_prefill_dp_rank(req)
|
||||
if prefill_dp_rank is None:
|
||||
self.pending_reqs.append(req)
|
||||
return
|
||||
self._create_receiver_and_enqueue(req, dp_rank)
|
||||
self._create_receiver_and_enqueue(req, prefill_dp_rank)
|
||||
|
||||
def _resolve_dp_rank(self, req: Req) -> Optional[int]:
|
||||
if req.data_parallel_rank is not None:
|
||||
return req.data_parallel_rank
|
||||
def _resolve_prefill_dp_rank(self, req: Req) -> Optional[int]:
|
||||
if req.disagg_prefill_dp_rank is not None:
|
||||
return req.disagg_prefill_dp_rank
|
||||
|
||||
if _is_fake_transfer(req, self.scheduler.server_args):
|
||||
return 0
|
||||
@@ -379,7 +379,7 @@ class DecodePreallocQueue:
|
||||
|
||||
return None
|
||||
|
||||
def _create_receiver_and_enqueue(self, req: Req, dp_rank: int) -> None:
|
||||
def _create_receiver_and_enqueue(self, req: Req, prefill_dp_rank: int) -> None:
|
||||
backend = (
|
||||
TransferBackend.FAKE
|
||||
if _is_fake_transfer(req, self.scheduler.server_args)
|
||||
@@ -391,7 +391,7 @@ class DecodePreallocQueue:
|
||||
mgr=self.kv_manager,
|
||||
bootstrap_addr=f"{req.bootstrap_host}:{req.bootstrap_port}",
|
||||
bootstrap_room=req.bootstrap_room,
|
||||
prefill_dp_rank=dp_rank,
|
||||
prefill_dp_rank=prefill_dp_rank,
|
||||
)
|
||||
|
||||
self.queue.append(
|
||||
@@ -493,16 +493,16 @@ class DecodePreallocQueue:
|
||||
raise ValueError(f"Unexpected poll case: {poll}")
|
||||
|
||||
def _resolve_pending_reqs(self) -> None:
|
||||
"""Batch-resolve dp_ranks for pending requests and create receivers."""
|
||||
"""Batch-resolve prefill_dp_ranks for pending requests and create receivers."""
|
||||
if not self.pending_reqs:
|
||||
return
|
||||
|
||||
bootstrap_addr = f"{self.pending_reqs[0].bootstrap_host}:{self.pending_reqs[0].bootstrap_port}"
|
||||
|
||||
# If a request is following the bootstrap room,
|
||||
# we need get the prefill info before resolving the dp_rank,
|
||||
# we need get the prefill info before resolving the prefill_dp_ranks
|
||||
# which is a conflict with the lazy resolve logic in CommonKVReceiver,
|
||||
# so we need to ensure the parallel info before resolving the dp_rank
|
||||
# so we need to ensure the parallel info before resolving it.
|
||||
if not self.kv_manager.ensure_parallel_info(bootstrap_addr):
|
||||
return
|
||||
|
||||
@@ -510,9 +510,9 @@ class DecodePreallocQueue:
|
||||
need_query = []
|
||||
for req in self.pending_reqs:
|
||||
# NOTE: we need resolve it again because we may ensure the parallel info here
|
||||
dp_rank = self._resolve_dp_rank(req)
|
||||
if dp_rank is not None:
|
||||
resolved.append((req, dp_rank))
|
||||
prefill_dp_rank = self._resolve_prefill_dp_rank(req)
|
||||
if prefill_dp_rank is not None:
|
||||
resolved.append((req, prefill_dp_rank))
|
||||
else:
|
||||
need_query.append(req)
|
||||
|
||||
@@ -534,8 +534,8 @@ class DecodePreallocQueue:
|
||||
else:
|
||||
self.pending_reqs = []
|
||||
|
||||
for req, dp_rank in resolved:
|
||||
self._create_receiver_and_enqueue(req, dp_rank)
|
||||
for req, prefill_dp_rank in resolved:
|
||||
self._create_receiver_and_enqueue(req, prefill_dp_rank)
|
||||
|
||||
def pop_preallocated(
|
||||
self, rids_to_check: Optional[List[str]] = None
|
||||
|
||||
@@ -341,7 +341,7 @@ class MMReceiverHTTP(MMReceiverBase):
|
||||
skip_mm_pool=True,
|
||||
)
|
||||
|
||||
def create_req(self, recv_req):
|
||||
def create_req(self, recv_req: TokenizedGenerateReqInput):
|
||||
req = Req(
|
||||
recv_req.rid,
|
||||
recv_req.input_text,
|
||||
@@ -362,7 +362,8 @@ class MMReceiverHTTP(MMReceiverBase):
|
||||
bootstrap_port=recv_req.bootstrap_port,
|
||||
bootstrap_room=recv_req.bootstrap_room,
|
||||
disagg_mode=self.scheduler.disaggregation_mode,
|
||||
data_parallel_rank=recv_req.data_parallel_rank,
|
||||
routed_dp_rank=recv_req.routed_dp_rank,
|
||||
disagg_prefill_dp_rank=recv_req.disagg_prefill_dp_rank,
|
||||
vocab_size=self.scheduler.model_config.vocab_size,
|
||||
priority=recv_req.priority,
|
||||
metrics_collector=(
|
||||
|
||||
Reference in New Issue
Block a user