Skip to content

[TRTLLMINF-102][fix] Surface SLURM device faults to the failure classifier - #16557

Merged
dpitman-nvda merged 4 commits into
NVIDIA:mainfrom
dpitman-nvda:feat/surface-slurm-device-faults
Jul 22, 2026
Merged

[TRTLLMINF-102][fix] Surface SLURM device faults to the failure classifier#16557
dpitman-nvda merged 4 commits into
NVIDIA:mainfrom
dpitman-nvda:feat/surface-slurm-device-faults

Conversation

@dpitman-nvda

@dpitman-nvda dpitman-nvda commented Jul 17, 2026

Copy link
Copy Markdown
Collaborator

Summary by CodeRabbit

  • Bug Fixes
    • Improved SLURM failure detection by identifying device and interconnect fault messages in job logs.
    • Failed jobs with detected hardware-related faults now include clearer diagnostic details and can be retried away from affected nodes or devices.
    • Failures without matching fault signatures continue through the existing classification process.

Description

Device / driver / interconnect faults (CUDA, NVLink, ECC, driver/NVML, GPU off the bus) print into the SLURM job output log but never reach the stage exception chain: the job tracker squashes a failed job to exit 1, so FailureClassifier.classify() sees only a generic failure and cannot steer the retry off the bad node (confirmed in OpenSearch stage data -- these faults land with s_infra_failure_patterns empty).

On a terminal FAILED state, scrape job-output.log for a device-fault signature and, on a hit, fold the matched line into a fresh exception so the retry loop's existing classify(SLURM) + rememberAvoidedSlurmNodeLists path recognizes it and relaunches on a different node. The scrape is only a gate: the catalog remains authoritative, so a line it does not recognize falls through to the normal rethrow (no retry). App-induced CUDA errors (illegal memory access, launch failure, OOM) are excluded.

Test Coverage

N/A, this is a CI change

PR Checklist

Please review the following before submitting your PR:

  • PR description clearly explains what and why. If using CodeRabbit's summary, please make sure it makes sense.

  • PR Follows TRT-LLM CODING GUIDELINES to the best of your knowledge.

  • Test cases are provided for new code paths (see test instructions)

  • If PR introduces API changes, an appropriate PR label is added - either api-compatible or api-breaking. For api-breaking, include BREAKING in the PR title.

  • Any new dependencies have been scanned for license and vulnerabilities

  • CODEOWNERS updated if ownership changes

  • Documentation updated as needed

  • Update tava architecture diagram if there is a significant design change in PR.

  • The reviewers assigned automatically/manually are appropriate for the PR.

  • Please check this after reviewing the above items as appropriate for this PR.

GitHub Bot Help

To see a list of available CI bot commands, please comment /bot help.

…ifier

Device / driver / interconnect faults (CUDA, NVLink, ECC, driver/NVML, GPU
off the bus) print into the SLURM job output log but never reach the stage
exception chain: the job tracker squashes a failed job to `exit 1`, so
FailureClassifier.classify() sees only a generic failure and cannot steer the
retry off the bad node (confirmed in OpenSearch stage data -- these faults land
with s_infra_failure_patterns empty).

On a terminal FAILED state, scrape job-output.log for a device-fault signature
and, on a hit, fold the matched line into a fresh exception so the retry loop's
existing classify(SLURM) + rememberAvoidedSlurmNodeLists path recognizes it and
relaunches on a different node. The scrape is only a gate: the catalog remains
authoritative, so a line it does not recognize falls through to the normal
rethrow (no retry). App-induced CUDA errors (illegal memory access, launch
failure, OOM) are excluded -- the stage data shows those are code regressions,
not node faults.

Signed-off-by: Derek Pitman <dpitman@nvidia.com>
@dpitman-nvda
dpitman-nvda requested a review from a team as a code owner July 17, 2026 22:40
@coderabbitai

coderabbitai Bot commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

Adds SLURM log scanning for CUDA, NVLink, ECC, driver, and device-loss signatures. Failed sbatch jobs now raise an enriched exception containing the matched fault line so failure classification can select device-aware retry behavior.

Changes

SLURM device-fault detection

Layer / File(s) Summary
SLURM fault log scraping
jenkins/L0_Test.groovy
Adds scrapeSlurmLogForDeviceFault() to search job logs for device and interconnect fault signatures and return the last truncated match.
Failed-job classification wiring
jenkins/L0_Test.groovy
Updates the FAILED sbatch handling path to enrich exceptions with matched device-fault output, while preserving the existing fallback when no match is found.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Runner as SLURM sbatch runner
  participant Scraper as scrapeSlurmLogForDeviceFault
  participant Log as SLURM job log
  participant Classifier as failure-classification layer
  Runner->>Scraper: Scrape failed job log
  Scraper->>Log: Search fault signatures
  Log-->>Scraper: Return last matching line
  Scraper-->>Runner: Return matched or empty line
  Runner->>Classifier: Raise enriched or original failure
Loading

Suggested reviewers: yuanjingx87

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title matches the change and includes the required ticket/type prefix.
Description check ✅ Passed The description includes the required sections and clearly explains the issue, solution, and test coverage.
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.
✨ 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: 2

🤖 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 `@jenkins/L0_Test.groovy`:
- Around line 250-256: Update the command in the Utils.exec call to preserve the
deviceFaultRegex match when limiting output to 500 characters. Replace the
current start-of-line cut with logic that returns the matched expression itself,
or truncates the surrounding text while retaining that match, so the resulting
deviceHit remains recognized by FailureClassifier.
- Around line 257-260: Update the SSH scrape exception handling around the catch
block to catch and immediately rethrow InterruptedException before the generic
Exception handler. Keep the existing ignorable-warning and empty-string behavior
for other scrape failures, preserving pipeline cancellation semantics.
🪄 Autofix (Beta)

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: 26cba290-7718-4b89-8f95-d0f4898df687

📥 Commits

Reviewing files that changed from the base of the PR and between 5b65484 and 9f4038b.

📒 Files selected for processing (1)
  • jenkins/L0_Test.groovy

Comment thread jenkins/L0_Test.groovy
Comment thread jenkins/L0_Test.groovy
…crape

- Use grep -o so the scrape returns the matched signature itself, not the whole
  line: a long log line can no longer push the signature past the truncation
  boundary and hide it from classify(). Two alternatives are made catalog-exact
  so grep -o output still contains the catalog substring (CUDA_ERROR_UNKNOWN: 999,
  and the full "couldn't communicate with the NVIDIA driver" via wildcards).
- Rethrow InterruptedException before the generic catch so a pipeline abort
  during the SSH scrape is not downgraded to an ignorable warning.

Signed-off-by: Derek Pitman <dpitman@nvidia.com>
@dpitman-nvda

Copy link
Copy Markdown
Collaborator Author

/bot run --disable-fail-fast

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #60056 [ run ] triggered by Bot. Commit: f5bd02e Link to invocation

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

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

Copy link
Copy Markdown
Collaborator Author

/bot run

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #60383 [ run ] triggered by Bot. Commit: f5bd02e Link to invocation

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

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

Copy link
Copy Markdown
Collaborator Author

/bot run

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #60394 [ run ] triggered by Bot. Commit: f5bd02e Link to invocation

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #60394 [ run ] completed with state FAILURE. Commit: f5bd02e
/LLM/main/L0_MergeRequest_PR pipeline #48733 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

Copy link
Copy Markdown
Collaborator Author

/bot run

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #60423 [ run ] triggered by Bot. Commit: f5bd02e Link to invocation

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #60423 [ run ] completed with state SUCCESS. Commit: f5bd02e
/LLM/main/L0_MergeRequest_PR pipeline #48760 completed with status: 'SUCCESS'

CI Report

Link to invocation

@dpitman-nvda
dpitman-nvda enabled auto-merge (squash) July 20, 2026 22:03
Comment thread jenkins/L0_Test.groovy Outdated
…h login shells

The scrape command used bash test/pipe/redirection syntax that the remote login
shell runs directly. Cluster login shells are often csh/tcsh, which can't parse
`if [ -f ... ]; then ... 2>/dev/null; fi`. Wrap the body in `bash -c '...'` (the
same idiom echoRemoteLogTail already uses) so the login shell only invokes bash
with the command body. Inner quoting switched to escaped double quotes to avoid
colliding with the bash -c single quotes.

Signed-off-by: Derek Pitman <dpitman@nvidia.com>
@dpitman-nvda
dpitman-nvda disabled auto-merge July 21, 2026 19:06
@dpitman-nvda

Copy link
Copy Markdown
Collaborator Author

/bot run

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #60767 [ run ] triggered by Bot. Commit: 3de68d6 Link to invocation

@dpitman-nvda
dpitman-nvda enabled auto-merge (squash) July 21, 2026 19:19
@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #60767 [ run ] completed with state FAILURE. Commit: 3de68d6
/LLM/main/L0_MergeRequest_PR pipeline #49050 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

Copy link
Copy Markdown
Collaborator Author

/bot run

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #60990 [ run ] triggered by Bot. Commit: 3de68d6 Link to invocation

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #60990 [ run ] completed with state FAILURE. Commit: 3de68d6
/LLM/main/L0_MergeRequest_PR pipeline #49252 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

Copy link
Copy Markdown
Collaborator Author

/bot run

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #61017 [ run ] triggered by Bot. Commit: 3de68d6 Link to invocation

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #61017 [ run ] completed with state FAILURE. Commit: 3de68d6
/LLM/main/L0_MergeRequest_PR pipeline #49276 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

Copy link
Copy Markdown
Collaborator Author

/bot run

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #61049 [ run ] triggered by Bot. Commit: 3de68d6 Link to invocation

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #61049 [ run ] completed with state SUCCESS. Commit: 3de68d6
/LLM/main/L0_MergeRequest_PR pipeline #49305 completed with status: 'SUCCESS'

CI Report

Link to invocation

@dpitman-nvda
dpitman-nvda merged commit c1483b9 into NVIDIA:main Jul 22, 2026
8 checks passed
dpitman-nvda added a commit to dpitman-nvda/TensorRT-LLM that referenced this pull request Jul 23, 2026
…retry-on-terminal-state

Resolve jenkins/L0_Test.groovy: fold the device-fault log scrape (NVIDIA#16557) into
this PR's verdict-file-based SLURM result handling. The non-terminal-state
(job-still-running) infra classification runs first, then on a terminal FAILED
verdict the log is scraped for a device/interconnect signature and surfaced to
the classifier; a miss falls through to the "Pytest failed" rethrow. Dropped the
old catch-block's `e`/`e.message` reference, which no longer exists in the
verdict-file structure.

Signed-off-by: Derek Pitman <dpitman@nvidia.com>
yuanjingx87 pushed a commit to yuanjingx87/TensorRT-LLM that referenced this pull request Jul 26, 2026
…ifier (NVIDIA#16557)

Signed-off-by: Derek Pitman <dpitman@nvidia.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants