Conversation
5d73da5 to
437f06c
Compare
|
The commit compaction bot stopped. The pull request is still a draft. Maintainers: see the lucebox_bots run log. |
|
The commit compaction bot stopped. Pushing to Maintainers: see the lucebox_bots run log. |
|
Folded 2 commits into 2 (same final code; the tree hash was checked before pushing).
Previous head: |
437f06c to
7ae026f
Compare
7ae026f to
1121a5e
Compare
|
Folded 3 commits into 2 (same final code; the tree hash was checked before pushing).
Previous head: |
1121a5e to
4eff4ad
Compare
There was a problem hiding this comment.
All reported issues were addressed across 12 files
Reply with feedback, questions, or to request a fix.
Re-trigger cubic
1c9f715 to
9bc0f99
Compare
A concurrency group keeps one waiting job by default, so when a second PR's GPU job arrives GitHub cancels the first PR's waiting job. Add `queue: max` (up to 100 waiting, first in first out) to the per-device groups of gpu-tests, gpu-tests-amd and speed-profile. Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
Folded 3 commits into 2 (same final code; the tree hash was checked before pushing).
Previous head: |
96e2c82 to
e5d1ffd
Compare
There was a problem hiding this comment.
Review completed against the latest diff
Reply with feedback, questions, or to request a fix.
Re-trigger cubic
Add a Model e2e workflow that runs a real model on lucebox3 and checks whether a change crashes it or changes its behaviour. Qwen3.8-27B (with its dflash2 draft) runs on the R9700 (gfx1201, HIP index 0) and DeepSeek V4 Flash (STRIX mix, sparse prefill) on the Strix Halo (gfx1151, HIP index 1). Each job builds luce_server for its GPU, loads the model, sends 16 fixed prompts with greedy decoding, stops the server, and compares with the last good run on main. It runs only when a maintainer adds the `e2e` label, nightly on main to refresh the baseline, and on manual dispatch. The job fails on a crash, hang, GPU error in the kernel log, a server that will not load or stop, a failed request, a suite that runs out of time, or two or more checks that passed on the baseline and now fail; changed text, a single regressed check, slower decode and a baseline from another ROCm only warn. Baseline runs on main upload their result as the artifact model-e2e-baseline-<model>-<device>, and find_baseline.py gives each job the newest one, counting only scheduled or dispatched runs on this repository's main. Each model's GPU, HIP index, model files and server flags sit in one table in select_models.py, and the job reads them from its matrix, with the models under vars.LUCEBOX_MODELS_DIR (default /opt/models). gpu_wait.sh reads the kernel's KFD process list, which any user can read, and fails when it cannot; the job waits up to 4 minutes for other GPU users, then skips with a warning. The KFD health probe moves to .github/ci/kfd_health.sh so both ROCm jobs share it. The job is capped at 35 minutes, with per-step caps, and remembers a clean pass by tree hash, configuration, model files, ROCm version and the baseline's digest. Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Run the model e2e on each push to main instead of nightly, so a merged change that alters a model's output becomes the baseline for the next PRs. A push runs only the models whose code changed between their baseline's commit and the pushed commit (find_baseline.py --only-changed), so a merge that was skipped, replaced in the queue or failed is covered by the next one. Baselines now come from pushes to or dispatched runs on main. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
c46fd38 to
9cf78e1
Compare
What
A new Model e2e workflow (
.github/workflows/model-e2e.yml) runs a real model on lucebox3 and checks whether a change crashes it or changes its behaviour.Each job builds
luce_serverfor its GPU, loads the model, sends 16 fixed prompts with greedy decoding (.github/ci/e2e/prompts.json), stops the server, and compares with the last good run onmain(the baseline). The prompts cover arithmetic, lists, code, JSON, translation, unicode, multi-turn, a tool call, a 2.5K-token needle, streaming, thinking, a longer story, and a repeated request.When it runs
e2elabel, likecompact-commitsin ci(commits): check conventional commit style and dispatch the compaction bot #755. It runs the models the PR touches (select_models.py), or both when the PR touches neither DS4, Qwen nor shared server code. To test new pushes, remove the label and add it again.find_baseline.py --only-changed), and a run that doesn't fail becomes the new baseline. The diff is measured from the baseline's commit, not the previous one, so a merge whose run was skipped, replaced in the queue or failed is covered by the next merge. Manual dispatch refreshes the baseline whenupdate_baselineis ticked on main (e.g. after a ROCm upgrade).lucebox3 only
runs-on: [self-hosted, lucebox3], next togpu-tests-amd. The runner runs one job at a time, so e2e jobs never share the GPUs with each other or withgpu-tests-amd. Spreading jobs over more luceboxes can come later.select_models.pyholds each model's GPU, HIP index (R9700 = 0, Strix Halo = 1, as ingpu-tests-amd), model files and server flags. The job reads them from its matrix. Models live invars.LUCEBOX_MODELS_DIR, default/opt/models.model-e2e-baseline-<model>-<device>(kept 90 days).find_baseline.pygives each job the newest one, counting onlymodel-e2eruns from pushes to or dispatches on this repo'smain, so PR code can't replace it. Results record the ROCm version, and the report warns when the baseline ran on a different one./sys/class/kfd/kfd/proc, readable by any user; it's whatrocm-smi --showpidsuses) and fails if it can't.Staying bounded
Queue fix (separate commit)
By default a concurrency group keeps only one waiting job, so a second PR's waiting GPU job cancelled the first one's.
queue: max(GitHub, May 2026) keeps up to 100 waiting, first in first out, ongpu-tests,gpu-tests-amdandspeed-profile. actionlint doesn't know the key yet, but GitHub's docs confirm it at job level withcancel-in-progress: false.Measured on lucebox5 (same R9700 + Strix Halo hardware)
gpu_wait.shreports busy when another process holds/dev/kfd.find_baseline.pyran against the live API; the artifact download itself can only run once a baseline exists onmain.Before enabling
/opt/modelson lucebox3 (or setLUCEBOX_MODELS_DIR):Qwen3.8-27B-UD-IQ4_XS.gguf,qwen38-dflash2-q8_0.gguf,DeepSeek-V4-Flash-0731-ROCMFPX-MIX-STRIX.gguf.sudo dmesgorkernel.dmesg_restrict=0. Without it every run warns that GPU errors weren't checked.mainwithupdate_baselineticked to create the first baseline for both models (the first merge also does it).e2elabel.🤖 Generated with Claude Code