[https://nvbugs/6590664][fix] Reap idle single-rank CTX transfers - #17564
[https://nvbugs/6590664][fix] Reap idle single-rank CTX transfers#17564chienchunhung wants to merge 2 commits into
Conversation
|
/bot run --disable-reuse-test --disable-fail-fast --stage-list "GB200-8_GPUs-2_Nodes-PyTorch-Disagg-PerfSanity-CTX1-NODE1-GPU1-GEN1-NODE1-GPU4-Post-Merge-2" |
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Enterprise Run ID: 📒 Files selected for processing (3)
🚧 Files skipped from review as they are similar to previous changes (3)
WalkthroughThe change adds nonblocking context-transfer reaping during single-rank synchronous idle progress, adds regression coverage, and removes the related GB200 GPT-OSS 120B performance-test waiver. ChangesDisaggregated transfer execution
Estimated code review effort: 2 (Simple) | ~10 minutes Mergeability Score: ⚪ Minimal · up to The PR narrowly restores transfer cleanup for the targeted single-rank configuration and removes its waiver; no actionable merge-blocking risk remains beyond normal checks and review. Possibly related PRs
Suggested reviewers: 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
|
PR_Github #65631 [ run ] triggered by Bot. Commit: |
|
PR_Github #65631 [ run ] completed with state
|
|
/bot run --disable-reuse-test --disable-fail-fast --stage-list "GB200-8_GPUs-2_Nodes-PyTorch-Disagg-PerfSanity-CTX1-NODE1-GPU1-GEN1-NODE1-GPU4-Post-Merge-2" |
|
PR_Github #65652 [ run ] triggered by Bot. Commit: |
|
PR_Github #65652 [ run ] completed with state
|
|
/bot run --disable-reuse-test --disable-fail-fast --stage-list "GB200-8_GPUs-2_Nodes-PyTorch-Disagg-PerfSanity-CTX1-NODE1-GPU1-GEN1-NODE1-GPU4-Post-Merge-2" |
|
PR_Github #65737 [ run ] triggered by Bot. Commit: |
|
PR_Github #65737 [ run ] completed with state
|
|
/bot run --disable-reuse-test --disable-fail-fast --stage-list "GB200-8_GPUs-2_Nodes-PyTorch-Disagg-PerfSanity-CTX1-NODE1-GPU1-GEN1-NODE1-GPU4-Post-Merge-2" |
Signed-off-by: Chien-Chun Hung <2679986+chienchunhung@users.noreply.github.com>
Signed-off-by: Chien-Chun Hung <2679986+chienchunhung@users.noreply.github.com>
ac6e8ef to
53bbe3c
Compare
|
/bot run --disable-reuse-test --disable-fail-fast --stage-list "GB200-8_GPUs-2_Nodes-PyTorch-Disagg-PerfSanity-CTX1-NODE1-GPU1-GEN1-NODE1-GPU4-Post-Merge-2" |
|
PR_Github #66052 [ run ] triggered by Bot. Commit: |
|
PR_Github #66052 [ run ] completed with state |
|
/bot run --disable-reuse-test |
|
PR_Github #66312 [ run ] triggered by Bot. Commit: |
|
PR_Github #66312 [ run ] completed with state
|
|
/bot run --disable-fail-fast |
|
PR_Github #66365 [ run ] triggered by Bot. Commit: |
|
PR_Github #66365 [ run ] completed with state
|
Summary
gen_onlyperf-sanity test.Root cause
The affected test uses CTX TP1 and GEN TP4 with
TRTLLM_DISABLE_KV_CACHE_TRANSFER_OVERLAP=1.In synchronous-transfer mode,
_check_disagg_transfer_progress_when_idle()returned at the multi-rank safety guard before pollingcheck_context_transfer_status(). GEN-side KV receives could complete, but the corresponding CTX sender sessions were not reaped. Consequently,AsyncTransferManager.end_transfer()was not reached, completed transfers kept their KV blocks pinned, and CTX eventually stopped admitting requests with its KV pool at 99.9% utilization.The apparent memory pressure and stalled GEN queue were downstream symptoms of missing CTX transfer cleanup—not a device OOM or a GEN model-forward failure.
Fix
When all of the following are true, poll CTX transfer status with timeout 0 before returning:
This is the minimal liveness fix needed by the affected CTX TP1 topology. It is extracted from the broader work in #16402 without including that PR's queue-wakeup, timeout, cancellation, request-broadcast, C++, or client-lifecycle changes.
Safety boundary
The existing guard for multi-rank synchronous transfer remains intact.
A synchronous GEN receive is blocking and rank-local: one model-parallel rank may still be in
request_and_receive_sync()while another reaches the idle-progress path. Context-status progress may enter model-parallel collectives, so polling it from only the idle rank can deadlock.Asynchronous GEN transfer already uses the rank-coordinated idle-progress path added by #17107. The remaining generalization—multi-rank CTX with synchronous GEN transfer—requires explicitly coordinated polling such as the broader queue/broadcast machinery in #16402. It is intentionally out of scope because this test uses CTX TP1.
Targeted regression
Test
perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb200_gpt-oss-120b-fp4_8k1k_con1024_ctx1_tp1_gen1_tp4_eplb0_mtp0_ccb-NIXL]CI stage
GB200-8_GPUs-2_Nodes-PyTorch-Disagg-PerfSanity-CTX1-NODE1-GPU1-GEN1-NODE1-GPU4-Post-Merge-2The test remains registered in
tests/integration/test_lists/test-db/l0_gb200_multi_nodes_perf_sanity_ctx1_node1_gpu1_gen1_node1_gpu4.yml; this PR removes only its waiver fromwaives.txt.Validation
53bbe3cecf6e9f10574327865f0ab88ab2d5fe44:PASSED—not waived or skipped—in 410.013 seconds on GB200 Slurm job6131689.Related bugs: NVBUG 6590664, parent NVBUG 6581075.