Skip to content

PD heterogenous TP #77

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 18 commits into
base: disagg_pd_dev
Choose a base branch
from
Open

Conversation

NickLucche
Copy link
Collaborator

@NickLucche NickLucche commented May 6, 2025

What this PR does:

  • Adds support for heterogenous TP sizes. So far tested with P_TP=1 and D_TP=2/4.
  • It does so by splitting the remote kv cache among D_TP/P_TP D workers along the kv_head dim. block_size and kv precision must match.
  • (JIT) Discovery is done by first querying the rank0 of the dst_engine_id to get the TP size of destination group. After that, every D TP worker will only pull from a single remote P TP worker, hence the setup only requires two exchanges on the side channel (rank0 and target rank_j).

TODOs:

  • P_TP=2 and D_TP=4
  • benchmark pre-post PR to verify whether the higher number of prepared nixl descriptors has an impact.
  • MLA works with @tlrmchlsmth patch (not in this PR).

Copy link

github-actions bot commented May 6, 2025

👋 Hi! Thank you for contributing to the vLLM project.

💬 Join our developer Slack at https://slack.vllm.ai to discuss your PR in #pr-reviews, coordinate on features in #feat- channels, or join special interest groups in #sig- channels.

Just a reminder: PRs would not trigger full CI run by default. Instead, it would only run fastcheck CI which starts running only a small and essential subset of CI tests to quickly catch errors. You can run other CI tests on top of those by going to your fastcheck build on Buildkite UI (linked in the PR checks section) and unblock them. If you do not have permission to unblock, ping simon-mo or khluu to add you in our Buildkite org.

Once the PR is approved and ready to go, your PR reviewer(s) can run CI to test the changes comprehensively before merging.

To run CI, PR reviewers can either: Add ready label to the PR or enable auto-merge.

🚀

NickLucche added 9 commits May 6, 2025 12:50
Signed-off-by: nicklucche <[email protected]>
Signed-off-by: nicklucche <[email protected]>
Signed-off-by: nicklucche <[email protected]>
Signed-off-by: nicklucche <[email protected]>
Signed-off-by: nicklucche <[email protected]>
Signed-off-by: nicklucche <[email protected]>
@@ -340,6 +369,7 @@ def register_kv_caches(self, kv_caches: dict[str, torch.Tensor]):
# MLA case.
self.num_blocks = first_kv_cache.shape[0]
block_rank = 2 # [block_size, latent_dim]
# TODO does this include tp dependent size?
Copy link
Member

@tlrmchlsmth tlrmchlsmth May 9, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For MLA we replicate the KV cache across TP ranks, so in this case the prefiller would need to send the same blocks to all decoders. This is the same when TP size is greater than the num kv heads

Signed-off-by: nicklucche <[email protected]>
Signed-off-by: nicklucche <[email protected]>
Signed-off-by: nicklucche <[email protected]>
@NickLucche NickLucche marked this pull request as ready for review May 10, 2025 18:29
Signed-off-by: nicklucche <[email protected]>
Signed-off-by: nicklucche <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants