Skip to content

[https://nvbugs/6480621][fix] Preserve KV ownership in disaggregated precheck - #17223

Merged
chienchunhung merged 8 commits into
NVIDIA:mainfrom
chienchunhung:codex/nvbug-6480621-precheck-ownership
Aug 12, 2026
Merged

[https://nvbugs/6480621][fix] Preserve KV ownership in disaggregated precheck#17223
chienchunhung merged 8 commits into
NVIDIA:mainfrom
chienchunhung:codex/nvbug-6480621-precheck-ownership

Conversation

@chienchunhung

@chienchunhung chienchunhung commented Aug 3, 2026

Copy link
Copy Markdown
Collaborator

Summary

Fix the Python/NIXL block-all ownership contract used by the disaggregated precheck and cache-transceiver harness. An expired polling slice is not proof that transport released the KV pages.

Impact

Before this fix, these short-lived validation processes could free, reuse, or deregister KV pages while transport might still read them, causing timing-dependent payload mismatches or hangs. Normal PyExecutor nonblocking polling is unchanged; this is not evidence of corrupted serving output. An out-of-tree caller of the internal Python block-all API that recycles storage solely from its return could share the hazard.

Fix

  • Use kv_transfer_sender_future_timeout_ms only as a bounded sender wait slice and kv_transfer_timeout_ms as the absolute sender deadline.
  • Keep sender TIMEOUT nonterminal and retain the session/pages.
  • Require exact request/rank/role completion and CUDA quiescence before release; fail closed in the validation process otherwise.
  • Reject kv_transfer_timeout_ms: null for Python V2 before worker/CUDA setup. A receive timeout is currently terminal and closes the session, so silently substituting a receive fallback would reintroduce the ownership risk.
  • Resolve model/runtime selection with serving's current three-argument resolver and real TP/PP/CP/MTP inputs.

Validation

  • Current head cb03f673ee8ebb0f0b2c134d35d1d596d3b60572: 92 CPU-capable precheck tests passed; focused ownership/resolver tests passed 31 with 2 optional runtime skips.
  • Ruff, Ruff format, syntax, spelling, whitespace, conflict, diff, DCO, and semantic range-diff checks passed.
  • Previous full L0 #52917 on b880173d5 ran 59,207 tests. All 242 changed-path tests passed; its three failures were one recurring process/infra termination and two transient host-performance regressions seen on unrelated PRs.
  • Fresh full CI: trigger comment → PR_Github #65362 → L0 #53127 at the exact current head. The full multi-GPU portion still requires the ci: full pre-merge approved label. The exact 44-GPU proxy runs on stacked PR [https://nvbugs/6480621][test] Revert to 60-second KV transfer timeout for GB300 DeepSeek V4 Pro disaggregated perf-sanity #17137 with reuse disabled.

The original 8-CTX, concurrency-1760 NVBug workload remains a separate stress-validation requirement.

Related PRs

Dev Engineer Review

  • Added request-level transfer deadlines with bounded sender polling intervals.
  • Retained sessions and KV pages after nonterminal TIMEOUT.
  • Added ownership checks, CUDA synchronization, cross-rank and cross-role completion validation, and fatal handling for incomplete transfers.
  • Added a 60-second fallback deadline for native transmit sessions.
  • Required LLM_MODELS_ROOT for enabled prechecks and aligned precheck model and runtime resolution with serving.
  • Updated Python/NIXL callers and run_cache_transceiver_test.py to preserve ownership until quiescence is proven.
  • Added failures for missing required auxiliary tasks.
  • Documentation and configuration updates match the new timeout and ownership rules.
  • Review follow-up is required for the Python receive path when kv_transfer_timeout_ms is unset. Confirm that it applies the required finite fallback.
  • Review follow-up is required for possible overlap with PRs #17137 and #17121, including duplicate llm_models_root keyword handling and landing order.
  • Full CI pipeline 52917 failed. The original 8-CTX, concurrency-1760 workload remains a separate stress-validation requirement.

QA Engineer Review

  • Added test_precheck_passes_mtp_exact_block_boundary.
  • Expanded bounded-polling coverage for timeout retention, shared deadlines, cancellation, auxiliary-task failures, missing tasks, consensus behavior, and timeout propagation.
  • Expanded precheck configuration tests for model resolution, LLM_MODELS_ROOT quoting, disabled-precheck behavior, and command parsing.
  • Expanded precheck runtime tests for ownership release, speculative pages, synchronization, failures, timeouts, hard aborts, and peer safety.
  • Added cache-transceiver harness tests for completion validation, dispatch failures, CUDA synchronization, release handshakes, peer status, and SIGKILL fallback.
  • Updated performance-submit tests for environment extraction and LLM_MODELS_ROOT resolution.
  • No files under tests/integration/test_lists/ were changed. Test-list coverage data is unavailable.
  • Verdict: needs follow-up.

@chienchunhung

Copy link
Copy Markdown
Collaborator Author

/bot run --disable-fail-fast

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #63581 [ run ] triggered by Bot. Commit: dc597f9 Link to invocation

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #63581 [ run ] completed with state FAILURE. Commit: dc597f9
/LLM/main/L0_MergeRequest_PR pipeline #51545 completed with status: 'FAILURE'

CI Report

⚠️ Action Required:

  • Please check the failed tests and fix your PR
  • If you cannot view the failures, ask the CI triggerer to share details
  • Once fixed, request an NVIDIA team member to trigger CI again

CI Agent Failure Analysis

Link to invocation

Copy link
Copy Markdown
Collaborator Author

/bot run --disable-fail-fast --stage-list "DGX_H100-PyTorch-4,A30-PyTorch-2,GB300-12_GPUs-3_Nodes-PyTorch-Disagg-PerfSanity-FUNCTIONAL-ONLY-CTX1-NODE1-GPU4-GEN1-NODE2-GPU8-1"

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #63819 [ run ] triggered by Bot. Commit: 79ec91f Link to invocation

@chienchunhung
chienchunhung requested a review from nv-xtf August 4, 2026 18:34
@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #63819 [ run ] completed with state SUCCESS. Commit: 79ec91f
/LLM/main/L0_MergeRequest_PR pipeline #51760 (Partly Tested) completed with status: 'SUCCESS'

CI Report

Link to invocation

@chienchunhung
chienchunhung force-pushed the codex/nvbug-6480621-precheck-ownership branch from c42d28b to f9ca117 Compare August 4, 2026 23:44

Copy link
Copy Markdown
Collaborator Author

/bot run --disable-fail-fast

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #63865 [ run ] triggered by Bot. Commit: f9ca117 Link to invocation

@chienchunhung
chienchunhung marked this pull request as ready for review August 4, 2026 23:57
@chienchunhung
chienchunhung requested review from a team as code owners August 4, 2026 23:57
@coderabbitai

coderabbitai Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Walkthrough

The change propagates LLM_MODELS_ROOT, adds bounded transfer deadlines, tightens KV-cache manager resolution, limits verification to requested prompt blocks, and delays page release until transfer ownership is confirmed. Tests cover configuration, polling, failures, ownership, cancellation, aborts, and MTP boundaries.

Changes

Cache transceiver precheck

Layer / File(s) Summary
Model-root configuration wiring
jenkins/scripts/perf/..., tests/scripts/perf-sanity/cache_transceiver_precheck/*, tests/unittest/scripts/test_perf_submit.py, tests/unittest/others/test_cache_transceiver_precheck_config.py
Enabled prechecks resolve and export LLM_MODELS_ROOT. Parsing, fallback, disabled behavior, and shell-safe values are tested.
Bounded transfer completion polling
tensorrt_llm/_torch/disaggregation/native/transfer.py, tensorrt_llm/_torch/disaggregation/transceiver.py, tensorrt_llm/llmapi/llm_args.py, tests/unittest/disaggregated/test_transceiver_bounded_polling.py
TxSession uses repeated bounded waits and one shared deadline. It checks failures, cancellation, auxiliary work, and terminal states. Sender timeouts remain nonterminal.
Precheck validation and resource ownership
tests/scripts/perf-sanity/cache_transceiver_precheck/*, tests/unittest/others/test_cache_transceiver_precheck_run.py
Automatic manager resolution fails explicitly when unresolved. KV checks use the requested prompt length. Allocations remain until completion, synchronization, and cross-rank ownership checks succeed.
Example sweep abort and regression coverage
examples/disaggregated/slurm/cache_transceiver_test/*, tests/unittest/disaggregated/test_cache_transceiver_harness.py, tests/unittest/disaggregated/test_cache_transceiver_precheck_e2e.py, tests/unittest/others/test_cache_transceiver_precheck_config.py
The example driver persists remaining-cell status and hard-aborts unsafe sweeps. Harness tests cover ownership flows, and the end-to-end test covers an MTP transfer boundary.

Estimated code review effort: 5 (Critical) | ~90 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Precheck
  participant ContextTransfer
  participant GenerationTransfer
  participant KVMemory
  Precheck->>ContextTransfer: Dispatch and validate context transfer
  Precheck->>GenerationTransfer: Dispatch and validate generation transfer
  ContextTransfer->>GenerationTransfer: Coordinate ownership release
  GenerationTransfer->>KVMemory: Release pages after synchronization
  Precheck->>KVMemory: Retain pages and hard-abort when quiescence is unproven
Loading

Possibly related PRs

Suggested labels: ci: full pre-merge approved

Suggested reviewers: shixiaowei02, pcastonguay, dpitman-nvda, yiqingy0

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 15.56% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title clearly identifies the fix to preserve KV ownership in the disaggregated precheck and follows the required ticket and type format.
Description check ✅ Passed The description explains the problem, impact, fix, validation, and related PRs, with sufficient test and implementation details.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick comments (2)
tests/unittest/disaggregated/test_transceiver_bounded_polling.py (1)

441-448: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Add a case that fails a sibling between wait slices.

test_tx_session_blocking_wait_detects_failed_sibling_behind_pending_task never reaches the loop body. wait_complete calls has_failed() first, and the ERROR sibling is already present, so the method returns FAILED before any task.wait() call. The assertion pending_task.wait_calls == [] confirms this. The test therefore duplicates test_tx_session_blocking_wait_treats_task_failure_as_terminal instead of covering the in-loop has_failed() check at tensorrt_llm/_torch/disaggregation/native/transfer.py lines 1372-1375.

To cover that check, start with no failed task and flip a sibling to ERROR from inside the first wait() call.

♻️ Proposed test that exercises the in-loop sibling check
 def test_tx_session_blocking_wait_detects_failed_sibling_behind_pending_task() -> None:
     pending_task = _FakeTask(TaskStatus.TRANSFERRING, wait_result=False)
-    failed_task = _FakeTask(TaskStatus.ERROR)
+    sibling = _FakeTask(TaskStatus.TRANSFERRING, wait_result=False)
-    session = _make_tx_session([pending_task, failed_task])
+    session = _make_tx_session([pending_task, sibling])
+    wait = pending_task.wait
+
+    def fail_sibling_during_wait(timeout: Optional[float] = None) -> bool:
+        result = wait(timeout)
+        sibling.status = TaskStatus.ERROR
+        return result
+
+    pending_task.wait = fail_sibling_during_wait
 
     assert session.wait_complete(blocking=True) == WaitResult.FAILED
-    assert pending_task.wait_calls == []
-    assert failed_task.wait_calls == []
+    assert pending_task.wait_calls == [0.25]
+    assert sibling.wait_calls == []
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tests/unittest/disaggregated/test_transceiver_bounded_polling.py` around
lines 441 - 448, Update
test_tx_session_blocking_wait_detects_failed_sibling_behind_pending_task so no
task is initially in ERROR; make the first pending task’s wait() transition the
sibling task to ERROR, then assert wait_complete(blocking=True) returns
WaitResult.FAILED and verifies the expected wait calls. This must exercise the
in-loop has_failed() check rather than the initial pre-loop failure check.
tensorrt_llm/_torch/disaggregation/native/transfer.py (1)

1359-1394: 🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick win

Remove stale WaitResult.TIMEOUT handling. The executor passes atLeastNum with a default of 0; no caller under tensorrt_llm passes None. TxSession and RxSession return only COMPLETED, FAILED, or None, so remove the unreachable TIMEOUT, timed_out, and related consensus plumbing.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tensorrt_llm/_torch/disaggregation/native/transfer.py` around lines 1359 -
1394, Remove the obsolete WaitResult.TIMEOUT and timed_out consensus handling
from the blockAll execution path, including any related plumbing in TxSession
and RxSession. Preserve the existing COMPLETED, FAILED, and None outcomes, and
keep the atLeastNum default behavior without adding None handling.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@tensorrt_llm/_torch/disaggregation/native/transfer.py`:
- Around line 1359-1394: Remove the obsolete WaitResult.TIMEOUT and timed_out
consensus handling from the blockAll execution path, including any related
plumbing in TxSession and RxSession. Preserve the existing COMPLETED, FAILED,
and None outcomes, and keep the atLeastNum default behavior without adding None
handling.

In `@tests/unittest/disaggregated/test_transceiver_bounded_polling.py`:
- Around line 441-448: Update
test_tx_session_blocking_wait_detects_failed_sibling_behind_pending_task so no
task is initially in ERROR; make the first pending task’s wait() transition the
sibling task to ERROR, then assert wait_complete(blocking=True) returns
WaitResult.FAILED and verifies the expected wait calls. This must exercise the
in-loop has_failed() check rather than the initial pre-loop failure check.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: d9c1baee-87b6-4c9b-aee8-8c23bd2307af

📥 Commits

Reviewing files that changed from the base of the PR and between e409c14 and f9ca117.

📒 Files selected for processing (12)
  • jenkins/scripts/perf/local/submit.py
  • jenkins/scripts/perf/submit.py
  • tensorrt_llm/_torch/disaggregation/native/transfer.py
  • tensorrt_llm/_torch/disaggregation/transceiver.py
  • tests/scripts/perf-sanity/cache_transceiver_precheck/README.md
  • tests/scripts/perf-sanity/cache_transceiver_precheck/precheck_config.py
  • tests/scripts/perf-sanity/cache_transceiver_precheck/run_precheck.py
  • tests/unittest/disaggregated/test_cache_transceiver_precheck_e2e.py
  • tests/unittest/disaggregated/test_transceiver_bounded_polling.py
  • tests/unittest/others/test_cache_transceiver_precheck_config.py
  • tests/unittest/others/test_cache_transceiver_precheck_run.py
  • tests/unittest/scripts/test_perf_submit.py

@BowenFu

BowenFu commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Could you keep the blocking path bounded and consistent before merge?

  • Use kv_transfer_timeout_ms as the overall deadline while retaining _timeout_s as the polling interval.
  • Apply the same fix to run_cache_transceiver_test.py, which also waits for all transfers and then frees the sequence.
  • When auxiliary transfer is required but aux_task is absent, do not return from the blocking path as if waiting completed.
  • Remove WaitResult.TIMEOUT and the associated timed_out plumbing if no path can return that value after this change.

Without these changes, a stalled peer can wait forever or pages can still be released before transfer completion.

@Shixiaowei02

Copy link
Copy Markdown
Collaborator

The receive side did not get the same fallback though, so a null kv_transfer_timeout_ms still leaves it unbounded on the PYTHON runtime.

@Shixiaowei02

Copy link
Copy Markdown
Collaborator

Thanks for the effort! Btw, #17137 is #17223 plus one yaml, and #17121 carries the same block-verification fix as #17223 while adding llm_models_root to the same call at a different argument position, so merging both gives a repeated keyword argument. Which one should land first, and who drops the duplicate?

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #65120 [ run ] completed with state FAILURE. Commit: b880173
/LLM/main/L0_MergeRequest_PR pipeline #52917 completed with status: 'FAILURE'

CI Report

⚠️ Action Required:

  • Please check the failed tests and fix your PR
  • If you cannot view the failures, ask the CI triggerer to share details
  • Once fixed, request an NVIDIA team member to trigger CI again

CI Agent Failure Analysis

Link to invocation

Signed-off-by: Chien-Chun Hung <2679986+chienchunhung@users.noreply.github.com>
Signed-off-by: Chien-Chun Hung <2679986+chienchunhung@users.noreply.github.com>
Signed-off-by: Chien-Chun Hung <2679986+chienchunhung@users.noreply.github.com>
Signed-off-by: Chien-Chun Hung <2679986+chienchunhung@users.noreply.github.com>
Signed-off-by: Chien-Chun Hung <2679986+chienchunhung@users.noreply.github.com>
Signed-off-by: Chien-Chun Hung <2679986+chienchunhung@users.noreply.github.com>
Signed-off-by: Chien-Chun Hung <2679986+chienchunhung@users.noreply.github.com>
Signed-off-by: Chien-Chun Hung <2679986+chienchunhung@users.noreply.github.com>
@chienchunhung
chienchunhung force-pushed the codex/nvbug-6480621-precheck-ownership branch from b880173 to cb03f67 Compare August 11, 2026 18:25

Copy link
Copy Markdown
Collaborator Author

/bot run --disable-fail-fast

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick comments (1)
tests/unittest/others/test_cache_transceiver_precheck_run.py (1)

671-681: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Add coverage for the post-ownership verification path.

_gen_run_wave_runner fixes plan to {"verify_data": False, "warmup_requests": 0}, so no test reaches gen_run_wave lines 1174-1188. That block changed in this PR: verification now runs after the ownership proof, _free_all runs before the verification consensus, and a verification failure raises _TransferError rather than _FatalTransferError. Add a case with verify_data: True that asserts the free-then-raise ordering.

♻️ Proposed helper change to enable the case
-    runner.plan = {"verify_data": False, "warmup_requests": 0}
+    runner.plan = {"verify_data": verify_data, "warmup_requests": 0}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tests/unittest/others/test_cache_transceiver_precheck_run.py` around lines
671 - 681, Extend the test coverage around _gen_run_wave_runner and gen_run_wave
with a verify_data: True case that exercises post-ownership verification. Assert
that _free_all executes before the verification consensus and that a
verification failure raises _TransferError rather than _FatalTransferError,
while preserving the existing helper behavior for other tests.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@tests/unittest/others/test_cache_transceiver_precheck_run.py`:
- Around line 671-681: Extend the test coverage around _gen_run_wave_runner and
gen_run_wave with a verify_data: True case that exercises post-ownership
verification. Assert that _free_all executes before the verification consensus
and that a verification failure raises _TransferError rather than
_FatalTransferError, while preserving the existing helper behavior for other
tests.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 10c11ef8-b0e9-4dac-b26d-f05bc63cd1da

📥 Commits

Reviewing files that changed from the base of the PR and between b880173 and cb03f67.

📒 Files selected for processing (9)
  • tensorrt_llm/_torch/disaggregation/native/transfer.py
  • tensorrt_llm/_torch/disaggregation/transceiver.py
  • tensorrt_llm/llmapi/llm_args.py
  • tests/scripts/perf-sanity/cache_transceiver_precheck/README.md
  • tests/scripts/perf-sanity/cache_transceiver_precheck/precheck_config.py
  • tests/scripts/perf-sanity/cache_transceiver_precheck/run_precheck.py
  • tests/unittest/disaggregated/test_transceiver_bounded_polling.py
  • tests/unittest/others/test_cache_transceiver_precheck_config.py
  • tests/unittest/others/test_cache_transceiver_precheck_run.py
🚧 Files skipped from review as they are similar to previous changes (6)
  • tensorrt_llm/llmapi/llm_args.py
  • tensorrt_llm/_torch/disaggregation/transceiver.py
  • tests/scripts/perf-sanity/cache_transceiver_precheck/README.md
  • tensorrt_llm/_torch/disaggregation/native/transfer.py
  • tests/scripts/perf-sanity/cache_transceiver_precheck/precheck_config.py
  • tests/unittest/disaggregated/test_transceiver_bounded_polling.py

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #65362 [ run ] triggered by Bot. Commit: cb03f67 Link to invocation

@chienchunhung

chienchunhung commented Aug 11, 2026

Copy link
Copy Markdown
Collaborator Author

The receive side did not get the same fallback though, so a null kv_transfer_timeout_ms still leaves it unbounded on the PYTHON runtime.

Addressed. Python V2 now rejects an unset kv_transfer_timeout_ms before worker/CUDA initialization, so neither sender nor receiver can become unbounded. I intentionally did not substitute a receive fallback because receive timeout is terminal and closes the session, which could recycle or deregister pages while remote writes remain active. Finite configured values continue to bound both Tx and Rx.

Thanks for the effort! Btw, #17137 is #17223 plus one yaml, and #17121 carries the same block-verification fix as #17223 while adding llm_models_root to the same call at a different argument position, so merging both gives a repeated keyword argument. Which one should land first, and who drops the duplicate?

I suggest we land #17223 first to get the canonical ownership/deadline fix. Then #17121 could take #17223’s versions of the shared block-verification, model/runtime-resolution, and llm_models_root call-site changes. Any independent fabric-memory, OCI/environment, or progress-handling changes from #17121 should remain.

cc: @Shixiaowei02 , @chuangz0

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #65362 [ run ] completed with state SUCCESS. Commit: cb03f67
/LLM/main/L0_MergeRequest_PR pipeline #53127 completed with status: 'FAILURE'

CI Report

⚠️ Action Required:

  • Please check the failed tests and fix your PR
  • If you cannot view the failures, ask the CI triggerer to share details
  • Once fixed, request an NVIDIA team member to trigger CI again

CI Agent Failure Analysis

Link to invocation

@dpitman-nvda dpitman-nvda left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Approval for infra

@chienchunhung

Copy link
Copy Markdown
Collaborator Author

/bot run --disable-fail-fast

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #65464 [ run ] triggered by Bot. Commit: cb03f67 Link to invocation

@YihuiLu512 YihuiLu512 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

LGTM

@hyukn hyukn left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

LGTM

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #65464 [ run ] completed with state FAILURE. Commit: cb03f67
/LLM/main/L0_MergeRequest_PR pipeline #53213 completed with status: 'FAILURE'

CI Report

⚠️ Action Required:

  • Please check the failed tests and fix your PR
  • If you cannot view the failures, ask the CI triggerer to share details
  • Once fixed, request an NVIDIA team member to trigger CI again

CI Agent Failure Analysis

Link to invocation

@chuangz0 chuangz0 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

LGTM

@chienchunhung

Copy link
Copy Markdown
Collaborator Author

/bot run --disable-fail-fast

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #65616 [ run ] triggered by Bot. Commit: cb03f67 Link to invocation

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #65616 [ run ] completed with state SUCCESS. Commit: cb03f67
/LLM/main/L0_MergeRequest_PR pipeline #53340 completed with status: 'SUCCESS'

CI Report

Link to invocation

@chienchunhung
chienchunhung merged commit 3d3d7c9 into NVIDIA:main Aug 12, 2026
19 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

api-compatible Accepted LLM API contract change that is backwards-compatible ci: full pre-merge approved

Projects

None yet

Development

Successfully merging this pull request may close these issues.