Long-form write-ups from a repository of measurements taken on 2× RX 7900 XT (gfx1100, RDNA3) under ROCm and vLLM. Each article draws its figures from the same committed data the repository verifies, and says on the page which of them can be recomputed and which cannot.
The charts plot one line per model per machine. Each line reflects that model's fastest measured configuration rather than a common baseline. Four of the six Radeon lines come from a single campaign on one stack and are directly comparable; the other two are drawn from a later stack, because on those two models the campaign is no longer the best this machine can do. The A100 carries five of the same models from its own single-afternoon campaign. Every line marks which stack it runs. The Radeon candidates are the ledger's TP=2 series, 2026-07-25 to 2026-08-29; the September ladders on this pair, which run past 32 000, are Figures 3 and 4's subject.
Figure 1. Decode rate at batch 1 against context length, log axis. The default view is every model on 2× RX 7900 XT at tensor parallelism 2; the switch above the chart turns the question round, to one model on every machine, and colour follows the question: the model in one view, the card in the other.
--enforce-eager buys it 2.51 GiB and a 2 020-token
pool.Figure 2. The other half of the same question: Figure 1 is how fast each machine generates, this is how fast it reads the prompt. Six models, fifty-two lines, eleven machines — every chart-grade prefill ladder this repository has between 500 and 32 000 tokens, recorded beside decode since July and never drawn until now. Colour and stroke are Figure 1's.
T(S) = a + b·S + c·S² — and
b is compute while c is how badly attention scales. Hover a point for that
line's fitted pair.gemma-4-31B and Qwen3.8-27B
lines were first measured on 2026-08-29, when one card had trained at PCIe 3.0 x8
— visible in the host's boot journal, never in the guest's sysfs. A reboot restored
it and both arms ran again, same container, same serve arguments: b
868.7 → 722.6 on the 31B and
846.2 → 758.5 on Qwen3.8. Those are the lines drawn.TRITON_ATTN, which this repository called free until
2026-08-30, is worth 1.15× of decode at 32 K and costs 1.45× of
prefill there.TILE_PREFILL on the head_size 512 layers — the quadratic term this figure
decomposes. Its c is this card with a different kernel, so it is off until
asked for and left out of the ratios above. Its b is not determined by its own ladder
either: the 32 K rung came from a second VM, the two agree to 4.61 %, and swapping
which supplies it moves b by 29.9 %. This curve is quadratic-dominated where no
other here is — 224 s against 97 s at 32 K — so the linear term
absorbs the uncertainty, as a does everywhere.Until 2026-09-03, every ladder on this machine stopped at 32 000 tokens. That appeared to be a
hardware boundary, but the limit belonged to the campaign: each arm set max_model_len to
33 000 while its KV pool held several times that. The two figures below ask those same questions
out to 128 000 — the pair serves as the subject on a ladder cut that day, with the machines
rented the same day one click away as the background.
Figure 3. Decode rate at batch 1 against context length, 500 to
128 000, log axis. The default view is 2× RX 7900 XT at tensor parallelism 2 on the
2026-09-03 ladder — the first rows on this machine past 32 000 — with
Qwen3.8-27B drawn as Figure 1 draws it, on the fastest configuration it has been
measured in rather than on that campaign's stack. The switch above
the chart puts one model on every machine rented that day instead. The controls are Figure 1's.
TRITON_ATTN and vLLM 0.27.1, so the
two are the same configuration in two sittings a week apart, on the narrowed and the restored
PCIe link. They agree to 1.78 % at worst across the eleven rungs they share —
which is what a cross-sitting control looks like when nothing but the sitting differs.
The 0.23.1 ladder that used to be drawn here is not. It is not withdrawn: it is in
campaign-2026-09-03, and the difference between it and these lines is the subject
of what a retention percentage is made of. It is
off this figure because those weights decode 12.33 tok/s at 500 there and
50.52 here, and a front page that draws the first is telling a reader something about
this machine that stopped being true. What that ladder does past
32 000 on 0.27 is now measured, to 128 000 and on both attention backends: the
depth cost falls from 0.350 to 0.233 microseconds per context token across the
version, and to 0.111 with --attention-backend TRITON_ATTN, which is the
line drawn here.Figure 4. Prefill throughput against prompt length to 128 000, the
same lines as Figure 3. T(S) = a + b·S + c·S² is fitted over the whole
ladder here, and the note under the chart says on each of the pair's lines where
c·S² overtakes b·S and what share of the deepest rung it is.
Thirteen write-ups, newest first by the date on the card — the last day evidence for that article was taken here, reported upstream or re-read. Under each title is the line that article used to lead with. Beneath it is what the piece establishes, in the words the synthesis article uses to classify it, so the two cannot describe a finding differently.
The date on an article marks when its evidence was taken, not when it was written. Three of the thirteen are dated to the last week of July, eight to the last week of August and two to September. The machine itself ran on 25, 26 and 28 July and on 1 August, then not again for three weeks — the second cluster is largely re-measurement of the first under conditions the first got wrong. A bar spanning two dates is an article whose evidence comes from two separate sittings, not one that ran throughout.
Each article is a dated record, not standing advice. Two of the largest findings in
this repository have already moved since they were measured. An Ubuntu kernel regression was fixed in
7.0.0-30, and an initial loader speed-up of 3.9× to 5.6× was withdrawn when page cache was
properly controlled. Every article therefore closes with a section listing what has changed since,
appended to rather than rewritten.
Figures carry a provenance marker. recomputable from repo means
verify_doc_figures.py
checks that value against its source file and fails non-zero if the two disagree — the same check that
guards the repository's own documents. raw output not committed means the
number is transcribed from a run whose raw output is not in the repository, and cannot be recomputed.
The absolute rates are a floor rather than a benchmark of the hardware. The test environment is a VFIO guest with no peer-to-peer between the cards and a cross-die PCIe 3.0 path, chosen deliberately as the least favourable topology. The shapes transfer; the levels are the worst case.
Source, raw data and the runners that produced the data: github.com/cadamcat/dual-radeon-vllm. Upstream reports and patches are linked from each article.