Skip to content

gpu-gate.sh: the PIN_3090 refusal of the Qwen3.8 serve plain arm applies to the real tier only, so the fixture tier runs the plain arm on GB10 and RTX 5090 - #1024

Merged
juliankang4 merged 1 commit into
midagedev:mainfrom
juliankang4:dgx-spark-q38-fix-gate-fixture-plain-pin
Oct 30, 2026
Merged

juliankang4 merged 1 commit into
midagedev:mainfrom
juliankang4:dgx-spark-q38-fix-gate-fixture-plain-pin

Conversation

@juliankang4

Copy link
Copy Markdown
Collaborator

Qwen3.8 serve gate의 plain arm이 fixture tier에서 3090 전용 거절 때문에 돌지 않던 문제를 고쳤습니다.

What and why

tools/gpu-gate.sh refuses the gate_qwen38_serve plain arm on any card but the RTX 3090, because the real file's paged clause is only valid there. The fixture tier defers that clause (tier::run_clause("paged", Tag::Scale)), so on a GB10 or an RTX 5090 the refusal rejected the plain arm for a clause that does not run. The refusal now applies to the real tier only. The real tier's pin and its reason are unchanged. The justfile comment that described the plain arm's call as 3090-only now says "in the real tier".

Release notes: Fixed: the Qwen3.8 serve gate's plain arm now runs in the fixture tier on GB10 and RTX 5090 instead of exiting 64 as a 3090-only gate.

Code shape

The review reads these first. A box left unticked needs one line of why.

  • No second copy. Logic two models (or two call sites) share has one common owner; I lifted it there instead of
    copying it (AGENTS.md "Common code first", docs/rust-quality.md R14). Where I found an existing copy, I
    named it below.
  • Model code holds only architecture facts. A model's own files carry only what its architecture forces
    (tensor shapes, the attention kind, the quant). A common owner gained no per-model branch, flag or trait method.
  • Dead code is gone. Nothing I made unused is left behind (functions, flags, gate clauses, docs).
  • No silent failure. Undefined input is a named error or panic, never a defined-looking output.
  • Comments state what is true now. No dates, issue numbers or how a bug was found (tools/check-comments.sh).
  • No relaxed gate. No band, tolerance or lint moved to make a check pass; a re-pin carries PIN(YYYY-MM-DD):
    and its reason.
  • cargo fmt and cargo clippy are clean on what I touched; the lint count did not go up.

Duplication found or removed (path:line), or "none": none

What I ran

Before (base 989d0106b36ca2141adf5d506c3ebdef0c86a1c9) and after (head 3ac5714f8b88d67cd407c108212d741e96d3d994), the same command on a GB10:

env -u BLOOMERY_REF_MODEL BLOOMERY_BOX_LOCAL=1 BLOOMERY_TIER=fixture just gate-gpu-qwen38-serve

Base:

gpu-gate.sh: gate_qwen38_serve runs on the 3090 only — its paged clause runs generate_qwen3moe at 27 GiB of host room on the card in view, and only the 3090's plan pages there (on the A6000 the experts fit and the draft stays on); local mode requires one RTX 3090 selected by its full GPU UUID in CUDA_VISIBLE_DEVICES

Fix, with the paged clause deferred in the plain arm:

deferred(real) scale: paged
gate-gpu-qwen38-serve: PASS
gpu-gate.sh: gate_qwen38_serve ran 230 s (exit 0)
gate-gpu-qwen38-serve: PASS
gpu-gate.sh: gate_qwen38_serve ran 26 s (exit 0)
gate-gpu-qwen38-serve: PASS
gpu-gate.sh: gate_qwen38_serve ran 35 s (exit 0)

The gate's own self-test gained one case per mode, each failing first without the fix:

bash tools/gpu-gate.sh --self-test --part 1
bash tools/gpu-gate.sh --self-test --part 3

Part 1 prints gpu-gate self-test: 68 of 68 ok and part 3 prints gpu-gate self-test: 51 of 51 ok. With the [ "$TIER" = real ] || break line removed, part 1 prints FAIL a 3090-only gate in the fixture tier runs on the A6000: rc 64 (want 0) and gpu-gate self-test: 67 of 68 ok, and part 3 prints FAIL … a 3090-only gate in the fixture tier runs on another local card: rc 64 (want 0) and gpu-gate self-test: 50 of 51 ok.

Hardware (if the change is for a machine)

Card Driver CUDA
NVIDIA GB10 595.84 12.1

AI help

AI 코딩 에이전트가 코드를 작성한 후 설명을 썼고, 테스트를 마쳤습니다. diff 리뷰와 PR 초안 리뷰는 제가 직접 했습니다.

…ies to the real tier only, so the fixture tier runs the plain arm on GB10 and RTX 5090

The pin's reason is the paged clause, which the gate defers by name in the fixture tier (its rooms are the real file's shapes), so a fixture run on any card was refused for a clause it never runs.
@github-actions github-actions Bot added the tools Tools, recipes, CI and the toolchain: tools/, justfile, .github/, Cargo label Oct 30, 2026

@github-actions github-actions 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.

Verdict: CLEAN: The fixture-tier bypass matches the deferred paged clause, and real-tier card refusals remain enforced.

Checked

Duplicates: 0 new functions, types or constants; no duplicate owner introduced. The two new cases exercise box and local card paths.
Complexity: The change adds one tier check to the existing refusal loop.
Silent failure: 0 new sites. Invalid tiers exit 64 before the bypass; empty or unset tier selects real.
Tests: bash -n passed during validation. Static mutation check: removing tools/gpu-gate.sh:2274 would make both new regression scenarios return 64 instead of the asserted 0.
Gates: The fixture-only refusal change has a dated PIN, its reason and FAIL-first output in the PR. The real-tier pin remains.
Escape catalog: No changed code matches C1–C4.

Notes

Full self-tests, GPU gates, dryer and crapper were not run during validation. No Rust file changed.
The reported GB10 run omits the required nvidia-smi line and model path, so GPU evidence is incomplete.

🔨 Shingler, bloomery's review bot: approves a clean pull request and requests changes on a must-fix (how it works)

@juliankang4

Copy link
Copy Markdown
Collaborator Author

The review is done and the contribution check passed, so I'm merging this.

@juliankang4
juliankang4 merged commit 243d92d into midagedev:main Oct 30, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

tools Tools, recipes, CI and the toolchain: tools/, justfile, .github/, Cargo

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant