Skip to content

[TRTLLM-14727][test] Create MX donor-receiver qualification test harness - #17222

Merged
chienchunhung merged 16 commits into
NVIDIA:mainfrom
chienchunhung:codex/mx-e2e-harness
Aug 17, 2026
Merged

[TRTLLM-14727][test] Create MX donor-receiver qualification test harness#17222
chienchunhung merged 16 commits into
NVIDIA:mainfrom
chienchunhung:codex/mx-e2e-harness

Conversation

@chienchunhung

@chienchunhung chienchunhung commented Aug 3, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • Add a reusable real-GPU end-to-end qualification harness for ModelExpress donor-to-receiver weight loading.
  • Add initial Llama BF16 coverage for TP1 and TP2 using TinyLlama by default.
  • Add dedicated H100 pre-merge stages with isolated Redis and ModelExpress 0.4.1 services.

What This Verifies

  • Run the same prompt through a Hugging Face baseline, an MX donor, and a metadata-only MX receiver on disjoint GPU sets, then require exact output-token equality.
  • Remove every receiver weight shard before startup so local Hugging Face weight fallback cannot satisfy the receiver load.
  • Require complete per-rank parameter matching, nonzero direct-transfer evidence, and no fallback markers.
  • Exercise TP1 in the multi-GPU stage and TP2 in the explicitly selected on-demand stage.

Scope

  • Add the worker, pytest orchestrator, test-db context, Jenkins service and stage wiring, focused unit coverage, and ModelExpress qualification documentation.
  • When MX_TRANSFER_LOG_DIR is set, enable upstream ModelExpress INFO records so the harness can verify per-rank transfer evidence.
  • For any MX receiver configured with query_timeout_s == 0, fall back to disk when no source is registered, before post-transform receiver preparation can mutate the module graph.
  • Do not otherwise change profile registration, source-identity matching, transport behavior, or model-family support.
  • Cover the positive Llama TP1/TP2 workflow only; mismatch and failure-mode qualification remains follow-up work.
  • Require NIXL and the ModelExpress 0.4.1 client installed by the TRT-LLM container's [mx] extra.

Extending Model Coverage

  • Add an MxE2ECase row with the checkpoint path, canonical-cache prefix, and TP size.
  • Add the exact parametrized test ID to tests/integration/test_lists/test-db/l0_model_express.yml.
  • The new row then reuses the baseline, donor, metadata-only receiver, token comparison, transfer verification, and no-disk-fallback workflow without model-specific harness code.
  • Keep one representative TP1 case in ordinary multi-GPU coverage; run TP2 on demand for new or changed parallel profiles.

Follow-ups

  • Remove the unused serviceInitContainerConfig declaration and interpolation from jenkins/L0_Test.groovy; it currently emits only a blank line and does not affect generated pod specifications (review thread).
  • Document TRTLLM_MX_E2E_TIMEOUT_S in docs/source/features/model-express.md; it defaults to 1200 seconds and bounds each worker and the donor-readiness wait (review thread).
  • These optional cleanup and documentation items do not affect qualification behavior and are intentionally deferred to preserve the full CI evidence on the current head.

Related PRs

Validation

@chienchunhung chienchunhung changed the title [TRTLLM-12352][test] add MX donor receiver qualification harness [TRTLLM-14727][test] add MX donor receiver qualification harness Aug 3, 2026
@chienchunhung

Copy link
Copy Markdown
Collaborator Author

/bot run --stage-list "DGX_H100-2_GPUs-PyTorch-ModelExpress-1"

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #63881 [ run ] triggered by Bot. Commit: 68818df Link to invocation

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #63881 [ run ] completed with state FAILURE. Commit: 68818df
/LLM/main/L0_MergeRequest_PR pipeline #51821 (Partly Tested) completed with status: 'UNSTABLE'

CI Report

⚠️ Multi-GPU Label Required:
Multi-GPU tests require the ci: full pre-merge approved label on this PR. Ask a member of NVIDIA/trt-llm-ci-approvers to add the label, then re-trigger CI with the same bot command (no rebase needed).

⚠️ 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

Link to invocation

Copy link
Copy Markdown
Collaborator Author

Rebased onto the latest main (ac54855177) and moved this PR to ready for review. The code-owner self-review and local static/unit validation are clean.

The previous targeted H100 request was rejected before execution because this PR lacks ci: full pre-merge approved. Could a member of @NVIDIA/trt-llm-ci-approvers apply that label? Once it is present, I will run DGX_H100-2_GPUs-PyTorch-ModelExpress-1 first, followed by the TP2 on-demand stage.

@coderabbitai

coderabbitai Bot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It 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 reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

The pull request adds ModelExpress donor/receiver GPU qualification tests, a reusable worker, Kubernetes sidecar support, H100 CI stages, on-demand stage filtering, test configuration, and qualification documentation.

Changes

ModelExpress qualification

Layer / File(s) Summary
Worker and donor-receiver test flow
tests/integration/defs/model_express/*
Adds worker roles, prerequisite checks, checkpoint snapshots, isolated GPU execution, lifecycle control, deterministic output checks, and transfer-log validation.
Kubernetes sidecar and test-stage wiring
jenkins/L0_Test.groovy
Adds Redis and ModelExpress sidecars, localhost configuration, probes, resources, pinned images, and two H100 test stages.
Automatic stage selection rules
jenkins/L0_Test.groovy
Excludes -OnDemand- stages from automatic multi-GPU, pre-merge, auto-trigger, and CBTS selections.
Qualification configuration and documentation
tests/integration/test_lists/test-db/l0_model_express.yml, tests/integration/test_lists/qa/llm_function_core.txt, docs/source/features/model-express.md
Defines TP=1 and TP=2 H100 tests and documents qualification commands, prerequisites, GPU allocation, and CI coverage.

Estimated code review effort: 4 (Complex) | ~60 minutes

Sequence Diagram(s)

sequenceDiagram
  participant QualificationTest
  participant MxE2EWorker
  participant ModelExpress
  participant Redis
  QualificationTest->>MxE2EWorker: Start baseline, donor, and receiver
  MxE2EWorker->>ModelExpress: Publish and consume model parameters
  ModelExpress->>Redis: Coordinate synchronization
  MxE2EWorker-->>QualificationTest: Write token IDs and transfer logs
  QualificationTest->>QualificationTest: Compare outputs and validate transfers
Loading

Suggested reviewers: qijune, schetlur-nv, yiqingy0

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
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 uses the required ticket and type format and clearly identifies the ModelExpress donor-receiver qualification harness.
Description check ✅ Passed The description explains the purpose, scope, verification steps, validation results, and checklist items for the ModelExpress harness.
✨ 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.

Actionable comments posted: 3

🧹 Nitpick comments (3)
tests/integration/defs/model_express/mx_e2e_worker.py (1)

100-105: 🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick win

Bound the donor wait loop.

The donor polls stop_file with no deadline. If the orchestrating test process dies before it writes the stop file, this process holds its GPUs and the loaded engine until the CI pod ends.

Add a maximum wait so the donor exits on its own.

♻️ Proposed bounded wait
         if args.role == "donor":
             assert args.ready_file is not None
             assert args.stop_file is not None
             args.ready_file.write_text("ready\n", encoding="utf-8")
-            while not args.stop_file.exists():
-                time.sleep(0.2)
+            deadline = time.monotonic() + args.max_serve_seconds
+            while not args.stop_file.exists():
+                if time.monotonic() >= deadline:
+                    raise TimeoutError(
+                        f"The stop file {args.stop_file} did not appear within "
+                        f"{args.max_serve_seconds}s"
+                    )
+                time.sleep(0.2)

Add the matching argument in _parse_args:

parser.add_argument("--max-serve-seconds", type=float, default=1800.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/integration/defs/model_express/mx_e2e_worker.py` around lines 100 -
105, Bound the donor polling loop in the role-handling flow by adding the
proposed --max-serve-seconds argument in _parse_args with its default, then have
the donor stop waiting when either stop_file appears or the configured deadline
expires. Use a monotonic elapsed-time check around the existing time.sleep
polling.
jenkins/L0_Test.groovy (1)

3328-3390: 🩺 Stability & Availability | 🔵 Trivial

Confirm native sidecar and ModelExpress image support.

Use Kubernetes 1.33 or later, or enable SidecarContainers on an older supported cluster. Otherwise, the Redis init container can block pod startup.

Confirm that modelexpress-server:0.4.1 provides /app/modelexpress-server and accepts --port 8001, MX_METADATA_BACKEND=redis, and REDIS_URL=redis://127.0.0.1:6379. With TRTLLM_MX_E2E_REQUIRED=1, an incompatible image fails the stage.

🤖 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 `@jenkins/L0_Test.groovy` around lines 3328 - 3390, Update the test setup
around serviceInitContainerConfig and serviceContainerConfig to explicitly
require Kubernetes 1.33+ or enable the SidecarContainers feature for older
supported clusters, preventing Redis from blocking pod startup. Verify the
configured MODEL_EXPRESS_SERVER_IMAGE resolves to modelexpress-server:0.4.1 and
supports /app/modelexpress-server with --port 8001, MX_METADATA_BACKEND=redis,
and REDIS_URL=redis://127.0.0.1:6379; ensure TRTLLM_MX_E2E_REQUIRED=1 causes the
stage to fail when these requirements are not met.
tests/integration/defs/model_express/test_model_express.py (1)

372-399: 🎯 Functional Correctness | 🔵 Trivial | 💤 Low value

Add context to transfer-evidence assertions.

Include the failed marker, matched counts, and expected and observed rank sets in assertion messages so CI failures identify the failed condition.

Test coverage: test_mx_donor_receiver covers TP1 and TP2 and is listed in tests/integration/test_lists/test-db/l0_model_express.yml; verdict: sufficient.

🤖 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/integration/defs/model_express/test_model_express.py` around lines 372
- 399, Update _assert_transfer_evidence to add assertion messages containing the
rejected failure marker, matched parameter counts versus case.tp_size, and
expected versus observed transferred rank sets. Keep the existing validation
logic unchanged while ensuring each failure identifies the relevant condition
and values.
🤖 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.

Inline comments:
In `@docs/source/features/model-express.md`:
- Around line 104-109: Update the documentation around the
DGX_H100-2_GPUs-PyTorch-ModelExpress-1 command to state its gating: it runs when
a multi-GPU file changes, in post-merge pipelines, or via multi-GPU dispatch
with the ci: full pre-merge approved label. Remove or replace “recurring” so the
stage is not described as running in every pre-merge pipeline.

In `@tests/integration/defs/model_express/mx_e2e_worker.py`:
- Around line 62-67: Update the donor setup in the mx_config construction so it
bypasses ModelExpress source discovery rather than treating
server_query_timeout_s=0 as an immediate fallback; alternatively, revise the
comment to accurately describe the 5-second delay and add coverage for
zero-timeout behavior in test_mx_donor_receiver and its listed TP1/TP2
configurations.

In `@tests/integration/defs/model_express/test_model_express.py`:
- Around line 339-361: Replace the local process teardown helpers
`_signal_process_group` and `_stop_donor` with the canonical `popen()` and
`cleanup_process_tree()` helpers from `trt_test_alternative.py`. Apply this
consistently to the worker launch in `_run_worker` and the inline donor launch,
preserving the existing startup, stop-file, timeout, and return-code behavior
while ensuring all descendant process groups are cleaned up.

---

Nitpick comments:
In `@jenkins/L0_Test.groovy`:
- Around line 3328-3390: Update the test setup around serviceInitContainerConfig
and serviceContainerConfig to explicitly require Kubernetes 1.33+ or enable the
SidecarContainers feature for older supported clusters, preventing Redis from
blocking pod startup. Verify the configured MODEL_EXPRESS_SERVER_IMAGE resolves
to modelexpress-server:0.4.1 and supports /app/modelexpress-server with --port
8001, MX_METADATA_BACKEND=redis, and REDIS_URL=redis://127.0.0.1:6379; ensure
TRTLLM_MX_E2E_REQUIRED=1 causes the stage to fail when these requirements are
not met.

In `@tests/integration/defs/model_express/mx_e2e_worker.py`:
- Around line 100-105: Bound the donor polling loop in the role-handling flow by
adding the proposed --max-serve-seconds argument in _parse_args with its
default, then have the donor stop waiting when either stop_file appears or the
configured deadline expires. Use a monotonic elapsed-time check around the
existing time.sleep polling.

In `@tests/integration/defs/model_express/test_model_express.py`:
- Around line 372-399: Update _assert_transfer_evidence to add assertion
messages containing the rejected failure marker, matched parameter counts versus
case.tp_size, and expected versus observed transferred rank sets. Keep the
existing validation logic unchanged while ensuring each failure identifies the
relevant condition and values.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 93c35419-6654-430c-9bc6-b9c72b77f101

📥 Commits

Reviewing files that changed from the base of the PR and between ac54855 and 9bf88cb.

📒 Files selected for processing (5)
  • docs/source/features/model-express.md
  • jenkins/L0_Test.groovy
  • tests/integration/defs/model_express/mx_e2e_worker.py
  • tests/integration/defs/model_express/test_model_express.py
  • tests/integration/test_lists/test-db/l0_model_express.yml

Comment thread docs/source/features/model-express.md
Comment thread tests/integration/defs/model_express/mx_e2e_worker.py
Comment thread tests/integration/defs/model_express/test_model_express.py Outdated

Copy link
Copy Markdown
Collaborator Author

/bot run --disable-fail-fast

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #65133 [ run ] triggered by Bot. Commit: 4d17e49 Link to invocation

@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.

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
tests/integration/defs/model_express/test_model_express.py (1)

399-487: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Add the test to the QA list.

test_mx_donor_receiver is registered for TP=1 and TP=2 in l0_model_express.yml. No QA-list entries exist for these cases.

The added test function has sufficient CI registration but insufficient manual-QA coverage. Add both cases to the appropriate QA list and run the GPU integration test with LLM_MODELS_ROOT set.

🤖 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/integration/defs/model_express/test_model_express.py` around lines 399
- 487, Add QA-list entries for both TP=1 and TP=2 registrations of
test_mx_donor_receiver, matching the existing model-express QA-list format and
appropriate cases. Then run the GPU integration test with LLM_MODELS_ROOT
configured to validate both entries.

Source: Path instructions

🤖 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.

Inline comments:
In `@tests/integration/defs/model_express/test_model_express.py`:
- Around line 381-387: Update the assertions around _MATCHED_PARAMS_PATTERN and
matched_params so complete parameter-match summaries are associated with
distinct tensor-parallel ranks. Capture each rank from the receiver logs and
assert every expected rank has exactly one valid complete match, rather than
relying on the total summary count; retain the existing positive matched/total
validation.

---

Outside diff comments:
In `@tests/integration/defs/model_express/test_model_express.py`:
- Around line 399-487: Add QA-list entries for both TP=1 and TP=2 registrations
of test_mx_donor_receiver, matching the existing model-express QA-list format
and appropriate cases. Then run the GPU integration test with LLM_MODELS_ROOT
configured to validate both entries.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: c28a2555-e1c1-4f66-8386-2f0244e068bb

📥 Commits

Reviewing files that changed from the base of the PR and between 1e1b624 and 4d17e49.

📒 Files selected for processing (3)
  • jenkins/L0_Test.groovy
  • tests/integration/defs/model_express/mx_e2e_worker.py
  • tests/integration/defs/model_express/test_model_express.py
🚧 Files skipped from review as they are similar to previous changes (2)
  • tests/integration/defs/model_express/mx_e2e_worker.py
  • jenkins/L0_Test.groovy

Comment thread tests/integration/defs/model_express/test_model_express.py Outdated
@chienchunhung

Copy link
Copy Markdown
Collaborator Author

/bot run --disable-fail-fast

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #65145 [ run ] triggered by Bot. Commit: c3e5b11 Link to invocation

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #65133 [ run ] completed with state ABORTED. Commit: 4d17e49

Link to invocation

@chienchunhung

Copy link
Copy Markdown
Collaborator Author

/bot run --disable-fail-fast

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #66342 [ run ] triggered by Bot. Commit: fa7b0a1 Link to invocation

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #66342 [ run ] completed with state SUCCESS. Commit: fa7b0a1
/LLM/main/L0_MergeRequest_PR pipeline #53985 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>
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

Copy link
Copy Markdown
Collaborator Author

/bot run --disable-fail-fast

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #66391 [ run ] triggered by Bot. Commit: 8e4a7e7 Link to invocation

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #66391 [ run ] completed with state FAILURE. Commit: 8e4a7e7
/LLM/main/L0_MergeRequest_PR pipeline #54034 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

@chienchunhung

Copy link
Copy Markdown
Collaborator Author

/bot run --disable-fail-fast

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #66560 [ run ] triggered by Bot. Commit: 8e4a7e7 Link to invocation

@brnguyen2 brnguyen2 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.

Approving — the comments below are optional touch-ups, not blockers.

Revisit after the earlier round — all three prior asks are genuinely addressed in the current code:

  • The three ModelExpress paths are in getMultiGpuFileChanged() (jenkins/L0_MergeRequest.groovy:1097, jenkins/L0_MergeRequest.groovy:1130, jenkins/L0_MergeRequest.groovy:1160), so harness/profile/test-db changes now enable pre-merge multi-GPU stages.
  • The preflight parses the MODELEXPRESS_VERSION= line with packaging.version.Version, rejects older/prerelease/malformed versions against the 0.4.1 floor, and routes subprocess.TimeoutExpired through _skip_or_fail (tests/integration/defs/model_express/test_model_express.py:213).
  • The two QA rows are gone from llm_function_core.txt; coverage now lives only in l0_model_express.yml, where the stages provision the services and set TRTLLM_MX_E2E_REQUIRED=1.

I also re-traced the OnDemand exclusion after the new parallelJobsFiltered -= onDemandJobs backstop: the multi-GPU trigger, auto-trigger tags, and CBTS paths all exclude it, while --stage-list/--extra-stage still select from the full parallelJobs map — reachable exactly as the docs describe.

One description-hygiene point: the Scope section says the PR adds "one diagnostic-only loader change", but there are two loader changes and the second is behavioral. The zero-timeout early fallback (tensorrt_llm/_torch/models/checkpoints/mx/checkpoint_loader.py:425) now returns to disk loading before prepare_post_transform_receiver can mutate the module graph, and it applies to any receiver configured with query_timeout_s == 0, not just this harness. The change looks correct and is unit-tested (test_zero_timeout_falls_back_before_receiver_preparation), and per-load state is reset at load_weights entry so the early return can't leak stale preload flags — please just update the description so the behavior delta is on record for anyone bisecting MX fallback changes later.

The two inline comments are optional cleanups, not blockers.

Comment thread jenkins/L0_Test.groovy
Comment thread docs/source/features/model-express.md
@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #66560 [ run ] completed with state SUCCESS. Commit: 8e4a7e7
/LLM/main/L0_MergeRequest_PR pipeline #54191 completed with status: 'SUCCESS'
Pipeline passed with automatic retried tests. Check the rerun report for details.

CI Report

Link to invocation

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants