Conversation
|
Warning You have reached your daily quota limit. Please wait up to 24 hours and I will start processing your requests again! |
|
Related issue #25388 |
25646e5 to
e2ab513
Compare
|
We hit the same bug on a GLM-5 PD deployment (NEXTN spec + xgrammar, triggered by forced We instrumented the grammar object ( After applying the same guard as this PR, forced +1, hope this lands soon. |
|
Thanks @nvyutwu. Closing this because it is still a draft and has not been updated in 94 days. Reopen it if the work is still relevant. Some directories moved recently, so an older branch may need retargeting: |
Summary
Mirror the normal overlap scheduler's early-commit guard in
event_loop_overlap_disagg_decode.When
is_disable_overlap_for_batch()returnsTrue(spec_v2 + grammar + decode + pending result), commit the previous batch's result before launching the next batch soreq.output_idsandreq.grammarare up-to-date before the next MTP verify step prepares grammar masks.Root Cause
Call trace — before the fix
Call trace — after the fix
Reproducer
Requires disagg setup (prefill + decode servers) + a model with EAGLE weights
Launch prefill and decode servers with
--speculative-algorithm EAGLE --speculative-draft-model-path <eagle-weights>in disagg mode, then:Before fix: grammar-constrained output corrupted after a few requests (invalid JSON, schema violation).
After fix: all requests return valid JSON.
Tests
test/registered/unit/managers/test_overlap_disagg_decode_grammar_sync.py:test_grammar_sync_commits_before_run_batch: assertsprocess_batch_resultfires beforerun_batchwhendisable_overlap_for_batch=True— catches the exact regressiontest_no_double_pop_when_disable_overlap_then_overlap: normal overlap path processes at bottom, no skipped popstest_no_pop_on_first_iter_with_disable_overlap: no pop attempt whenlast_batch=None(empty queue guard)python3 -m py_compile python/sglang/srt/disaggregation/decode.py— cleanCI States
Latest PR Test (Base): ❌ Run #26934738739
Latest PR Test (Extra): ❌ Run #26934738649