CI: opt-in DevLab ephemeral runner lanes for Strix Halo (Linux + Windows) - #297
Draft
rradjabi wants to merge 1 commit into
Draft
CI: opt-in DevLab ephemeral runner lanes for Strix Halo (Linux + Windows)#297rradjabi wants to merge 1 commit into
rradjabi wants to merge 1 commit into
Conversation
Adds two dispatch-only jobs alongside the existing native Strix lanes,
targeting the AMD Ryzen DevLab ephemeral pool: a runner is registered
for one job and destroyed with its working directory afterwards.
Nothing changes on push/PR/merge_group. The new lanes are gated on
workflow_dispatch with an exact platform match, and `all` deliberately
does not include them, so merging this cannot affect any existing lane.
The ephemeral lanes are not a label swap of the native ones. Three
differences are forced by the target hosts:
- No host-path pinning. The native Ubuntu lane pins HOME, CARGO_HOME,
RUSTUP_HOME, TMPDIR and PIP_CACHE_DIR under /home/ubuntu/actions-runner
because everything else on that box is on a full root partition.
The pool's hosts keep / on a tmpfs overlay and set those variables
themselves, pointed at their own persistent nvme, so inheriting is
correct and copying the paths across would put job scratch in RAM on
a machine whose iGPU takes its VRAM from the same 62 GiB.
- No GPU reclaim step. pkill-ing serves leaked by a prior job is
meaningless on a runner that has never run one.
- The `install sdk` pre-warm moves off RUNNER_WORKSPACE, which does not
survive an ephemeral runner, onto the pool's persistent cache root.
Without this every run re-pays the pre-warm.
Requires the DevLab orchestrator GitHub App to be installed on this
repository before either lane is dispatched.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this does
Adds two dispatch-only jobs to
e2e-selfhosted.ymlthat run the existing E2E suite on the AMD Ryzen DevLab ephemeral pool, alongside (not instead of) the currentstrix-halo-ubuntu/strix-halo-windowspersistent runners:E2E tests (Strix Halo, Ubuntu, ephemeral)runs-on: [self-hosted, linux, strix-halo, ephemeral]E2E tests (Strix Halo, Windows, ephemeral)runs-on: [self-hosted, windows, strix-halo, ephemeral]On the ephemeral pool a runner is registered for one job and destroyed with its working directory afterwards.
Merging this is a no-op
Both lanes are gated on
github.event_name == 'workflow_dispatch'with an exactplatformmatch, andalldeliberately does not include them. On push / PR / merge_group they skip. The diff is +292 / −1, and the single deleted line is theplatformoptions list being reformatted to add two entries — no existing job is modified.You run them when you choose to:
Prerequisite: install the App first
Nothing provisions a runner until the DevLab orchestrator GitHub App is installed on this repo:
Why this isn't a label swap
The three differences from the native lanes are forced by the target hosts, and each one would be a real bug if copied across:
No host-path pinning. The native Ubuntu lane pins
HOME,CARGO_HOME,RUSTUP_HOME,TMPDIR,PIP_CACHE_DIRunder/home/ubuntu/actions-runnerbecause everything else on that box is on a full root partition. The pool's hosts keep/on a tmpfs overlay and setTMPDIR,PIP_CACHE_DIR,XDG_CACHE_HOME,HF_HOMEand the ROCm/MIOpen cache vars themselves, pointed at their own persistent nvme — and deliberately leaveHOMEalone. Carrying the hardcoded paths over would put job scratch in RAM on a machine whose iGPU takes its VRAM from the same 62 GiB.No GPU reclaim step.
pkill-ing serves leaked by a prior job is meaningless on a runner that has never run one. This is the property the migration actually buys.The
install sdkpre-warm moves offRUNNER_WORKSPACE. The native lanes note it "persists across runs on RUNNER_WORKSPACE" — on an ephemeral runner it does not; the work tree is wiped with the runner. It's pointed at the pool's persistent cache root instead (XDG_CACHE_HOMEon Linux,LOCALAPPDATAon Windows), which survives both the job and a reboot, so the pre-warm stays a once-per-host cost. Without this every run re-pays it. This is the change most worth reviewing — it's the one that decides whether ephemeral is competitive on wall-clock.CARGO_TARGET_DIRintentionally stays on the ephemeral work tree: build output is per-commit, so persisting it buys little and costs disk the pool would have to reclaim. Expect the first ephemeral run on each host to be slow.Routing is unambiguous
The pool's hosts carry
strix-halo+ephemeraland nevernative; your persistent runners carrynativeand neverephemeral. Neither pool can claim the other's jobs.[self-hosted, linux]alone would not reach the pool either — it refuses any job naming only generic labels, specifically so it never picks up untargeted work.Reporting
e2e-reportalready globs*-report, so the two new artifacts appear as new platforms with no change there. Both lanes are added to itsneedsso an ephemeral trial produces a consolidated report you can diff against the native one — that comparison is the point of the trial.Not included
Removing the native lanes, and any branch-protection / required-check changes. Those belong after a trial, not before it.