[PD][bug fix] fix memleak when last_batch is none (#13144)
Signed-off-by: Xuchun Shang <xuchun.shang@gmail.com> Co-authored-by: Shangming Cai <csmthu@gmail.com>
This commit is contained in:
co-authored by
Shangming Cai
parent
7afff8fd1a
commit
80797c2a15
@@ -597,11 +597,9 @@ class SchedulerDisaggregationPrefillMixin:
|
|||||||
return transferred_rids
|
return transferred_rids
|
||||||
|
|
||||||
def process_prefill_chunk(self: Scheduler) -> None:
|
def process_prefill_chunk(self: Scheduler) -> None:
|
||||||
if self.last_batch and self.last_batch.forward_mode.is_extend():
|
chunked_req_to_exclude = set()
|
||||||
if self.chunked_req:
|
if self.chunked_req:
|
||||||
# Move the chunked request out of the batch so that we can merge
|
chunked_req_to_exclude.add(self.chunked_req)
|
||||||
# only finished requests to running_batch.
|
|
||||||
self.last_batch.filter_batch(chunked_req_to_exclude=self.chunked_req)
|
|
||||||
self.tree_cache.cache_unfinished_req(self.chunked_req, chunked=True)
|
self.tree_cache.cache_unfinished_req(self.chunked_req, chunked=True)
|
||||||
if self.enable_overlap:
|
if self.enable_overlap:
|
||||||
# Delay KV transfer to process_batch_result_disagg_prefill when overlap is enabled to ensure results are resolved
|
# Delay KV transfer to process_batch_result_disagg_prefill when overlap is enabled to ensure results are resolved
|
||||||
@@ -620,6 +618,19 @@ class SchedulerDisaggregationPrefillMixin:
|
|||||||
self.req_to_token_pool.free(self.chunked_req.req_pool_idx)
|
self.req_to_token_pool.free(self.chunked_req.req_pool_idx)
|
||||||
self.running_batch.batch_is_full = False
|
self.running_batch.batch_is_full = False
|
||||||
|
|
||||||
|
if self.last_batch and self.last_batch.forward_mode.is_extend():
|
||||||
|
if self.last_batch.chunked_req:
|
||||||
|
# In the context pipeline parallelism, after the last chunk, the current microbatch still track outdated chunked_req.
|
||||||
|
# We need to discard it.
|
||||||
|
chunked_req_to_exclude.add(self.last_batch.chunked_req)
|
||||||
|
|
||||||
|
last_bs = self.last_batch.batch_size()
|
||||||
|
self.last_batch.filter_batch(
|
||||||
|
chunked_req_to_exclude=list(chunked_req_to_exclude)
|
||||||
|
)
|
||||||
|
if self.last_batch.batch_size() < last_bs:
|
||||||
|
self.running_batch.batch_is_full = False
|
||||||
|
|
||||||
def send_kv_chunk(
|
def send_kv_chunk(
|
||||||
self: Scheduler,
|
self: Scheduler,
|
||||||
req: Req,
|
req: Req,
|
||||||
|
|||||||
Reference in New Issue
Block a user