November 3, 2026 / Isolated model benchmark

Two dense models.
Three engines.

PXA 4 improves the 0.8B helper; the 9B has no compelling speed winner in this matched, isolated comparison.

54timed requests · three rounds
72 / 72narrow sanity checks passed
18 / 18cancellation and recovery checks passed

Decision and scope

Keep the 9B on custom PXA 3.1 on this evidence. PXA 4 is the strongest candidate for a separate 0.8B production qualification; this study does not activate it. No serving route, model, or production process was changed.

The 9B test uses an 8,192-token context and an equal layer split across two V100s to fit spare capacity. Production uses one GPU and a 131,072-token context. These results do not establish its full-context or single-GPU performance. The helper retains its 4,096-token context and GPU1 placement. Both are dense Qwen3.5 models; Rust CPU-expert optimization results do not transfer directly.

0.8B Q8_0

PXA 4 reduces median request time by 10.7–15.1% versus custom 3.1, with 20.4–21.8% faster generation. expXa is close to custom 3.1. All helper outputs match across engines and rounds.

Three rounds per cell; 128 generated tokens. Times are seconds. Parentheses show observed minimum–maximum, not confidence intervals.
EngineInput tokensPrefill tok/sDecode tok/sFirst contentRequest: median (range)
Custom PXA 3.15127,175.0275.80.0740.537 (0.536–0.544)
PXA 4.0.15127,420.0336.00.0710.456 (0.451–0.458)
expXa 30cec2f5127,093.5273.00.0760.546 (0.538–0.546)
Custom PXA 3.12,0488,055.7276.50.2580.721 (0.719–0.724)
PXA 4.0.12,0488,373.0333.20.2490.632 (0.632–0.635)
expXa 30cec2f2,0488,041.8275.40.2590.724 (0.723–0.729)
Custom PXA 3.13,5847,956.4274.00.4580.927 (0.925–0.929)
PXA 4.0.13,5848,288.5329.90.4390.828 (0.826–0.828)
expXa 30cec2f3,5847,936.0273.40.4580.927 (0.926–0.927)

9B Q4_K_M

Median request times differ by less than 1% from custom 3.1 at all measured lengths. There is no practical upgrade case here. PXA 4 changes the generated text at 512 and 2,048 input tokens; custom 3.1 and expXa match each other. At 6,144 tokens all engines match.

Three rounds per cell; 128 generated tokens. Times are seconds. Parentheses show observed minimum–maximum, not confidence intervals.
EngineInput tokensPrefill tok/sDecode tok/sFirst contentRequest: median (range)
Custom PXA 3.15122,232.199.70.2571.542 (1.540–1.544)
PXA 4.0.15122,187.999.40.2561.542 (1.538–1.558)
expXa 30cec2f5122,212.099.40.2601.548 (1.542–1.550)
Custom PXA 3.12,0483,419.898.90.6311.924 (1.924–1.926)
PXA 4.0.12,0483,387.998.90.6391.934 (1.931–1.952)
expXa 30cec2f2,0483,428.198.90.6301.925 (1.924–1.932)
Custom PXA 3.16,1443,816.097.81.6392.949 (2.947–2.955)
PXA 4.0.16,1443,768.497.61.6622.975 (2.972–2.984)
expXa 30cec2f6,1443,808.597.61.6422.956 (2.952–2.960)

Matched method

All three installed runtimes used identical model files, token fixtures and per-model settings. Custom PXA 3.1 reports 0a1fe56; official PXA 4.0.1 reports caf43bd939. expXa is pinned by the 30cec2f540bc source receipt and matching runtime hashes (its version command reports unknown). Binary hashes and model hashes are in the download.

Three rounds rotate engine order, model order and input-length order. Each arm starts a fresh isolated server and performs an unscored warm-up. Speed requests disable prompt caching and force exactly 128 output tokens at greedy sampling; returned token counts are checked. Inputs are a repeated synthetic ledger, tokenized identically per model. This is a controlled throughput fixture, not a representative workload suite.

Both models use one slot, Q8_0 K/V, Flash Attention and full GPU layer offload, with speculation disabled. 9B uses 4 generation / 8 batch threads, batch4,096 / microbatch512; the helper uses 2 / 2 threads, batch256 / microbatch128. Engine-specific CPU-expert and Kairo attention/MTP profiles are not enabled. First-content time is the client-observed first nonempty streaming chunk, not a GPU kernel timing.

Correctness and adverse evidence

Four separate chat checks cover arithmetic, supplied-context grounding, field extraction and negation, with natural EOS and thinking disabled. All 72 checks passed. Each arm then cancels a long isolated request, verifies slot release, and repeats arithmetic twice: all 18 recovery checks passed with matching answers. These checks do not establish broad reasoning quality, long-context reliability or production readiness.

The 9B PXA 4 speed outputs differ consistently from custom 3.1 and expXa at two input lengths. Each engine is deterministic across the three rounds. These are untemplated, forced-length synthetic continuations; a text difference alone is not a correctness failure, but it prevents claiming bitwise or behavioral equivalence. Raw text and hashes are retained. All 18 arms completed without retries or exclusions.

Shared-host limits and preservation

All production text models stayed resident. A guard sampled their native slots and GPU/host memory every 0.5 seconds and would stop only the candidate on observed production activity or low reserve. Accepted samples observed no production work. The lowest recorded free GPU memory was 2,083 MiB on GPU0 and 3,069 MiB on GPU1. Production PID, start-time and command identities matched before and after every arm. The temporary server and listener exited; GPU free memory returned to the initial values.

This is one shared host, three repetitions, and one synthetic prompt family. Other tenants, activity between guard samples, cache state and thermal variation are not fully controlled. Small differences should not be treated as general gains. No long-context stress, task-wide accuracy suite, broad cancellation matrix, or production promotion was performed.

Reproduce and inspect

The evidence download includes all 54 individual speed records and outputs, all sanity/recovery responses, exact token fixtures, model/binary hashes, methods, medians and observed ranges. Preserve this study alongside the earlier Rust results; they measure different architectures and placements.