bugfix[schedule]: Excessive preemption occurs when preempting running requests to schedule new prefill requests. (#12494)
Signed-off-by: CLFutureX <chenyongqyl@163.com>
This commit is contained in:
@@ -667,14 +667,17 @@ class PrefillAdder:
|
|||||||
Returns True if preemption was committed, and the new request can be scheduled.
|
Returns True if preemption was committed, and the new request can be scheduled.
|
||||||
"""
|
"""
|
||||||
# Iterate running requests to find preemptible requests
|
# Iterate running requests to find preemptible requests
|
||||||
|
valid_running_reqs = (
|
||||||
|
r for r in self.running_batch.reqs if r not in self.preempt_list
|
||||||
|
)
|
||||||
if server_args.schedule_low_priority_values_first:
|
if server_args.schedule_low_priority_values_first:
|
||||||
sorted_running_reqs = sorted(
|
sorted_valid_running_reqs = sorted(
|
||||||
self.running_batch.reqs,
|
valid_running_reqs,
|
||||||
key=lambda x: (-x.priority, -x.time_stats.wait_queue_entry_time),
|
key=lambda x: (-x.priority, -x.time_stats.wait_queue_entry_time),
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
sorted_running_reqs = sorted(
|
sorted_valid_running_reqs = sorted(
|
||||||
self.running_batch.reqs,
|
valid_running_reqs,
|
||||||
key=lambda x: (x.priority, -x.time_stats.wait_queue_entry_time),
|
key=lambda x: (x.priority, -x.time_stats.wait_queue_entry_time),
|
||||||
)
|
)
|
||||||
preemptible_reqs = []
|
preemptible_reqs = []
|
||||||
@@ -683,9 +686,7 @@ class PrefillAdder:
|
|||||||
+ min(req.sampling_params.max_new_tokens, CLIP_MAX_NEW_TOKENS)
|
+ min(req.sampling_params.max_new_tokens, CLIP_MAX_NEW_TOKENS)
|
||||||
- self.rem_total_tokens
|
- self.rem_total_tokens
|
||||||
)
|
)
|
||||||
for running_req in sorted_running_reqs:
|
for running_req in sorted_valid_running_reqs:
|
||||||
if running_req in self.preempt_list:
|
|
||||||
continue
|
|
||||||
# Priority difference needs to meet the threshold to be preemptible.
|
# Priority difference needs to meet the threshold to be preemptible.
|
||||||
priority_diff = req.priority - running_req.priority
|
priority_diff = req.priority - running_req.priority
|
||||||
if server_args.schedule_low_priority_values_first:
|
if server_args.schedule_low_priority_values_first:
|
||||||
@@ -695,6 +696,10 @@ class PrefillAdder:
|
|||||||
min_tokens_to_remove -= self._get_running_request_total_token_offset(
|
min_tokens_to_remove -= self._get_running_request_total_token_offset(
|
||||||
running_req
|
running_req
|
||||||
)
|
)
|
||||||
|
if min_tokens_to_remove <= 0:
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
break
|
||||||
|
|
||||||
# Check max token count limit can be met
|
# Check max token count limit can be met
|
||||||
if len(preemptible_reqs) == 0 or min_tokens_to_remove > 0:
|
if len(preemptible_reqs) == 0 or min_tokens_to_remove > 0:
|
||||||
|
|||||||
Reference in New Issue
Block a user