Dual-engine (llama.cpp + vLLM) LLM benchmarking pipeline for GGUF & safetensors on NVIDIA GPUs — speed, quality, live dashboard, publishable cards.
35
stars
307
commits
Python
primary language
Sep 8, 2026
updated
Professional benchmarking pipeline for GGUF and safetensors models on NVIDIA GPUs. Built for RTX 5090 (Blackwell), works with any CUDA-capable GPU.
Dual-engine: llama.cpp for GGUF models, vLLM for safetensors. Produces structured JSON results, live web dashboard, and publishable benchmark cards.
-p 128,512,2048,4096,8192,16384 -n 128 (prompt processing at six context lengths plus tg128 generation, speed.context_lengths in config.yaml), or the vLLM API for safetensors models. A served (HTTP) lane, scripts/speed_served.py, times streaming chat completions against a running server and reports TTFT and perceived tokens per second as percentiles.lib/evals/ against llama-server chat completions, at temperature 0, letter or number extraction and code execution for scoring. There is no lm-evaluation-harness dependency, so multiple-choice scores are generative rather than loglikelihood based and can differ from harness numbers by several points; they are consistent with each other, which is what the board needs. GPQA-diamond is a second tier task: reported alongside, never part of q_avg.scripts/board_ci.py writes dataset/board_ci.csv with a Wilson 95% interval per task per row and a propagated q_avg half-width, so neighbouring rows can be read as a tie when they should be.provenance block into results/<slug>/meta.json (llama-server build and chat template hash, server command line, gguf sha256, harness git sha, resolved quality config) so a number can be traced back to what produced it.# Clone and configure
cp config.example.yaml config.yaml
# Edit config.yaml with your paths and hardware
# Install dependencies
pip install -r requirements.txt
playwright install chromium
# Benchmark a single model
python bench.py path/to/model.gguf
# Speed benchmarks only
python bench.py path/to/model.gguf --speed-only
# Queue multiple models
python bench_queue.py add path/to/model.gguf
python bench_queue.py add-all # scan HuggingFace cache
python bench_queue.py list
python bench_queue.py start
# Live dashboard (run alongside benchmarks)
python dashboard.py
# Export results
python export.py model-slug
python export.py --compare model-a model-b model-c
MIT
307 commits
Python
91.4%
HTML
4.3%
Shell
4.3%
Dual-engine (llama.cpp + vLLM) LLM benchmarking pipeline for GGUF & safetensors on NVIDIA GPUs — speed, quality, live dashboard, publishable cards.
35
stars
307
commits
Python
primary language
Sep 8, 2026
updated
Professional benchmarking pipeline for GGUF and safetensors models on NVIDIA GPUs. Built for RTX 5090 (Blackwell), works with any CUDA-capable GPU.
Dual-engine: llama.cpp for GGUF models, vLLM for safetensors. Produces structured JSON results, live web dashboard, and publishable benchmark cards.
-p 128,512,2048,4096,8192,16384 -n 128 (prompt processing at six context lengths plus tg128 generation, speed.context_lengths in config.yaml), or the vLLM API for safetensors models. A served (HTTP) lane, scripts/speed_served.py, times streaming chat completions against a running server and reports TTFT and perceived tokens per second as percentiles.lib/evals/ against llama-server chat completions, at temperature 0, letter or number extraction and code execution for scoring. There is no lm-evaluation-harness dependency, so multiple-choice scores are generative rather than loglikelihood based and can differ from harness numbers by several points; they are consistent with each other, which is what the board needs. GPQA-diamond is a second tier task: reported alongside, never part of q_avg.scripts/board_ci.py writes dataset/board_ci.csv with a Wilson 95% interval per task per row and a propagated q_avg half-width, so neighbouring rows can be read as a tie when they should be.provenance block into results/<slug>/meta.json (llama-server build and chat template hash, server command line, gguf sha256, harness git sha, resolved quality config) so a number can be traced back to what produced it.# Clone and configure
cp config.example.yaml config.yaml
# Edit config.yaml with your paths and hardware
# Install dependencies
pip install -r requirements.txt
playwright install chromium
# Benchmark a single model
python bench.py path/to/model.gguf
# Speed benchmarks only
python bench.py path/to/model.gguf --speed-only
# Queue multiple models
python bench_queue.py add path/to/model.gguf
python bench_queue.py add-all # scan HuggingFace cache
python bench_queue.py list
python bench_queue.py start
# Live dashboard (run alongside benchmarks)
python dashboard.py
# Export results
python export.py model-slug
python export.py --compare model-a model-b model-c
MIT
307 commits
Python
91.4%
HTML
4.3%
Shell
4.3%