Skip to content

record(BENCH-QWEN38-27B): the clock excursion is the measured workload, so waiting for a quiet window cannot work - #1519

Merged
localai-bot merged 2 commits into
mainfrom
row/BENCH-QWEN38-27B-BF16-C1-RATIO
Aug 20, 2026
Merged

record(BENCH-QWEN38-27B): the clock excursion is the measured workload, so waiting for a quiet window cannot work#1519
localai-bot merged 2 commits into
mainfrom
row/BENCH-QWEN38-27B-BF16-C1-RATIO

Conversation

@localai-bot

Copy link
Copy Markdown
Collaborator

The c1 cross-engine ratio is owed by #915 and #979 and was refused again on 2026-08-19 by gpu_clock_state compare, on all three pairings, with PAIRING_VERDICT=DISCARD. The recorded route out was to wait for a thermally quiet window. That route cannot work, and this records why — derived from timing on artifacts that already existed, at zero GPU cost.

The excursion is generated by the measured workload, once per request

Not weather, not heat soak, not another tenant:

  • All 12 flagged samples across the three vLLM c1 legs sit within 0.07-0.35 s of a request start under one constant per-leg offset, and the three offsets agree to 0.1 s. Our legs align the same way at a constant 1.27-1.73 s lag.
  • The period is each arm's own per-request wall time: seven of our ten gaps fall in 28.39-28.67 s against 128 / 4.4040 = 29.06 s; all five of vLLM's fall in 29.61-29.67 s against 128 / 4.2835 = 29.88 s.
  • It reproduces an irregularity, not merely a period. Our request train has one odd gap at request 3→4 (31.63 / 31.71 / 31.66 s), caused by the ~4 s TTFT outlier at index 2 that The BPE merge loop is O(n^2) in pretoken length: 64 KB of one repeated character costs tens of seconds of one core, before ValidatePromptLen runs #1365 measures. The excursion train carries the same anomaly at 31.77 / 31.79 / 31.82 s.
  • At c8 the excursions track the eight request waves, and burst width scales with the batched prefill: 26 of 26 c1 bursts are a single sample, while c8 rep 1 runs 1, 4, 4, 3, 3, 4, 5, 2.
  • Of 40 inter-burst gaps, 35 fall in 28.4-35.5 s and the five longer ones are exactly 2x and 3x the base period — sampler misses, not quiet stretches.

The gate's two rules are mutually exclusive on this workload

MIN_BUSY_SAMPLES = 30 at the measured 1.097 s cadence demands a window of 32.9 s. The excursion period is 28.4-35.5 s, median 33.2 s. Any window long enough to satisfy the observation floor necessarily spans at least one excursion, and every excursion breaches MAX_WITHIN_RUN_SPREAD_PCT = 5.0. No amount of quiet on the box changes that.

So re-running the campaign today would have burned roughly 90 minutes of a contended box for a second DISCARD. No lease was taken and no job was queued.

Two corrections to the record

The clock-gate repair has not landed in code. 96ed8346f changed exactly two files — .agents/issue-index.md and .agents/specs/lease-clock-pinning.md. It landed the spec proposing the repair. tools/bench/gpu_clock_state.py still carries its single commit 51ec6bed5, still sets MAX_WITHIN_RUN_SPREAD_PCT = 5.0 and MIN_BUSY_SAMPLES = 30, and has no drift term. That spec's own opening says the repair recovers nothing, because the untouched throttle rule refuses all nine windows independently.

The fleet was not idle. dgx:gpu0 was held continuously by two other sessions during the attempt — claude/dflash2-cuda-gate-w4r, then claude/mudler-ubuntu-box/fullmodel-guided-r12 on a four-hour budget.

This also settles an open question in #1386

#1386 records that the dips cannot be distinguished between a load transition and a thermal excursion, and proposes adding temperature.gpu and power.draw to QUERY_FIELDS to decide it. The alignment above settles it from timing alone, as a load transition, without those fields. Relaying that to #1386 is owed and is not done here.

What the ratio now needs

An instrument decision, not another lease. Either pin the clock over the host path (#1354 — and note this is inferred, not measured: the one cell that passed, c4, was pinned flat at 2184 MHz, below the 2489 MHz decode median), or scope the within-run spread rule to the state it claims to police. The second changes gate semantics and owes its own row, a red-before mutation, and green-after evidence.

Unchanged

No ratio is derived or quoted. No pairing passed. Our c8 absolute stands as archived — output throughput mean 22.6247 tok/s, CV 0.205%, median ITL 232.83 ms, median TPOT 250.57 ms. total_token_throughput remains corrupted by #1355 and is not quoted. vLLM c8 was not attempted, per the settled host-reboot finding in 438305e15.

Archived legs re-derived: our c1 6/6 x3, our c8 48/48 x3, vLLM c1 6/6 x3, failed=0 and zero non-empty errors on all nine.

Records only — one file, .agents/specs/qwen38-27b-bf16-gate.md (## Now, ## Owed). No measurement was accepted and no lifecycle state moved, so docs/BENCHMARKS.md and docs/STATUS.md are not owed.

scripts/agent-preflight.sh --staged: all gates green, real exit code 0. Checkers on 141402e6c..HEAD, unpiped: check-commit-trailers 0, check-commit-style 0, check-doc-checkpoint 0, check-agent-record 0, check-symbol-anchors 0, check-pr-size 0.

Refs #915, #979, #1354, #1365, #1386.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:claude-opus-5 [Claude Code]

mudler added 2 commits August 20, 2026 22:35
…1 pairing is generated once per request by the workload (#915, #1386)

The 2026-08-20 re-measure of the c1 cross-engine ratio did NOT run.
`dgx:gpu0` was held by other sessions for the whole window — first
`claude/dflash2-cuda-gate-w4r`, then
`claude/mudler-ubuntu-box/fullmodel-guided-r12` at `BUDGET_S=14400` with a
job queued behind it. No lease was taken and no leg was measured, so no
number in this row moves.

What the window produced instead is the CAUSE of the refusal, read out of
the artifacts that already existed under `/mnt/nas_share/rc/q38bf16/out/`
at no GPU cost. The SM-clock excursion that fails the within-run spread
rule and the throttle rule is locked to the REQUEST TRAIN on both arms:
all 12 flagged samples across the three vLLM c1 legs sit within 0.07 to
0.35 s of a request start under one constant per-leg offset, and the three
offsets agree to 0.1 s. Its period is each arm's own per-request wall
time, and our train reproduces the irregular 31.8 s gap that #1365's ~4 s
TTFT outlier injects into ours. At c8 the excursions track the eight
request waves and widen with the batched prefill.

So the excursion is workload-generated, not thermal weather. That closes
the route this spec used to name: waiting for a thermally quiet window
cannot work, because the cause is the work being measured. It also makes
the gate's observation floor and its spread rule mutually exclusive here —
30 busy samples at the measured 1.10 s cadence is ~33.0 s, against a
28.4 to 35.5 s excursion period — and it explains why the one c1-class
cell that ever passed, c4, was flat: it was pinned at 2184 MHz, below the
2489 MHz median this decode runs at, so the governor had no headroom to
take.

Two corrections ride along. The clock-gate repair is SPEC ONLY: `96ed8346f`
changed two files and `tools/bench/gpu_clock_state.py` still carries its
single commit `51ec6bed5` with `MAX_WITHIN_RUN_SPREAD_PCT = 5.0` and no
drift term, verified at `origin/main` `a50c57d69`. Re-running `compare` on
the three archived pairings at that tool returns a real, unpiped exit
code 1 on each. And the campaign `NOTES.txt` names a superseded binary,
`ab0b9a1e...`, where `out/RESULT.txt` and a fresh hash both say
`7d0c3caf...`.

This edits records only. No `src/`, `include/` or `tests/` file changes,
no measurement is accepted, and no lifecycle state moves, so `STATUS` and
`BENCHMARKS` are not owed. Every quoted figure re-derives from the
archived samples; the c8 vLLM leg remains not to be attempted on this box.

Refs #915, #979, #1354, #1365, #1386.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:claude-opus-5 [Claude Code]
…trailer gates run (#915)

FOLLOWING_AGENTS_PROTOCOL

`origin/main` advanced from `a50c57d69` to `141402e6c` while this record edit
was being written, which made the base no longer an ancestor of the head, and
`agent-preflight.sh --staged` SKIPPED `commit-trailers` and `commit-style` for
that reason. A skipped gate reports nothing about the tree, so the merge is
taken to make both of them actually run rather than to pick up the DFlash2 work
this branch does not touch.

The merge is textually clean and changes nothing this branch owns:
`git diff --stat origin/main..HEAD` is one file,
`.agents/specs/qwen38-27b-bf16-gate.md`, which the incoming commit does not
touch. No keyed record was three-way merged.

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:claude-opus-5 [Claude Code]
@localai-bot
localai-bot merged commit 7e07bbc into main Aug 20, 2026
0 of 15 checks passed
@localai-bot
localai-bot deleted the row/BENCH-QWEN38-27B-BF16-C1-RATIO branch August 20, 2026 22:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants