Repository navigation
[Bugfix][NIXL] Avoid receive reports for notification-only requests - #57570
Conversation
Co-authored-by: OpenAI Codex <codex@openai.com> Signed-off-by: NickLucche <nicolo.lucchesi@mistral.ai>
Co-authored-by: OpenAI Codex <codex@openai.com> Signed-off-by: NickLucche <nicolo.lucchesi@mistral.ai>
|
/ci run all |
|
❌ This PR is 1 commit behind upstream |
|
/ci run |
|
/ci run |
1 similar comment
|
/ci run |
|
❌ This PR is 1 commit behind upstream |
|
/ci run --allow-stale |
|
✅ Triggered Buildkite CI #89872 for commit
|
…57570) Signed-off-by: NickLucche <nicolo.lucchesi@mistral.ai> Co-authored-by: OpenAI Codex <codex@openai.com>
…llm-project#57570) Signed-off-by: NickLucche <nicolo.lucchesi@mistral.ai> Co-authored-by: OpenAI Codex <codex@openai.com>
Conflict resolution (30 files): - 19 files: adopted v0.32.0 (our matching cherry-picks vllm-project#57554 vllm-project#56545 vllm-project#57871 vllm-project#53187 vllm-project#57049 vllm-project#57077 vllm-project#57570 are now upstream). - Re-reverted vllm-project#53007 (attention.py / kv_cache_utils.py / test_backend_per_kind.py): page_budget=shared_page, restore _largest_kernel_block_within candidates logic. - flashinfer.py: adopted upstream SM12x NVFP4 KV (vllm-project#46963/vllm-project#60452); re-applied our D256 prefill (_nvfp4_d256_prefill + FIPrefill fields + call sites). - kernel_warmup.py: adopted upstream autotune refactor; re-applied our W4A16 CuTe-DSL autotune skip. - qwen3_dflash.py: adopted upstream quantized-draft KV fallback (dropped our NVFP4 fused dequant fast-path; DFlash2 is backup). - dflash/eagle utils.py: kept our shared-cache cache_config handling (avoid replace-copy layout loss) + upstream get_draft_load_config. - entrypoints: union imports (our per-request logging + upstream additions).
…llm-project#57570) Signed-off-by: NickLucche <nicolo.lucchesi@mistral.ai> Co-authored-by: OpenAI Codex <codex@openai.com>
…llm-project#57570) Signed-off-by: NickLucche <nicolo.lucchesi@mistral.ai> Co-authored-by: OpenAI Codex <codex@openai.com>
A notif-only decode request (abort/full prefix cache hit) can still need to notify the prefiller to release KV.
If that notification's handshake fails, NIXL reports a failed receive for a request the scheduler has already removed, crashing EngineCore.
See "CI issue example" for how this relates to Buildkite 89597.
Keep notification-only entries out of receive tracking. This also covers full local prefix hits, where the KV is already local and the scheduler never waits for a receive. Producer notification is still attempted, but its failure no longer reports a receive failure or completion.
Actual receives retain both signals: completion is needed to release blocks under
failor resume scheduling underrecompute.Cancellation example
awaiting_kvs=Falseand no local receive blocks.failed_recving={A}andfinished_recving={A}. The scheduler processes the completion, cannot find A, and crashes.CI issue example
In Buildkite 89597, a four-block KV receive fails because of the 1920/1024 block-size mismatch (expected for SSMs has block size is tp dependent).
While returning the generation error, D's serving wrapper submits a separate cleanup request with
abort_immediately=Trueand the same producer KV reference.That request never runs inference: it only tells P to release its KV. Its handshake hits the same mismatch, and NIXL reports a failed receive for a request already removed from the scheduler, crashing EngineCore.
abort_immediately=True, carrying A's producer KV reference.awaiting_kvs=False, no local receive blocks. B is removed from the scheduler.failed_recving={B}andfinished_recving={B}; the scheduler cannot find B and crashes.cc @njhill @jyizheng since you guys introduced
awaiting_kvsOn Buildkite
The Buildkite adjustment is orthogonal, included in this PR to unblock the release: set both Kimi DP/EP block sizes to 2048 to avoid the 1920/1024 handshake mismatch