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.
One line per model per machine, each of them that model's fastest measured configuration rather than a common one. 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, its own whole campaign on one afternoon. Every line says which it is.
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.Every ladder on this machine stopped at 32 000 tokens until 2026-09-03, and that read as the
machine's limit. It was the campaign's: each arm set max_model_len to 33 000 while
its KV pool held several times that. The two figures below are the same two questions asked to
128 000 — the pair as the subject, on one ladder cut for it that day, and 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 — and the switch above the chart puts one model on every machine rented that day instead. The controls are Figure 1's.
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.
Eleven 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; under that, what it establishes, in the words the synthesis piece uses to classify it, so the two cannot describe a finding differently.
The date on an article is the date its evidence was taken, not the date it was written. Three of the eleven are dated to the last week of July and eight to the last week of August. 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 a 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, which is
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: this 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.