[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 1 commit 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" |
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
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 with no reviewable changes (1)
🚧 Files skipped from review as they are similar to previous changes (2)
Included review availability: Your plan provides up to 12 included reviews per hour; 11 remain after this review. 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 Merge Risk: ⚪ Minimal · up to The PR adds localized cleanup for completed single-rank context transfers and removes the corresponding test waiver; targeted validation passed, and no actionable merge-blocking risk remains beyond normal checks and review. 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" |
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: |
|
/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" |
@chuangz0 Thanks for bringing this to my awareness; confirmed that PR#17535 switched to use async transfer for CTX, which makes the current fixes in this PR non-exercised for the targeted test anymore. The validation evidence in this PR was obtained before including PR#17535's changes, so IMO the fixes are still valid (i.e., once the sync path is explicitly configured). So my plan is to:
|
|
/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 #67135 [ run ] triggered by Bot. Commit: |
|
/bot run --post-merge --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 #67141 [ run ] triggered by Bot. Commit: |
|
PR_Github #67141 Bot args parsing error: CI requested by |
|
PR_Github #67135 [ run ] completed with state |
|
/bot run --post-merge --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 #67508 [ run ] triggered by Bot. Commit: |
|
PR_Github #67508 [ run ] completed with state |
|
/bot run --post-merge --disable-reuse-test --disable-fail-fast --stage-list "GB200-8_GPUs-2_Nodes-PyTorch-Disagg-PerfSanity-CTX1-NODE1-GPU1-GEN1-NODE1-GPU4-Post-Merge-1" |
|
PR_Github #67566 [ run ] triggered by Bot. Commit: |
|
PR_Github #67566 [ run ] completed with state |
|
/bot run --disable-fail-fast |
|
PR_Github #67597 [ run ] triggered by Bot. Commit: |
|
PR_Github #67597 [ run ] completed with state
|
a3f6d8f to
76abf35
Compare
|
Note GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer. |
|
/bot run --disable-fail-fast |
|
PR_Github #67985 [ run ] triggered by Bot. Commit: |
|
PR_Github #67985 [ run ] completed with state
|
Signed-off-by: Chien-Chun Hung <2679986+chienchunhung@users.noreply.github.com>
76abf35 to
d8a8ed1
Compare
|
/bot run --disable-fail-fast |
|
PR_Github #68336 [ run ] triggered by Bot. Commit: |
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-1The 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.a3f6d8f000288f9aa62696719af34c9eb673ea5b:...Post-Merge-1stage.reuse_test=false, selects only the exact GPT-OSS selector above, and records it asPASSEDin 369.39 seconds (1 passed; OpenSearch duration 370.310 seconds).6337974completed with exit code 0 onnvl72167-T[14,16](880-second Slurm runtime).53bbe3cerun directly validates that synchronous path.Related bugs: NVBUG 6590664, parent NVBUG 6581075.
Dev Engineer Review
gen_onlyperformance-sanity waiver.py_executor.pyto poll and reap completed synchronous context transfers for idle single-rank CTX executors.#17535changed CTX workers to asynchronous transfer. The unwaived performance test may not exercise this synchronous-transfer fix directly.QA Engineer Review
tests/unittest/_torch/executor/test_py_executor.py.tests/integration/test_lists/waives.txtfor the GB200 GPT-OSS 120B disaggregated generation configuration.test-db/orqa/files were modified.test-db/orqa/.