⚡ llmspeed
Feel how fast a local LLM runs before you buy the hardware.
Pick a GPU or Mac and a model, and watch the answer stream at the real speed, including the wait before the first token.
llmspeed-demo.mp4
RTX 5090 vs Mac Studio M5 Ultra 512GB on GLM-5.3 Flash (Q8). The 5090 can't load it.
Features
- Real-time simulation: text streams at the predicted tokens/sec, after a realistic time to first token for your prompt length
- Race mode: run two setups side by side, e.g. a 5090 against a Mac Studio
- Memory fit: see whether a model fits at each quantization, needs partial offload to system RAM, or won't run at all
- 30 GPUs, Macs and CPUs × 15 popular models, across CUDA, Metal, ROCm, Vulkan and CPU
- Shareable links to any setup or race
How the numbers work
Every estimate is labeled with how much to trust it:
| Label | Meaning |
|---|---|
| Measured | Benchmarked on this exact hardware, model and quantization |
| Derived | Interpolated from measured benchmarks of similar setups |
| Projected | Calculated from hardware specs, e.g. for announced but unreleased hardware |
Sources. Benchmarks are collected and verified from r/LocalLLaMA, localscore.ai, llama.cpp discussions and more.
The model. When no benchmark exists, llmspeed falls back to first principles:
- Generation speed is bound by memory bandwidth: every token reads the active weights once. For mixture-of-experts models only the active parameters count.
- Prompt processing is bound by compute (FP16 TFLOPS).
- Both use per-backend efficiency coefficients calibrated against the measured benchmarks, plus a slowdown as context grows.
- Partial offload uses a hybrid model: the GPU-resident share streams at GPU bandwidth and the spilled share at an effective system-RAM bandwidth, calibrated from measured offload runs.
- Memory fit counts weights, KV cache and runtime overhead against usable memory: about 75% of unified memory on Macs and 93% of VRAM on discrete GPUs.
Contributing benchmarks
The most valuable contribution is a real measurement. To add one, open a PR that appends a row to benchmarks/submissions.csv.
-
Run llama.cpp's benchmark tool on your machine:
llama-bench -m your-model.gguf -p 512 -n 128
-
Add a row with your results:
Column Example hardwareNVIDIA RTX 4090 24GBmodelLlama 3.1 8B InstructquantQ4_K_MbackendCUDA,Metal,ROCm,VulkanorCPUengine_versionllama.cpp b6500gen_tps128.4(thetg128result)prefill_tps9850(thepp512result)prompt_tokens512source_urla link to your post, issue or gist with the full output notesanything unusual: power limits, flash attention, offload, … -
In the PR description, paste the full
llama-benchoutput.
Results from other engines (MLX, vLLM, ExLlama, …) are welcome too; just name the engine in engine_version. Want a model or GPU added? Open an issue.
Development
npm install npm run dev # local dev server npm run build # production build + prerendered landing pages + sitemap
Built with Vite, Preact and TypeScript. The site is fully static and deployed to GitHub Pages on every push to main. All predictions live in data/app-data.json, which is generated by the benchmark pipeline.
Limitations
- Single device only. Multi-GPU setups (tensor or layer split) aren't simulated yet.
- Estimates, not guarantees. Drivers, engine versions, flash attention, power limits and thermals can all move real numbers by 10–30%.
- Projected numbers for unreleased hardware will be replaced with measurements as they appear.
License
MIT. Benchmark data credits go to the r/LocalLLaMA and localscore.ai communities and everyone who has shared their numbers.