Skip to content

Migrate MI300X runners to the Barite AMD cluster - #2732

Open
cquil11 wants to merge 8 commits into
mainfrom
codex/mi300x-amd-barite
Open

Migrate MI300X runners to the Barite AMD cluster#2732
cquil11 wants to merge 8 commits into
mainfrom
codex/mi300x-amd-barite

Conversation

@cquil11

@cquil11 cquil11 commented Aug 25, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • replace the retired mi300x-amds runner pool with nine mi300x-amd runners on the Barite MI300X cluster
  • schedule through the compute partition, which contains only the nine InferenceX-allocated GPU nodes; AMD spare nodes remain in their separate partition
  • follow the standard single-node Slurm launcher flow used by the other AMD runners
  • keep only GitHub Actions runner software/workspaces on NFS; route squash images, models/HF cache, and AgentX dataset cache to node-local /raid
  • update MI300X hardware capacity metadata to the verified 1,547,820 MiB per node

Validation

  • bash -n runners/launch_mi300x-amd.sh
  • shellcheck runners/launch_mi300x-amd.sh
  • verified the required node-local /raid directories are present and writable on all nine compute nodes
  • python3 -m pytest utils/matrix_logic/ utils/test_validate_reusable_sweep_artifacts.py -q (258 passed)
  • FixedSequenceLength burn-in on exact commit 624db70e8: DSR1 and Qwen3.5 passed end-to-end with benchmark, server-log, and GPU-metrics artifacts
  • AgentX burn-in, attempt 1 on exact commit 624db70e8: Qwen3.5 TP8 and TP8/EP8 passed end-to-end with benchmark, trajectory, and server-log artifacts
  • MiniMax M3 AgentX retry on exact commit 624db70e8: workload, result collection, and success-rate jobs passed with benchmark, trajectory, and server-log artifacts

The two DSV4 FixedSequenceLength entries could not start because their existing nightly-09663ab... Docker tag returns HTTP 404 from Docker Hub. This PR intentionally leaves those image values identical to main; the failure occurs during registry import after successful Slurm allocation and is independent of the launcher migration.

Live infrastructure

  • mi300x-amd_00 through mi300x-amd_08 are online and idle under ext-cjquilici
  • the old mi300x-amds_* runners have been removed from the repository runner registry
  • node-local paths: /raid/inferencex/squash, /raid/inferencex/models/hub, and /raid/inferencex/aiperf-mmap-cache
  • live cluster dashboard
  • inferencex-dash PR #28

Note

Medium Risk
This changes where and how MI300X jobs run (Slurm launcher, filesystem layout, and per-node DRAM metadata), so misconfiguration could break benchmarks or skew agentic memory budgets until burn-in passes.

Overview
Moves MI300X benchmark scheduling off the retired mi300x-amds pool onto nine mi300x-amd GitHub runners on the Barite cluster.

Runner registry: configs/runners.yaml renames the logical cluster to cluster:mi300x-amd, swaps label lists to mi300x-amd_00_08, drops the old mi300x-disagg slice that pointed at amds nodes, and lowers available-cpu-dram-mib to 1,547,820 (from ~2.32M) for agentic DRAM budgeting.

Launch path: Deletes runners/launch_mi300x-amds.sh (sbcast workspace staging, artifact tar-back, node excludes, 256 CPUs) and adds runners/launch_mi300x-amd.sh, which allocates on Slurm compute, caches Enroot squash under /raid/inferencex/squash, mounts the Actions workspace directly, and uses node-local HF / AgentX mmap cache paths on /raid.

Sweep configs: AgentX entries in configs/amd-master.yaml (Qwen3.5 and MiniMax M3 on MI300X) now target runner: cluster:mi300x-amd. Matrix and eval validation tests pick up the new cluster name, DRAM figure, and physical runner id mi300x-amd_04.

Reviewed by Cursor Bugbot for commit 624db70. Bugbot is set up for automated code reviews on this repo. Configure here.

@github-actions

Copy link
Copy Markdown
Contributor

Thanks for the contribution! Please reach out to respective companies' CODEOWNER to fill in the latest PR_REVIEW_CHECKLIST.md before pinging core maintainer on Slack for review. In order for the signoff PR check bot to trigger, you must follow the PR_REVIEW_CHECKLIST.md template correctly, including the phrase As a PR reviewer and CODEOWNER, I have reviewed this and have.

For PR verification, add the full-sweep-fail-fast label (strongly recommended) to this PR — the benchmark sweep only runs on labeled PRs. Use full-sweep-enabled only if you need matrix jobs to keep running past a failure.

PR authors are responsible for ensuring that after merging, all GitHub Action jobs fully pass. A lot of the time, failures are just flakes and simply re-running the failed jobs will fix it. See GitHub's docs on re-running failed jobs


感谢你的贡献!请联系相应公司的 CODEOWNER 填写最新的 PR_REVIEW_CHECKLIST.md,然后再在 Slack 上联系核心维护者进行审阅。为了触发 signoff PR 检查机器人,你必须正确遵循 PR_REVIEW_CHECKLIST.md 模板,包括保留英文语句 As a PR reviewer and CODEOWNER, I have reviewed this and have

如需进行 PR 验证,请为此 PR 添加 full-sweep-fail-fast 标签(强烈推荐)— 基准测试 sweep 仅在带有标签的 PR 上运行。仅当需要矩阵任务在失败后继续运行时才使用 full-sweep-enabled

PR 作者有责任确保合并后所有 GitHub Action 任务完全通过。 很多时候失败只是偶发抖动(flake),重新运行失败的任务即可解决。参见 GitHub 关于重新运行失败任务的文档

@cquil11
cquil11 marked this pull request as ready for review August 26, 2026 00:23
@cquil11
cquil11 requested a review from a team August 26, 2026 00:23
@claude

claude Bot commented Aug 26, 2026

Copy link
Copy Markdown
Contributor

Claude finished @cquil11's task in 4m 7s —— View job


PR Review

  • Gather context (full diff vs origin/main)
  • Review runner config changes (configs/runners.yaml, configs/amd-master.yaml)
  • Validate perf-changelog.yaml entry (present + appended at end)
  • Review new launch script runners/launch_mi300x-amd.sh (enroot import pattern, correctness)
  • Review workflow + test changes
  • Post findings

LGTM - no blocking issues found

Verified during review:

  • runners/launch_mi300x-amd.sh includes the required enroot import -o $SQUASH_FILE docker://$IMAGE pattern, with per-node flock serialization, retry with unsquashfs -l validation, and cleanup of node-local temp state on exit.
  • No stale references to mi300x-amds or the removed mi300x-disagg label group remain in configs, workflows, or matrix logic (only historical docs/changelog mentions). Launcher routing via launch_${RUNNER_NAME%%_*}.sh correctly resolves mi300x-amd_XXlaunch_mi300x-amd.sh.
  • configs/amd-master.yaml was modified and perf-changelog.yaml was updated in the same PR, with the new entry appended at the end of the file. The entry also covers the available-cpu-dram-mib reduction (2,321,924 → 1,547,820 MiB), which shrinks the DRAM offload budget for the minimaxm3-fp8-mi300x-vllm-agentic-mtp conc-16 lmcache point — correctly documented, and the AgentX burn-in passed on that point.
  • New image tag vllm/vllm-openai-rocm:nightly-311b3513af33bc29b4acb2fde2e9313e5e9966a0 is a public Docker Hub reference and was exercised successfully by the linked burn-in runs.
  • The inputs['duration-override'] bracket-syntax change in .github/workflows/e2e-tests.yml is behavior-safe: the input defaults to "" in both workflow_call/workflow_dispatch definitions, so the fallback to matrix.config.duration still works when unset.

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

I reviewed this PR and didn't find any bugs. Because it's a large infrastructure migration (new Slurm launcher, renamed cluster/runner labels, and an AMD-master image bump) touching a CODEOWNERS-protected config, a human look would still be worthwhile.

What was reviewed: the rewritten runners/launch_mi300x-amd.sh (node-local /raid staging, flock-guarded enroot import retry loop, trap cleanup EXIT) against the deleted launch_mi300x-amds.sh; the mi300x-amdsmi300x-amd rename across configs/runners.yaml, configs/amd-master.yaml, and the three test fixtures for consistency (no stale mi300x-amds references remain outside the historical changelog entry); the appended perf-changelog.yaml entry for byte-preservation and tail placement; and the e2e-tests.yml bracket-syntax fix for inputs['duration-override'].

Extended reasoning...

Overview

This PR retires the mi300x-amds Slurm pool and its launcher in favor of a new nine-node mi300x-amd ("Barite") pool, with a rewritten runners/launch_mi300x-amd.sh that mounts the GitHub Actions workspace directly from NFS instead of tar/sbcast-staging it to a controller-local /tmp tree, and relocates squash images, HF/model cache, AgentX mmap cache, and Enroot/XDG/Triton state to node-local /raid/inferencex. Config files (configs/runners.yaml, configs/amd-master.yaml) are updated to match the renamed labels and new DRAM capacity, perf-changelog.yaml gets one tail-appended entry, and three test fixtures are updated for the rename. A separate, unrelated fix in .github/workflows/e2e-tests.yml switches four inputs.duration-override dot-access expressions to bracket syntax inputs['duration-override'], which is the correct fix for a hyphenated input name (dot access on a hyphenated property is invalid in GitHub Actions expression syntax).

Security risks

No injection, auth-bypass, or data-exposure concerns were identified. The launcher runs on a Slurm-managed CI runner fleet with the same trust boundary as before; inputs (IMAGE, TP, etc.) come from the same recipe/config pipeline as the prior script. The image tag bump in configs/amd-master.yaml points to a nightly build the author says replaces a deleted upstream tag — this cannot be verified from the diff alone (no external registry access), but it follows the same pattern as the pre-existing dsv4-fp8-mi325x-vllm entry that was left unchanged.

Level of scrutiny

This warrants a higher-than-default level of scrutiny: it is a full replacement of a production CI runner launcher script (new storage layout, new retry/locking logic, new cleanup trap) affecting the entire MI300X fleet, and configs/amd-master.yaml is a CODEOWNERS-protected file requiring named-owner review per .github/CODEOWNERS. The PR author's own validation notes that both manual burn-in workflow runs received a top-level failure conclusion despite all workload jobs succeeding — an anomaly not obviously introduced by files in this diff, but one a human reviewer with cluster access is better positioned to chase down than a static code review.

Other factors

The renamed labels are consistently propagated (config, test fixtures, and no stray old-name references outside historical changelog text), the perf-changelog.yaml entry is tail-appended without disturbing prior bytes, and the workflow duration-override fix is a narrow, well-scoped syntax correction consistent with GitHub Actions expression rules. Given the CODEOWNERS requirement and the scope of the launcher rewrite, I'm deferring rather than approving even though no concrete bug was found.

Comment thread runners/launch_mi300x-amd.sh
Comment thread runners/launch_mi300x-amd.sh
@cquil11

cquil11 commented Aug 27, 2026

Copy link
Copy Markdown
Collaborator Author

Closing because the project scope is now limited to porting active, nondeprecated AMD multi-node configurations to srt-slurm. This PR is outside that scope.

@cquil11

cquil11 commented Aug 27, 2026

Copy link
Copy Markdown
Collaborator Author

Reopening: this PR predates the recent out-of-scope configuration-porting detour and was closed by mistake during an overly broad cleanup. Its prior state is being restored.

@cquil11 cquil11 reopened this Aug 27, 2026

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 624db70. Configure here.

Comment thread configs/amd-master.yaml
model: Qwen/Qwen3.5-397B-A17B-FP8
model-prefix: qwen3.5
runner: cluster:mi300x-amds
runner: cluster:mi300x-amd

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Missing changelog for cluster migration

Medium Severity

This migrates MI300X jobs to a new cluster and cuts available-cpu-dram-mib from 2_321_924 to 1_547_820, which changes the MiniMax DRAM KV-offload budget, but it does not append a perf-changelog.yaml entry. CONTRIBUTING.md and AGENTS.md require a changelog for performance-affecting runner and recipe changes, and prior runner-pool moves followed that. Without it, merge will not select the affected keys for a sweep or record that later results come from Barite.

Additional Locations (2)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 624db70. Configure here.

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

Automated review ran and found no bugs on the current commit (624db70). Given this rewires live production Slurm infrastructure (workspace mounting, squash/cache paths, CPU allocation) and cursor's inline comments on launch_mi300x-amd.sh lines 45/47 from this exact commit are only self-resolved by the author with no follow-up commit addressing them, a human look is still worthwhile before merge.

What was reviewed:

  • Cluster/label rename consistency across configs/runners.yaml and configs/amd-master.yaml
  • New launcher's salloc/srun/enroot-import flow, flock-based squash serialization, and container-mount wiring
  • Checked and ruled out: EXIT trap exit-code masking, missing chown for root-owned workspace files, dropped self-healing mkdir -p for the squash dir, and absence of a perf-changelog.yaml entry despite CPU/cache-path changes
Extended reasoning...

Overview

This PR migrates the MI300X Slurm runner pool from the retired mi300x-amds cluster to a new mi300x-amd cluster ("Barite"). It touches config (configs/runners.yaml, configs/amd-master.yaml), replaces the launcher script wholesale (runners/launch_mi300x-amds.sh deleted, runners/launch_mi300x-amd.sh added with materially different logic — no more sbcast/tar workspace staging, direct $GITHUB_WORKSPACE mount, new /raid/inferencex/* cache/squash paths, halved cpus-per-task, new AIPERF mmap cache mount), and updates three test fixtures to match the renamed cluster and new DRAM figure.

Security risks

No injection, auth, or data-exposure concerns stand out — this is infrastructure/config for an internal CI runner pool, and $IMAGE/$GITHUB_WORKSPACE are the same trust-boundary inputs the prior script already used. The main risk surface is operational correctness (job allocation, mount paths, cleanup) rather than security per se.

Level of scrutiny

This warrants human-in-the-loop scrutiny despite being "just a runner script": it changes how live GPU nodes are provisioned and mounted for every future MI300X benchmark run, and a mistake here fails silently in CI (wrong cache path, wrong CPU count, or masked benchmark failures) rather than loudly. The bug-hunting system ruled out several candidate issues this run — EXIT trap masking benchmark exit status, no chown of root-owned artifacts left by --container-remap-root, dropped mkdir -p for the new squash dir, and a missing perf-changelog entry — but I have no way to independently confirm those rule-outs were conclusive versus judgment calls, and they were investigated by a different phase of this pipeline.

Other factors

The PR conversation shows a cursor[bot] review with two inline comments on runners/launch_mi300x-amd.sh (lines 45 and 47) filed against this exact final commit, both marked resolved — but only by the PR author, with no subsequent commit visible in the timeline that would address them. Per the review protocol, author-self-resolution of a third-party reviewer's objection is not evidence the concern was actually fixed, so I'm treating it as still outstanding and declining to approve, while noting the automated pass itself found no new bugs.

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

Labels

None yet

Projects

Development

Successfully merging this pull request may close these issues.

1 participant