[PCP][DCP] Enable PCP+DCP on sparse-MLA models - #56157
Merged
LucasWilkinson merged 31 commits intoSep 12, 2026
Merged
Conversation
Signed-off-by: patryk.saffer <patryk.saffer@blc-login-1.blc1.mistralcompute.ai>
Signed-off-by: patryk.saffer <patryk.saffer@blc-login-0.blc1.mistralcompute.ai>
PatrykSaffer
requested review from
LucasWilkinson,
MatthewBonanni,
WoosukKwon,
mgoin,
njhill,
pavanimajety,
yewentao256 and
zyongye
as code owners
September 9, 2026 21:28
Contributor
|
This pull request has merge conflicts that must be resolved before it can be |
Signed-off-by: PatrykSaffer <patryk.saffer@mistral.ai>
Add comment to clarify group name matching for ETP. Signed-off-by: PatrykSaffer <patryk.saffer@mistral.ai>
…patryk/pcp-dcp-sparse-mla
Drop the FlashMLA-sparse PCP+DCP unit test file and the three indexer chunk-plan tests; the kernel-level deinterleave test stays. Add a GLM-5.2-NVFP4 TP1+PCP4+DCP4 config to the existing 4xB200 LM Eval PCP job so PCP+DCP is covered end to end. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Signed-off-by: Lucas Wilkinson <lwilkins@redhat.com>
LucasWilkinson
requested review from
AndreasKaratzas,
Harry-Chen,
khluu and
vadiklyutiy
as code owners
September 12, 2026 18:35
Collaborator
|
/ci run |
|
✅ Triggered Buildkite CI #88553 for commit |
…t param - Give the fake parallel_config in the index-conversion warmup test the prefill_context_parallel_size the warmup keys now read. - Give the fake FlashMLA impl in the decode-subset test pcp_dcp_kv_gather. - Drop the [5, 0, 6] case from the PCP deinterleave test: a request with an empty context is never scheduled, and the plan builder asserts on it. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Signed-off-by: Lucas Wilkinson <lwilkins@redhat.com>
Collaborator
|
/ci run |
|
✅ Triggered Buildkite CI #88558 for commit |
LucasWilkinson
enabled auto-merge (squash)
September 12, 2026 20:12
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Collaborator
|
/ci run |
|
✅ Triggered Buildkite CI #88566 for commit |
LucasWilkinson
added a commit
to LucasWilkinson/vllm
that referenced
this pull request
Sep 13, 2026
Rebase vllm-project#54496 onto vllm-project#56157. Publish each TP1 PCP+DCP producer shard through the existing DCP transfer topology and retain upstream completion aggregation. Share transfer-size calculation between the pull and push schedulers and validate the PCP/DCP group in the connector. Cover shard publication, completion, push scheduling, and advertised transfer topology for replicated and sharded producers. Co-authored-by: OpenAI Codex <noreply@openai.com> Signed-off-by: Lucas Wilkinson <lwilkins@redhat.com>
LucasWilkinson
added a commit
to LucasWilkinson/vllm
that referenced
this pull request
Sep 14, 2026
Required to run MTP in PCP+DCP behind NIXL P/D at all. NIXL with DCP > 1 raises cp_kv_cache_interleave_size to the block size (64), and cp_utils.validate_cp_support then asserts supports_mtp_with_cp_non_trivial_interleave_size for every layer impl when a speculative config is present: AssertionError: MTP with cp_kv_cache_interleave_size > 1 is not supported in FlashMLASparseImpl. The flag is declared False in vllm/v1/attention/backend.py and set True by no backend upstream, so MTP + DCP > 1 + NIXL is unreachable on plain main. Neither the flag nor the assertion comes from vllm-project#56157; both predate it. No open upstream PR touches either - searched by flag name and by "MTP cp_kv_cache_interleave". The frankenstein branch sets it True on the same impl in ebe6cc2, on the grounds that the mixed fp8 path processes all scheduled query tokens together and its slot mapping and sparse-index conversion both honour the interleave. That reasoning is plausible here too - the conversion calls thread cp_kv_cache_interleave_size through - but vllm-project#56157 rewrote this prefill path, so the claim is NOT verified for it. Treat this as a hypothesis under test. Startup succeeding only proves the assertion is gone; the arm must be judged on MTP acceptance rate and output sanity before this is proposed upstream. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> (cherry picked from commit 95474a0)
ItsRoy69
pushed a commit
to ItsRoy69/vllm
that referenced
this pull request
Sep 15, 2026
Signed-off-by: patryk.saffer <patryk.saffer@blc-login-1.blc1.mistralcompute.ai> Signed-off-by: patryk.saffer <patryk.saffer@blc-login-0.blc1.mistralcompute.ai> Signed-off-by: PatrykSaffer <patryk.saffer@mistral.ai> Signed-off-by: Lucas Wilkinson <lwilkins@redhat.com> Co-authored-by: patryk.saffer <patryk.saffer@blc-login-1.blc1.mistralcompute.ai> Co-authored-by: patryk.saffer <patryk.saffer@blc-login-0.blc1.mistralcompute.ai> Co-authored-by: Lucas Wilkinson <lwilkins@redhat.com> Co-authored-by: Patryk Saffer <PatrykSaffer@users.noreply.github.com> Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
keneoneth
pushed a commit
to keneoneth/vllm
that referenced
this pull request
Sep 16, 2026
Signed-off-by: patryk.saffer <patryk.saffer@blc-login-1.blc1.mistralcompute.ai> Signed-off-by: patryk.saffer <patryk.saffer@blc-login-0.blc1.mistralcompute.ai> Signed-off-by: PatrykSaffer <patryk.saffer@mistral.ai> Signed-off-by: Lucas Wilkinson <lwilkins@redhat.com> Co-authored-by: patryk.saffer <patryk.saffer@blc-login-1.blc1.mistralcompute.ai> Co-authored-by: patryk.saffer <patryk.saffer@blc-login-0.blc1.mistralcompute.ai> Co-authored-by: Lucas Wilkinson <lwilkins@redhat.com> Co-authored-by: Patryk Saffer <PatrykSaffer@users.noreply.github.com> Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Purpose
Enable DCP to run alongside PCP on sparse-MLA models, so a deployment can shard the KV cache for decode and still split prefill query work across ranks.
This change:
2*PCPchunks when DCP is on, which keeps the per-region row count identical on every rank — the invariant the gathered layout rests on;PCPtimes;FULL_AND_PIECEWISE, keeping onlyFULLover mixed batches rejected;fixes #53573
Additionally
_triton_convert_reference_implhas always specified that only-1is invalid there. The existing test missed it becausetoken_indices[6, 150:160]is an empty slice on a 128-column tensor;Test Plan
Test Result
GSM8K, 1319 questions, TP1+PCP4+DCP4,
FULL_AND_PIECEWISE. Seven runs across theBenchmarks
Prefill, 32768 in / 1 out:
Decode, 1 in / 1024 out:
Why pcp4dcp4 decode is slower than dcp4 decode:
CudaCommunicator.init enables custom all-reduce, torch symm-mem and FlashInfer fused all-reduce for tp groups only, so that per-layer all-reduce runs on NCCL ring.
followup is to enable it, sth like 590e9b7