Skip to content

ci: take gpu-l40s out of rotation and seed frontier10202 as excluded - #1804

Open
sbryngelson wants to merge 1 commit into
MFlowCode:masterfrom
sbryngelson:ci/avoid-flaky-gpu-resources
Open

ci: take gpu-l40s out of rotation and seed frontier10202 as excluded#1804
sbryngelson wants to merge 1 commit into
MFlowCode:masterfrom
sbryngelson:ci/avoid-flaky-gpu-resources

Conversation

@sbryngelson

Copy link
Copy Markdown
Member

Two GPU resources accounted for most of the non-code failures in run 33553417354. Both are addressed here; neither touches solver code.

gpu-l40s out of rotation

It has been failing jobs for weeks, and it is also the partition the selector kept choosing and then starving on — four Phoenix lanes submitted, never started, cancelled after 3–5.5 h.

Two independent causes, both fixed:

  1. mix counted as available. A mix node is partially allocated and may have no free GPU. CI logged Selected GPU partition: gpu-l40s (1 idle/mix nodes) and then queued until the job timeout. Only fully idle nodes count now.
  2. The fallback also pointed at l40s, so removing it from the priority list alone would have sent jobs straight back whenever nothing was idle. Fallback is now gpu-a100.

Priority is now gpu-h200 gpu-h100 gpu-a100 gpu-v100.

frontier10202 seeded into the exclude list

That node produced all 183 GPU memory-access faults in the run, across 43 distinct tests; three exhausted their retries (851F7AE2, 12ECE133, 05A8C23C). The same lanes passed on frontier10181/82/93/97/10203/06/07/10 with zero faults, and the same tests passed under gpu-acc on other nodes in that very run.

It is seeded into node_exclude exactly the way phoenix already seeds its two nodes, so the preflight added in #1797 can still append more at run time — this does not replace or bypass that mechanism.

Its faults are intermittent (379 of 382 tests still passed on it), which is why syscheck can clear the node and a static seed is still worth having. Drop it once OLCF has looked at the node.

Not covered here

The third failure class in that run was the self-hosted runner frontier-22 losing communication with GitHub (three jobs, no steps executed). That is a runner-host problem, not something the submit scripts can influence.

Verification

Both scripts pass bash -n. submit-slurm-job.sh still renders exactly one #SBATCH --exclude= directive (the dynamic one) — the seed feeds it rather than competing with it.

Fallback choice is worth a second opinion: I picked gpu-a100 without knowing which Phoenix partition has the most nodes.

Two GPU resources accounted for most of the non-code failures in run 33553417354.

gpu-l40s has been failing jobs for weeks, and it is also what the partition
selector kept choosing and then starving on: four Phoenix lanes submitted, never
started, and were cancelled after 3-5.5h. Two causes, both fixed here. The
selector counted "mix" nodes as available, but a mix node is partially
allocated and may have no free GPU -- it picked gpu-l40s on "1 idle/mix nodes"
and queued until timeout -- so only fully idle nodes count now. And l40s is out
of the priority list, fallback included: leaving the fallback pointed at it sent
jobs back there whenever nothing was idle.

frontier10202 produced all 183 GPU memory-access faults in that run, across 43
distinct tests, three of which exhausted their retries; the same lanes passed on
eight other g1 nodes with zero faults. It is seeded into node_exclude the way
phoenix already seeds its two nodes, so the preflight from MFlowCode#1797 can still add
more at run time. Its faults are intermittent (379 of 382 tests passed there),
which is why syscheck can clear it and a seed is still worth having. Drop it
once OLCF has looked at the node.

Claude-Session: https://claude.ai/code/session_01XZjDp6ch827LVJRrvVb8hC
Copilot AI lite review requested due to automatic review settings September 2, 2026 17:09

Copilot AI 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.

Warning

Copilot couldn't run its full agentic review because it didn't start before the timeout. Make sure your repository has a runner available, or add a copilot-code-review.yml file specifying one with the runs-on attribute. See the docs for more details.

Pull request overview

This PR updates CI Slurm GPU selection and exclusion behavior to reduce non-code test failures caused by flaky GPU resources.

Changes:

  • Remove gpu-l40s from GPU partition priority and change fallback to gpu-a100.
  • Count only fully idle nodes (not mix) when determining GPU-partition availability.
  • Seed frontier10202 into the node exclude list for the relevant GPU cluster.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 3 comments.

File Description
.github/scripts/submit-slurm-job.sh Seeds frontier10202 into node_exclude to avoid a flaky node while still allowing runtime preflight appends.
.github/scripts/select-gpu-partition.sh Adjusts GPU partition selection logic (priority/fallback) and tightens “idle node” counting/logging.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

SELECTED_GPU_PARTITION=""
for _part in $_GPU_PARTITION_PRIORITY; do
_idle=$(sinfo -p "$_part" --noheader -o "%t" 2>/dev/null | grep -cE "^(idle|mix)" || true)
_idle=$(sinfo -p "$_part" --noheader -o "%t" 2>/dev/null | grep -cE "^idle" || true)
SELECTED_GPU_PARTITION=""
for _part in $_GPU_PARTITION_PRIORITY; do
_idle=$(sinfo -p "$_part" --noheader -o "%t" 2>/dev/null | grep -cE "^(idle|mix)" || true)
_idle=$(sinfo -p "$_part" --noheader -o "%t" 2>/dev/null | grep -cE "^idle" || true)
# in run 33553417354 (43 distinct tests) while the same lanes passed
# on eight other g1 nodes with none. Its faults are intermittent --
# 379 of 382 tests still passed there -- so syscheck can clear it.
node_exclude="frontier10202"
@github-actions

github-actions Bot commented Sep 2, 2026

Copy link
Copy Markdown

Claude Code Review

Head SHA: 4bb63a4

Files changed:

  • 2
  • .github/scripts/select-gpu-partition.sh
  • .github/scripts/submit-slurm-job.sh

Findings:

  • .github/scripts/select-gpu-partition.sh:18-19: The changed hunk narrows _idle to only count truly-idle nodes (grep -cE "^idle", dropping mix), but the unchanged usage doc a few lines above still says GPU_PARTITION_MIN_NODES sets "a minimum number of idle/mix nodes." That description is now inaccurate — mix nodes are explicitly excluded by the new logic — and could mislead a caller into setting a threshold expecting mix nodes to still count toward it.

@codecov

codecov Bot commented Sep 2, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 61.69%. Comparing base (ac08ffe) to head (4bb63a4).
⚠️ Report is 2 commits behind head on master.

Additional details and impacted files
@@           Coverage Diff           @@
##           master    #1804   +/-   ##
=======================================
  Coverage   61.69%   61.69%           
=======================================
  Files          84       84           
  Lines       21620    21620           
  Branches     3196     3196           
=======================================
  Hits        13338    13338           
  Misses       6090     6090           
  Partials     2192     2192           

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

2 participants