docs(LLM): the decode stall a prefill causes, and the knobs that turn it #27

Merged
dank merged 2 commits from docs/radiance-prefill-decode-census into main 2026-10-19 14:21:45 -07:00
Owner

Docs-only. Records why decode on frank-archon turns to sludge while a long prompt
prefills, what that costs on this shape, and which knob turns it.

The census (live counters, boot of 2026-10-15; no bench, no request was perturbed):
decode-only steps average 18.7 ms, prefill+mixed steps 317 ms — 60 % of engine
wall-clock sits inside 8 % of the steps, because the chunk is
min(remaining, checkpoint interval 2048, MNBT 2048) = 2048 rows and every decode row
sharing that step waits the whole chunk. A day of Prometheus (120 s step, 721 samples):
decode median 13.3 t/s in the 56 % of samples where prefill ran ≥ 1000 t/s, against
106–240 t/s otherwise.

The discriminator: decode measured 2–14 min after a busy-prefill window sits at the
idle baseline, so there is no lingering expert-residency penalty at 2-minute resolution;
preemptions: 0 rules out preempt-and-re-prefill. The stall is step contention.

The verdict: radiance's two knobs for this (--busy-prefill-chunk,
--prefill-interleave) are absent from the pinned 1.0.13 — proven with
podman exec frank-archon radiance --help on the running container — so on this pin the
only crank is MNBT, and that is an arm (vendor: −19 % prefill at a 1024 chunk; this
page already knows 2560 collapses decode via MTP resonance). An image bump is gated by
the 1.2.0 numerics dead end, so any try re-scores draft acceptance first.

  • LLM Performance Diagnosis §9 — the method: the counter arithmetic, the lagged-bucket
    correlation that separates contention from churn, and the four knobs with the vendor's
    published costs, including the arena/expert-slab coupling that makes a shared step
    doubly expensive on an expert_tiered shape.
  • frank-archon — two laws with this endpoint's measured numbers and the knob verdict.

Checks: ./tests/run.sh 449/449, scripts/check-vault-links.py 160 pages 0 unresolved.


cwd: /home/blank/.omp/wt/wt-20261019-020309-6d1fc1f · session: 01a15366-7601-7175-bb69-c62186c3f8b5

Docs-only. Records why decode on `frank-archon` turns to sludge while a long prompt prefills, what that costs on this shape, and which knob turns it. **The census** (live counters, boot of 2026-10-15; no bench, no request was perturbed): decode-only steps average 18.7 ms, prefill+mixed steps 317 ms — 60 % of engine wall-clock sits inside 8 % of the steps, because the chunk is `min(remaining, checkpoint interval 2048, MNBT 2048)` = 2048 rows and every decode row sharing that step waits the whole chunk. A day of Prometheus (120 s step, 721 samples): decode median **13.3 t/s** in the 56 % of samples where prefill ran ≥ 1000 t/s, against 106–240 t/s otherwise. **The discriminator**: decode measured 2–14 min after a busy-prefill window sits at the idle baseline, so there is no lingering expert-residency penalty at 2-minute resolution; `preemptions: 0` rules out preempt-and-re-prefill. The stall is step contention. **The verdict**: radiance's two knobs for this (`--busy-prefill-chunk`, `--prefill-interleave`) are **absent from the pinned 1.0.13** — proven with `podman exec frank-archon radiance --help` on the running container — so on this pin the only crank is MNBT, and that is an arm (vendor: −19 % prefill at a 1024 chunk; this page already knows 2560 collapses decode via MTP resonance). An image bump is gated by the 1.2.0 numerics dead end, so any try re-scores draft acceptance first. - `LLM Performance Diagnosis` §9 — the method: the counter arithmetic, the lagged-bucket correlation that separates contention from churn, and the four knobs with the vendor's published costs, including the arena/expert-slab coupling that makes a shared step doubly expensive on an `expert_tiered` shape. - `frank-archon` — two laws with this endpoint's measured numbers and the knob verdict. Checks: `./tests/run.sh` 449/449, `scripts/check-vault-links.py` 160 pages 0 unresolved. --- cwd: /home/blank/.omp/wt/wt-20261019-020309-6d1fc1f · session: 01a15366-7601-7175-bb69-c62186c3f8b5
dank added 1 commit 2026-10-19 04:11:54 -07:00
Live step-shape census on frank-archon (radiance 1.0.13, boot of 2026-10-15):
decode-only steps run 18.7 ms, prefill+mixed steps 317 ms — 60 % of engine
wall-clock inside 8 % of the steps — and a day of Prometheus shows decode at
13.3 t/s median while prefill runs >=1000 t/s against 106-240 t/s when it does
not. The lag test says the penalty is confined to the prefill window: no
lingering expert-residency tail, and preemptions are zero.

Adds the method as LLM Performance Diagnosis S9 (counter arithmetic, the lagged
bucket correlation that separates step contention from residency churn, and the
four radiance knobs with their published costs), and the endpoint's own numbers
plus the verdict as two frank-archon laws: --busy-prefill-chunk and
--prefill-interleave are absent from this pin (proven via the running
container's --help), so MNBT is the only crank here and an image bump is gated
by the 1.2.0 numerics dead end.

No behavior change; docs only.
dank added 1 commit 2026-10-19 14:21:42 -07:00
Two conflicts, both from the 2026-10-19 vault compaction on main:

* frontmatter description — main shortened it to satisfy OKF DESC
  (max 120 chars); this branch's longer wording would have failed the
  seam. Kept main's shape and folded the new §9 in by naming
  step-shape attribution instead of profiler attribution.
* the Related bullet for [[vLLM Porting and Compile Triage]] — that
  page was destroyed on main, so the link is dropped rather than
  resurrected; this branch's [[frank-archon]] row is kept.

Index rows regenerated with scripts/gen-vault-index.py.
dank merged commit 7601edfe28 into main 2026-10-19 14:21:45 -07:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: dank/serverAppConfigs#27