Fix spec info's filter when reqs are finished right after prefill (#14742)
This commit is contained in:
@@ -7,6 +7,7 @@ import torch
|
||||
import torch.nn.functional as F
|
||||
|
||||
from sglang.srt.constrained.base_grammar_backend import BaseGrammarObject
|
||||
from sglang.srt.environ import envs
|
||||
from sglang.srt.layers.attention.utils import create_flashinfer_kv_indices_triton
|
||||
from sglang.srt.layers.logits_processor import LogitsProcessorOutput
|
||||
from sglang.srt.layers.sampler import apply_custom_logit_processor
|
||||
@@ -754,13 +755,17 @@ class EagleDraftInput(SpecInput, EagleDraftInputV2Mixin):
|
||||
self.future_indices.indices = self.future_indices.indices[new_indices]
|
||||
return
|
||||
|
||||
strict_check = envs.SGLANG_SPEC_ENABLE_STRICT_FILTER_CHECK.get()
|
||||
if has_been_filtered:
|
||||
# in eagle_utils.py:verify, we have already filtered the batch by `unfinished_index`
|
||||
# therefore, we don't need to filter the batch again in scheduler
|
||||
error_msg = f"length of new_indices: {len(new_indices)} != length of topk_p: {len(self.topk_p)}, this should not happen"
|
||||
if len(new_indices) != len(self.topk_p):
|
||||
logger.warning(
|
||||
f"length of new_indices: {len(new_indices)} != length of topk_p: {len(self.topk_p)}, this should not happen"
|
||||
)
|
||||
if strict_check:
|
||||
raise ValueError(error_msg)
|
||||
else:
|
||||
logger.warning(error_msg)
|
||||
|
||||
self.topk_p = self.topk_p[: len(new_indices)]
|
||||
self.topk_index = self.topk_index[: len(new_indices)]
|
||||
self.hidden_states = self.hidden_states[: len(new_indices)]
|
||||
|
||||
@@ -909,21 +909,6 @@ class EAGLEWorker(TpModelWorker):
|
||||
assert isinstance(forward_batch.spec_info, EagleDraftInput)
|
||||
assert forward_batch.spec_info is batch.spec_info
|
||||
self.capture_for_decode(logits_output, forward_batch.spec_info)
|
||||
has_finished, unfinished_req_index = False, []
|
||||
for i, req in enumerate(batch.reqs):
|
||||
if req.finished():
|
||||
has_finished = True
|
||||
else:
|
||||
unfinished_req_index.append(i)
|
||||
if has_finished:
|
||||
unfinished_index_device = torch.tensor(
|
||||
unfinished_req_index,
|
||||
dtype=torch.int64,
|
||||
device=batch.spec_info.topk_p.device,
|
||||
)
|
||||
batch.spec_info.filter_batch(
|
||||
unfinished_index_device, has_been_filtered=False
|
||||
)
|
||||
|
||||
def forward_draft_extend_after_decode(self, batch: ScheduleBatch):
|
||||
assert isinstance(batch.spec_info, EagleDraftInput)
|
||||
|
||||
Reference in New Issue
Block a user