๐Ÿ”ฌ ParisiPlace GPU Inference Benchmark

Generated 19 August 2026 at 10:39 am ยท V100 run: bakeoff-v100-round2 ยท Titan V run: 2026-08-18

What is this?

This report benchmarks the performance of large language model (LLM) inference on local NVIDIA GPUs. We're running open-source AI models locally โ€” no cloud, no API fees, full privacy โ€” and measuring how fast each GPU and model combination can generate text responses.

The goal: select the best AI brain for our Librarian agent โ€” a local AI that organises knowledge, writes documentation, and synthesises information across our projects. The Librarian needs to be fast enough to feel interactive, smart enough to do complex reasoning, and small enough to fit in a single GPU's memory alongside its working context.

Our hardware: Two GPUs across two machines โ€” a Tesla V100 SXM2 (16GB HBM2) on the Unraid server (the Librarian's home), and a NVIDIA Titan V (12GB HBM2) on a laptop eGPU dock (the Titan Brain's home). Both are NVIDIA Volta architecture (2017โ€“2018 vintage server silicon) โ€” still highly capable for LLM inference thanks to their fast HBM2 memory.

Key Findings

V100 vs Titan V advantage
+26โ€“39%
Faster token generation on the same models.
900 GB/s vs 652 GB/s HBM2 bandwidth.
9B models vs current 26B Librarian
77% speed
81 vs 106 tok/s โ€” 23% slower, but 9ร— more VRAM headroom for longer conversations.
MoE model (Gemma4-26B) tg variance
ยฑ15.78
At tg512, vs ยฑ1.10 at tg128. Mixture-of-Experts routing is non-deterministic at longer outputs.
Dense model pp4096 scaling
Flat
9B dense models maintain speed across all context sizes. MoE drops ~4โ€“9% at 4K tokens.
๐Ÿ“– Metrics Guide โ€” what every column means and why it matters
tg128 / tg512 โ† Primary metric

Token generation speed โ€” how many tokens (โ‰ˆยพ of a word) the model outputs per second during a conversation. This is the number you feel as a user. At 80 tok/s, a 400-word response streams in ~5 seconds. At 30 tok/s, it takes ~13 seconds.

tg128 = generating 128 tokens. tg512 = generating 512 tokens. For a well-optimised dense model, these should be nearly identical โ€” the GPU reads weights at constant bandwidth regardless of output length.

โ–ฒ Higher is better. The #1 selection criterion.
pp512 / pp1024 / pp4096

Prompt processing speed โ€” how fast the model reads your input and the entire conversation history before generating the first word. pp512 = processing 512 tokens at once, pp4096 = 4096 tokens.

At the start of every response, the model must process the full context window (up to 131,000 tokens for our Librarian). Higher pp = faster time-to-first-token. Especially important for long documents or large conversation histories.

โ–ฒ Higher is better. Matters most for large context workloads.
pp4096 vs pp512 โ€” scaling behaviour

Context scaling test. Dense models (Qwen, Ornith) often get faster at larger batch sizes โ€” the GPU's 5120 CUDA cores are better utilised when processing more tokens simultaneously.

MoE models (Gemma4-26B with ~4B active parameters out of 25B) show a drop at pp4096 โ€” the sparse expert routing doesn't parallelise as efficiently at large batches.

Watch for: flat or rising = good. Significant drop = architecture overhead at scale.
Peak VRAM

GPU memory used during the benchmark. Whatever VRAM the model doesn't occupy becomes available for the KV cache โ€” the memory buffer storing the conversation history.

More VRAM headroom = longer conversations before slowdown. The current Librarian (13.4 GiB) leaves only ~2.7 GiB for KV cache. The 9B candidates (6.9 GiB) leave ~9 GiB โ€” enabling much longer conversations at full speed.

โ–ผ Lower model VRAM = more headroom for conversation history.
Power draw (W)

GPU wattage during inference. The V100 SXM2 has a 300W TDP; the Titan V is 250W. High power during tg confirms the GPU is compute-saturated โ€” fully utilised, which is ideal.

Very low power during tg (e.g. the Qwen3.8-27B IQ4_XS at ~39W) indicates CPU offload is occurring โ€” most layers are on RAM, not GPU, and the GPU is nearly idle while waiting for data.

Watch for: high power during bench = GPU fully engaged (good). Low power = likely CPU offload.
Temperature (ยฐC)

GPU core temperature at peak load. The V100 SXM2 HBM2 memory has an 85ยฐC thermal limit โ€” our benches peaked at 64โ€“66ยฐC, giving 19โ€“21ยฐC of thermal headroom.

Running 24/7 as the Librarian under sustained load will be warmer than a short benchmark. If temperatures approach 80ยฐC consistently, better airflow or reduced clock speeds may be needed. No throttling was observed in any of our runs.

Watch for: values above 80ยฐC warrant attention. Below 70ยฐC is comfortable.
SM Clock (MHz)

Shader processor clock speed during inference. The V100 SXM2 boosts to 1530 MHz under full load; the Titan V reaches 1335 MHz.

A consistently high SM clock during tg confirms no thermal or power throttling. If the clock drops significantly mid-bench, the GPU is protecting itself from overheating โ€” a signal that cooling needs attention.

Watch for: clock should hold steady. Drops mid-bench = throttling.
Memory Utilisation (%)

HBM2 bandwidth utilisation โ€” the fraction of the GPU's memory bus being used. LLM token generation is memory-bandwidth-bound: for each output token, the GPU must read the entire set of model weights from HBM2 memory.

80โ€“99% memory utilisation during tg is expected and healthy โ€” it means the GPU is spending its time moving weight data as fast as the HBM2 bus allows. Low utilisation suggests a bottleneck elsewhere (e.g. CPU-side data starvation).

Watch for: 80โ€“99% during tg is ideal. Below 60% suggests a non-GPU bottleneck.
Elapsed time (per model)

Wall-clock time for the complete benchmark of one model โ€” including Docker container startup (V100) or process launch (Titan V), model weight loading into VRAM, and all test repetitions.

The 9B models take 47โ€“105s per run; the 26B baseline takes 124โ€“152s (larger model = longer load). Docker adds ~35โ€“40s overhead vs the native binary on Calcifer โ€” which explains why the Titan V bench (3m55s) was faster than the V100 bench (8m48s) despite the V100 being the faster GPU.

Useful for planning future bakeoff sessions and overnight run estimates.
ยฑ Standard deviation

Measurement stability across 3 repetitions. A low ยฑ (e.g. ยฑ0.30) means the GPU is running at a stable, predictable speed โ€” good for a 24/7 production workload.

A high ยฑ (e.g. Gemma4-26B tg512: ยฑ15.78) means significant run-to-run variation โ€” in this case caused by the MoE model's non-deterministic expert routing at longer sequences. Not shown in bar charts but visible in the raw bench logs.

Watch for: high variance on tg may indicate real-world unpredictability.

Status badges

๐Ÿ“Š BaselineThe current production model โ€” all candidates are compared against this
๐ŸŽฏ ShortlistPassed speed + VRAM gates โ€” advancing to quality evaluation (5 real-world tasks)
โŒ EliminatedDisqualified โ€” too slow, VRAM doesn't fit comfortably, or dominated by a better candidate
โš ๏ธ FailedCould not be loaded or benchmarked โ€” architecture incompatibility or VRAM overflow

How bar charts work

Each bar is scaled relative to the highest value in that column. The number next to the bar is the actual value. Wider bar = better performance relative to other models in this run. The bars are a quick visual ranking โ€” always check the numbers for exact comparisons.

Why bench numbers โ‰  production numbers

The benchmark uses short contexts (pp512 = 512 input tokens, tg128 = 128 output tokens). Production runs at up to 131,072 tokens of context. The KV cache grows with context length, consuming VRAM and increasing memory pressure. Our current Gemma4-26B drops from 106 tok/s (bench) to ~77 tok/s (production 131K context) โ€” a 28% real-world reduction. The 9B models are expected to hold their speed better at full context due to their much larger VRAM headroom.

โš ๏ธ Important caveat

All llama-bench figures use short-context conditions โ€” these favour MoE (Mixture-of-Experts) architectures. The current Gemma4-26B baseline drops 106โ†’77 tok/s at 131K production context (~โˆ’28%). Apply a similar correction factor when comparing candidates. Rankings are valid for comparison; absolute numbers are not directly operational.
* VRAM column: measured peak from GPU stats where captured; falls back to model file size (marked *).

โฑ Bakeoff Runtimes
V100 (bakeoff-v100-round2): Gemma4-26B: 2m32s ยท Qwen3.5-9B: 1m45s ยท Ornith-9B: 1m45s ยท Gemma4-12B: 2m4s โ€” total: 8m6s
Titan V (2026-08-18): Qwopus3.5-9B: 47s ยท Ornith-9B: 49s ยท Qwen3.5-9B: 48s ยท Gemma4-12B: 1m3s โ€” total: 3m27s

ยง1 โ€” GPU Hardware Progression

To understand the bakeoff results, we first need a controlled baseline: the same model on different GPU hardware. Using Qwen2.5-Coder 7B Q5_K_M (a fixed 5.1 GB reference model) lets us isolate pure GPU performance differences โ€” the same code, same weights, only the silicon changes. This is how we measured the V100's real-world advantage over the Titan V, and confirmed the Thunderbolt 3 eGPU connection adds only a ~4% tg penalty (well within noise for an inference workload).

GPULocationDate tg128 tok/s โ–ผ tg512 pp512 tok/s pp128 pp1024 Notes
Titan V 12GB (direct PCIe)
NVIDIA Titan V GV100
Unraid โ€” direct PCIe x162026-06-11
95.5
95.2
3091.9
10663084 PCIe at Gen1 (no perf impact for inference). Pre-relocation baseline.
V100 SXM2 16GB (direct PCIe)
Tesla V100-SXM2-16GB
Unraid โ€” direct PCIe x16 Gen32026-06-11
119.1
118.2
3683.8
14103637 +24.7% tg vs Titan V. Current Librarian GPU.
Titan V 12GB (TB3 eGPU)
NVIDIA Titan V GV100
Calcifer โ€” Thunderbolt 3 eGPU2026-07-08
91.8
91.4
3122.3
11153077 TB3 tax: โˆ’3.9% tg vs direct PCIe. Titan Brain GPU.

ยง2 โ€” V100 Bakeoff: bakeoff-v100-round2 V100 SXM2 16GB ยท Unraid

Suite: pp128,512,1024,4096 + tg128,512 ยท r=3 ยท full-cuda b10450 ยท ngl=99 ยท -ctk q8_0 -fa auto

ModelStatus tg128 tok/s โ–ผ tg512 pp512 tok/s pp128 pp1024 pp4096 Peak VRAM Power Temp SM MHz Mem Util Elapsed โฑ Other GPU tg128 / ฮ” Notes
Gemma4-26B A4B Q4_0 (current Librarian)
25.23B ยท ngl=99
๐Ÿ“Š Baseline
106.3
96.5
1809.8
9321794174014.6 GiB 201 W60 ยฐC 153039 % 2m32s โ€” Current Librarian. Production tg ~76-77 tok/s at 131K context.
Qwen3.5-9B Q6_K
8.95B ยท ngl=99
๐ŸŽฏ Shortlist
81.8
81.6
2897.9
1329294228627.3 GiB 299 W83 ยฐC 153083 % 1m45s 63.1 / 30%
Ornith-9B Q6_K
8.95B ยท ngl=99
๐ŸŽฏ Shortlist
81.4
80.8
2804.7
1277287928397.2 GiB 302 W83 ยฐC 153082 % 1m45s 63.5 / 28%
Gemma4-12B QAT Q4_0
11.91B ยท ngl=99
๐ŸŽฏ Shortlist
69.7
65.0
1911.3
678189317677.8 GiB 287 W76 ยฐC 153074 % 2m4s 50.2 / 39% Same Gemma4 architecture as current Librarian.

ยง3 โ€” Titan V Bakeoff: 2026-08-18 Titan V 12GB ยท Calcifer TB3

Suite: pp128,512,1024,4096 + tg128,512 ยท r=3 ยท native CUDA build ยท ngl=99 ยท -ctk q8_0 -fa auto

ModelStatus tg128 tok/s โ–ผ tg512 pp512 tok/s pp128 pp1024 pp4096 Peak VRAM Power Temp SM MHz Mem Util Elapsed โฑ Other GPU tg128 / ฮ” Notes
Qwopus3.5-9B v3 Q6_K (Titan Brain)
8.95B ยท ngl=99
๐Ÿ“Š Baseline
63.8
63.7
2500.1
1048245324687.1 GiB 197 W71 ยฐC 133585 % 47s โ€” Current Titan Brain. Same model as Jul 2026 bakeoff winner.
Ornith-9B Q6_K
8.95B ยท ngl=99
๐ŸŽฏ Shortlist
63.5
63.3
2494.8
1047244624667.1 GiB 210 W79 ยฐC 133585 % 49s 81.4 / -22%
Qwen3.5-9B Q6_K
8.95B ยท ngl=99
๐ŸŽฏ Shortlist
63.1
63.0
2504.8
1060245724637.2 GiB 205 W77 ยฐC 133586 % 48s 81.8 / -23%
Gemma4-12B QAT Q4_0
11.91B ยท ngl=99
๐ŸŽฏ Shortlist
50.2
49.7
1541.0
537150914097.8 GiB 195 W78 ยฐC 133570 % 1m3s 69.7 / -28%

ยง4 โ€” Titan V Bakeoff: 2026-07-11 Historical โ€” Calcifer TB3

First model selection bakeoff on the Titan V. 5-test suite (pp128/512/1024 + tg128/512). Selected Qwopus3.5-9B-v3 as Titan Brain. pp4096 not measured (added in round 2).

ModelStatus tg128 tok/s โ–ผtg512 pp512pp128pp1024pp4096 SizeNotes
Qwopus3.5-9B v3 Q6_K (Titan Brain)
8.95B ยท ngl=99
๐Ÿ“Š Baseline
64.8
65.1
2519.2
10612556 โ€” 6.84 GiB Selected as Titan Brain. Deployed on Calcifer.
Ornith-9B Q6_K
8.95B ยท ngl=99
๐ŸŽฏ Shortlist
65.1
65.1
2524.6
10632564 โ€” 6.84 GiB
Qwen3.5-9B Q6_K
8.95B ยท ngl=99
๐ŸŽฏ Shortlist
64.4
64.7
2526.7
10722567 โ€” 6.94 GiB
Gemma4-12B QAT Q4_0
11.91B ยท ngl=99
๐ŸŽฏ Shortlist
56.4
56.1
1580.0
5491565 โ€” 6.48 GiB MBCS Jul 2026 unreliable (worker-busy on 12GB). Re-run on V100.
Phi-4 14B Q4_K_M
14.66B ยท ngl=99
โŒ Eliminated
57.1
56.9
1556.7
4901556 โ€” 8.43 GiB Dominated by 9B models on tg while being larger.
Gemma4-12B v2 Agentic Q4_K_M
11.91B ยท ngl=99
โŒ Eliminated
53.5
53.4
1600.5
5541580 โ€” 6.86 GiB Superseded by QAT variant.
Mistral-Nemo-12B Q6_K
12.25B ยท ngl=99
โŒ Eliminated
49.9
50.0
2012.9
6661948 โ€” 9.36 GiB Dominated by 9B models on tg and VRAM.
Qwen3.6-35B A3B IQ3_S (MoE stretch)
34.66B ยท ngl=99
โŒ Eliminated
10.0
9.9
140.4
53139 โ€” 12.73 GiB Expert layers on CPU. 10 tok/s unusable. Experts forced to CPU on 12GB VRAM.

ยง5 โ€” Cross-GPU Comparison: tg128 tok/s

Models appearing in multiple bakeoffs. Different llama.cpp builds โ€” directional only. V100 vs Titan V round-2 results shown.

Model Titan V Jul '26 (b9891) Titan V Round 2 V100 Round 2 (b10450) V100 vs Titan V Jul ฮ” Status
Qwen3.5-9B Q6_K 64.4 tok/s 63.1 tok/s 81.8 tok/s +27% ๐ŸŽฏ Shortlist
Ornith-9B Q6_K 65.1 tok/s 63.5 tok/s 81.4 tok/s +25% ๐ŸŽฏ Shortlist
Gemma4-12B QAT Q4_0 56.4 tok/s 50.2 tok/s 69.7 tok/s +24% ๐ŸŽฏ Shortlist

ยง5 โ€” Shortlist for Quality Evaluation

Three candidates for Librarian 5-task quality evaluation (runbook Step 3). VRAM headroom is a structural advantage: the current Gemma4-26B leaves ~2.7 GiB for KV cache at 131K context. 9B candidates leave ~9 GiB โ€” likely sustaining closer to bench-speed tg under production load.

ModelV100 tg128VRAM headroom (16GB)MBCSKey risk
Ornith-9B Q6_K 81.4 tok/s ~9.2 GiB free1P/5N/4F (behavioural fingerprint)New model โ€” quality unknown for Librarian tasks
Qwen3.5-9B Q6_K 81.8 tok/s ~9.2 GiB free3P/3N/4F (better injection resistance)Established Qwen lineage
Gemma4-12B QAT Q4_0 69.7 tok/s ~8.8 GiB free1P/9F โš ๏ธ instrument failure (12GB OOM Jul '26)Re-run MBCS mandatory on V100

ยง Run Your Own Benchmark

Download the standalone bench script below to run the same test suite on your GPU and compare results directly against the ParisiPlace baselines above. No special setup required beyond a llama.cpp CUDA build and a model file.

โฌ‡ Download

Self-contained bash script โ€” works on any Linux system with a CUDA GPU and llama.cpp.

โฌ‡ bench-standalone.sh

Quick start

# 1. Build llama.cpp with CUDA
git clone https://github.com/ggml-org/llama.cpp
cd llama.cpp
cmake -B build -DGGML_CUDA=ON
cmake --build build --config Release -j$(nproc)

# 2. Download the reference model (5.1 GB โ€” matches ParisiPlace hardware baselines)
huggingface-cli download Qwen/Qwen2.5-Coder-7B-Instruct-GGUF \
  qwen2.5-coder-7b-instruct-q5_k_m.gguf --local-dir ./models

# 3. Run the benchmark
bash bench-standalone.sh \
  --llama-bench ./build/bin/llama-bench \
  --model ./models/qwen2.5-coder-7b-instruct-q5_k_m.gguf \
  --label "Your GPU Name" \
  --output-dir ./my-results

# Results: my-results/bench-*.log + my-results/summary.txt

ParisiPlace hardware baselines (reference model above)

GPUConfigtg128 tok/spp512 tok/sDate
Titan V 12GB (direct PCIe)Unraid โ€” direct PCIe x1695.5430922026-06-11
V100 SXM2 16GB (direct PCIe)Unraid โ€” direct PCIe x16 Gen3119.0636842026-06-11
Titan V 12GB (TB3 eGPU)Calcifer โ€” Thunderbolt 3 eGPU91.8531222026-07-08

Share your summary.txt or bench-*.log output alongside your GPU model, VRAM, and driver version.