[https://nvbugs/6448152][perf] TEST ONLY; DO NOT REVIEW: publish PP transfer status from workers - #16386
Conversation
|
/bot run --disable-fail-fast --stage-list "A30-CPP-1, DGX_H100-4_GPUs-CPP-1, DGX_H100-4_GPUs-PyTorch-Others-1, DGX_H100-4_GPUs-PyTorch-Others-2, GB300-12_GPUs-3_Nodes-PyTorch-Disagg-PerfSanity-CTX1-NODE1-GPU4-GEN1-NODE2-GPU8-Post-Merge-1" |
|
PR_Github #59272 [ run ] triggered by Bot. Commit: |
|
PR_Github #59272 [ run ] completed with state
|
222b355 to
2594707
Compare
|
/bot run --disable-fail-fast --stage-list "A30-CPP-1, DGX_H100-4_GPUs-CPP-1, DGX_H100-4_GPUs-PyTorch-Others-1, DGX_H100-4_GPUs-PyTorch-Others-2, GB300-12_GPUs-3_Nodes-PyTorch-Disagg-PerfSanity-CTX1-NODE1-GPU4-GEN1-NODE2-GPU8-Post-Merge-1" |
|
PR_Github #59307 [ run ] triggered by Bot. Commit: |
Signed-off-by: Chien-Chun Hung <2679986+chienchunhung@users.noreply.github.com>
2594707 to
30c27a6
Compare
|
/bot run --disable-fail-fast --stage-list "A30-CPP-1, DGX_H100-4_GPUs-CPP-1, DGX_H100-4_GPUs-PyTorch-Others-1, DGX_H100-4_GPUs-PyTorch-Others-2, GB300-12_GPUs-3_Nodes-PyTorch-Disagg-PerfSanity-CTX1-NODE1-GPU4-GEN1-NODE2-GPU8-Post-Merge-1" |
|
PR_Github #59341 [ run ] triggered by Bot. Commit: |
|
PR_Github #59307 [ run ] completed with state |
|
PR_Github #59341 [ run ] completed with state
|
Summary
This PR removes the cross-rank context-transfer consensus introduced by #15139 from the scheduler hot path for the affected default-off cancellation configuration:
completedorfailed) to every context pipeline-parallel peer before making its local future ready.Generation-transfer consensus and active in-flight cancellation behavior are unchanged.
Why
NVBUG#6448152 tracks an output-token-throughput regression in the GB300 disaggregated DeepSeek-R1 workload after #15139 added required cross-rank transfer-status consensus (1573 to 817 output tok/s in the reported run). The two synchronous hierarchical status collectives can serialize scheduler/model progress across context PP ranks.
The previous draft implementation pipelined an
MPI_Iallgather, but the exact workload remained near the regressed result: a later scheduler epoch still needed matching peer participation, and a rank already inside model forward could delay the next snapshot. This reconstruction removes peer scheduler participation from terminal-vote publication while preserving the consistency requirement.Qualified activation scope
The worker-published path is selected only when every context PP rank reports protocol v1 and all of these conditions hold:
MPI_THREAD_MULTIPLEDirect UCX, NIXL-libfabric, MPI/Mooncake transports, ProcessGroup/Python transceivers, TP/CP/attention-DP topologies, overlap-off/layer-wise modes, and active cancellation use the same status engine with the existing hierarchical collective consensus backend. The one-time startup allgather is same-binary configuration agreement, not rolling mixed-version negotiation; all PP workers in one deployment must use the same build.
Safety and lifecycle invariants
Testing
Local checks:
scripts/check_test_list.py --check-duplicate-waivesand--validatewith Python 3.13 (2,182 entries validated)tests/integration/defs/disaggregated/test_disaggregated.pygit diff --checkAdded coverage:
ctxpp4_gentp4disaggregated integration assertion that the qualified C++ NIXL/UCX path activatesmark_complete, terminal cleanup, and no duplicate result on the next pollA local CUDA/MPI build was not available. C++ compilation and multi-GPU execution must pass in CI.
Performance readiness gate
Functional CI is necessary but not sufficient. Before marking this PR ready, run the exact NVBUG workload as a same-container/main A/B for at least 2-3 iterations:
GB300-12_GPUs-3_Nodes-PyTorch-Disagg-PerfSanity-CTX1-NODE1-GPU4-GEN1-NODE2-GPU8-Post-Merge-1disagg_upload-e2e-gb300_deepseek-r1-fp4_128k8k_con256_ctx1_pp4_gen1_dep8_eplb0_mtp1_ccb-NIXLThe protocol sends
P * (P - 1)tiny vote messages per request. PP4 is the qualified NVBUG scope; PP8/high-request-rate stress is required before making a broader performance claim.Related PRs
#16386 is a semantic sibling of #15794, not its parent or child. #16386 is qualified only for PP > 1 with cancellation off; #15794 owns active-cancellation safety. #15798 negotiates cancellation mode between CTX and GEN and is not part of this intra-CTX PP protocol. The changes overlap textually in
cacheTransceiver.cpp, so whichever lands second must rebase carefully.flowchart LR MAIN["main<br/>#15238 + #15737 merged"] P16386["#16386<br/>default-off PP consensus performance"] P15794["#15794<br/>active-cancellation protocol safety"] P15795["#15795<br/>PyExecutor cancellation lifecycle"] P15798["#15798<br/>CTX/GEN cancellation negotiation"] P15738["#15738<br/>qualified default-on cancellation"] MAIN --> P16386 MAIN --> P15794 P15794 --> P15795 P15794 --> P15798 P15795 --> P15738 P15798 --> P15738