Skip to content

[II] Bind B12X TP pools to CUDA graph owners - #324

Closed
voipmonitor wants to merge 1 commit into
dev/infernal-invocationfrom
agent/ii-b12x-graph-pool-capture
Closed

voipmonitor wants to merge 1 commit into
dev/infernal-invocationfrom
agent/ii-b12x-graph-pool-capture

Conversation

@voipmonitor

Copy link
Copy Markdown

Behavior

Registers B12X PCIe pools associated with tensor-parallel process groups with the owning CUDA graph capture. Disposable profiling captures also checkpoint and roll back both tensor-parallel and decode-context-parallel B12X pool state.

  • TP and DCP coordinators receive separate graph-capture scopes.
  • Pool storage shared by TP and DCP through the same device process group is checkpointed once.
  • Existing custom-all-reduce channel checkpointing remains unchanged.
  • Process groups without registered B12X pools retain no-op B12X capture behavior.

Status: implemented and qualified.

Technical reason

B12X tensor-parallel projection collectives allocate graph-owned communication channels through the same pool implementation used by DCP attention collectives. Registering only the DCP coordinator leaves TP projection channels outside the CUDA graph lifecycle and allows disposable profiling captures to leak or reuse channels with the wrong owner.

Compatibility

The change does not enable a B12X kernel or collective. It only extends lifecycle handling to a B12X pool after another runtime path registers that pool for a tensor-parallel process group. Models without B12X TP collectives retain their existing execution path.

The patch changes only distributed graph lifecycle code and its tests. It contains no Kimi-K3 model logic, DCP algorithm changes, speculative decoding, loader changes, or launch scripts.

Validation

Validation used voipmonitor/vllm:kimi-k3-qsrt-ii-vllm735952b-b12x180ccab-cu133-torch213-20260815-r3 with PyTorch 2.13 and CUDA 13.3:

  • tests/distributed/test_dcp_a2a.py: 33 passed, 20 hardware-dependent skipped.
  • Focused graph-pool ownership, rollback, and custom-all-reduce tests: 5 passed.
  • Ruff, formatter verification, Python compilation, and git diff --check pass.

Review scope

This pull request replaces only the B12X graph-pool lifecycle responsibility contained in #317. The TP projection operation that registers the pool is reviewed separately.

Include B12X pools registered for tensor-parallel process groups in graph capture and disposable-profile rollback. Retain separate TP and DCP capture scopes even when coordinators share a process group, while checkpointing shared pool storage once.

The helper remains a no-op when a process group has no registered B12X pool. Models and deployments without B12X tensor-parallel collectives retain their existing execution path.

Validation: tests/distributed/test_dcp_a2a.py passes 33 tests with 20 hardware-dependent skips in the PyTorch 2.13/CUDA 13.3 Kimi-K3 image. Ruff, formatting, Python compilation, and whitespace validation pass.
@coderabbitai

coderabbitai Bot commented Aug 15, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@voipmonitor, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 56 minutes

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 742e45d9-1736-4b6a-a3b6-2c5eef28df4e

📥 Commits

Reviewing files that changed from the base of the PR and between ad848fc and d7a6e86.

📒 Files selected for processing (2)
  • tests/distributed/test_dcp_a2a.py
  • vllm/distributed/parallel_state.py

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

voipmonitor added a commit that referenced this pull request Aug 16, 2026
Record each active B12X DCP graph channel by process-group identity. A pool initialized after the graph context opens now prepares and enters that channel before its first operation, and collective calls select the active channel instead of the eager scheduler channel.

Eager execution is unchanged. The change depends on the graph-owner integration in vLLM #324.

Validation: Ruff format/check and git diff --check pass. Thirty-seven relevant DCP tests pass in the CUDA 13.3/PyTorch 2.13 Kimi-K3 image; four focused eager/graph channel tests pass.
@voipmonitor

Copy link
Copy Markdown
Author

The behavior implemented by this pull request is preserved unchanged in vLLM #384 as commit 81a872525baa. Stable Git patch IDs match. Review and merge #384; this pull request is closed to avoid duplicate review.

lukealonso pushed a commit that referenced this pull request Aug 17, 2026
Record each active B12X DCP graph channel by process-group identity. A pool initialized after the graph context opens now prepares and enters that channel before its first operation, and collective calls select the active channel instead of the eager scheduler channel.

Eager execution is unchanged. The change depends on the graph-owner integration in vLLM #324.

Validation: Ruff format/check and git diff --check pass. Thirty-seven relevant DCP tests pass in the CUDA 13.3/PyTorch 2.13 Kimi-K3 image; four focused eager/graph channel tests pass.
lukealonso pushed a commit that referenced this pull request Aug 17, 2026
Record each active B12X DCP graph channel by process-group identity. A pool initialized after the graph context opens now prepares and enters that channel before its first operation, and collective calls select the active channel instead of the eager scheduler channel.

Eager execution is unchanged. The change depends on the graph-owner integration in vLLM #324.

Validation: Ruff format/check and git diff --check pass. Thirty-seven relevant DCP tests pass in the CUDA 13.3/PyTorch 2.13 Kimi-K3 image; four focused eager/graph channel tests pass.
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.

1 participant