Benchmarks
Local LLM speed results across models, backends, hardware, and power profiles. Decode tok/s is the headline metric; latency, raw engine runs, and workload context stay visible in their own views.
content/benchmarks/runs/Advanced filters
Hardware tested
Rig metadata and microbenchmarks are shown here so memory bandwidth and tensor math do not get mixed into model-serving rankings.
| cap | theory | copy | fp16 | bf16 |
|---|---|---|---|---|
| 200 W | 936 GB/s | 391 GB/s | 65.4 TF | 65.4 TF |
| 300 W | 936 GB/s | 391 GB/s | 65.4 TF | 65.3 TF |
| 450 W | 936 GB/s | 391 GB/s | 65.4 TF | 65.4 TF |
A self-built quad-3090 benchmark rig used for local ML and inference testing. Rows in the table that read "2× RTX 3090" use llama.cpp's --split-mode layer across two cards so larger Q8_0-class 27B models fit in memory. Every other RTX 3090 row uses exactly one card.
- GPUs: 4× EVGA RTX 3090 FTW3 Ultra (24G-P5-3987-KR), running at the full 450 W cap. Earlier benchmarks at a 200 W rack-noise cap are noted in the per-run YAML and discussed in the power-limits post.
- CPU: AMD EPYC 7302P (16C/32T, Zen 2, SP3)
- Memory: 96 GiB DDR4-2933 (6× 16 GiB ECC RDIMM)
- Power policy: 450 W max per card for the current full-power runs, with older capped rows preserved for comparison.
| cap | theory | copy | fp16 | bf16 |
|---|---|---|---|---|
| 200 W | 672 GB/s | 271 GB/s | 67.9 TF | 68.4 TF |
| 250 W | 672 GB/s | 271 GB/s | 69.5 TF | 68.2 TF |
| 300 W | 672 GB/s | 270 GB/s | 69.6 TF | 68.4 TF |
A daily-driver gaming PC on CachyOS with an RTX 5070, pressed into service as a benchmark host between gaming sessions. The card sits at a 250 W of 300 W stock power cap (83%) by default on this rig; that limit is captured in the YAML and surfaced on each run.
Inference uses the prebuilt llama.cpp Vulkan binary (no CUDA toolkit or sudo on this host), so all RTX 5070 numbers here are Vulkan-backed rather than CUDA. That makes them directly comparable to the Strix Halo Vulkan numbers (same backend, different silicon) but understates what the card can do with CUDA. A CUDA pass will land later.
- GPU: NVIDIA GeForce RTX 5070, 12 GiB GDDR7, 250 W cap (300 W max)
- CPU: AMD Ryzen 9 7900 (12-core); the integrated Radeon iGPU is also visible to Vulkan as a second device but explicitly excluded from every bench via
--device Vulkan0 --split-mode none --main-gpu 0 - Driver: 595.58.03
- OS: CachyOS rolling, Linux 7.0
- VRAM-fit verification: every run snapshots GPU memory before and after the benchmark process starts and aborts if the delta is smaller than the model file size, which guards against silent CPU spill
| cap | theory | copy | fp16 | bf16 |
|---|---|---|---|---|
| fixed | 256 GB/s | 106 GB/s | 30.3 TF | - |
Framework Desktop with the AMD Ryzen AI Max+ 395 (Strix Halo) APU. 128 GiB of unified LPDDR5X system memory; the GPU side sees 96 GiB through the unified-memory pool. Integrated Radeon 8060S handles the inference workload via ROCm. No discrete GPU, no separate VRAM pool — the 27B-class models in this benchmark set all run on a single APU.
Best workload row per rig
| Rig | Best workload row | Decode tok/s | Backend / mode |
|---|---|---|---|
| GeForce RTX 3090 · 24 GiB | LFM2.5 350M · chat | 940.7 | llama.cpp baseline-pl-350w |
| GeForce RTX 5070 · 12 GiB | LFM2.5-350M · rag | 905.0 | llama.cpp baseline |
| Strix Halo · Radeon 8060S · 128 GiB unified (96 GiB VRAM) | LFM2 1.2B · chat | 211.5 | llama.cpp baseline |
Use these rows for GPU-to-GPU comparisons when the model, quant, backend, driver family, power policy, and benchmark shape match closely.
Use these rows to compare a similar software stack. They are useful, but backend, server path, driver, cache, or power settings may still influence the number.
Treat these as real workload measurements, not pure hardware rankings. They include prompt mix, API/server overhead, cache behavior, and local software details.