ErsatzGPU simulates the math, the Kubernetes scheduling, and the observability stack of a frontier-lab-scale GPU cluster — VRAM, KV cache, topology, MIG, a 100+ node fleet, Grafana, Prometheus, Langfuse — so you can learn distributed training and inference internals on a laptop.
Every number comes from real formulas, not lookup tables — run .venv/bin/pytest tests/ -v and see for yourself.
Real formulas, not a mockup — DeepSeek-V3 671B genuinely doesn't fit on one H200 in bf16, and the site tells you so.
Why this project
You can read papers about NVLink topology, KV-cache growth, or disaggregated prefill/decode serving — but without real GPUs you can't feel any of it. ErsatzGPU closes that gap: every number is computed from the same formulas that govern real hardware, the K8s layer schedules real pods against real (fake) GPU resources, and the observability stack is a real Grafana/Prometheus/Langfuse deployment. Only the GPUs themselves are ersatz.
VRAM breakdown, KV cache, cost, and power all respond correctly to input changes — bigger model, different GPU, more nodes — the same way real hardware would.
Pods actually get scheduled against fake GPU resources — device-plugins, MIG partitioning, a 100+ node KWOK-simulated fleet — not a mockup.
A genuine Grafana + Prometheus + Langfuse deployment, fed by simulated workloads — practice dashboards and LLM tracing without a live training job.
Use case
VRAM breakdown, architecture variants (GQA, MoE, MLA), NVLink/InfiniBand topology, training cost and power — all interactive, in a browser.
Prefill vs. decode, prefix-cache routing, vLLM PagedAttention, speculative decoding, and llm-d-style disaggregated serving tradeoffs.
Watch pods get scheduled against fake GPU resources — including MIG partitioning and a 100+ node simulated fleet — without hardware.
A real Grafana + Prometheus + Langfuse stack fed by simulated GPU workloads, for practicing dashboards or LLM tracing on demand.
A reusable GitHub Actions workflow that deploys the whole stack to a real k3d cluster and asserts GPU scheduling actually works.
No hardware bill, no cloud GPU quota request — spin up a full mock datacenter on a laptop for a class or a talk.
How it works
engine/ has zero web or Kubernetes dependencies — it's the single
source of truth the API, the K3s trainer Job, and the real inference server all call into, so the website's
numbers and a real scheduled pod's simulated behavior never drift apart.
Observability and WebUI
Runnable via docker-compose (no cluster needed) or in-cluster, layered on
kube-prometheus-stack and Langfuse's official Helm chart rather than reimplementing
either.
DCGM_FI_*-shaped metricsEcosystem integrations
| Project | What it enables |
|---|---|
| llm-d | The disaggregated prefill/decode serving model the Inference tab is built on |
| fake-gpu-operator | Opt-in richer GPU backend — MIG, DRA, its own Prometheus metrics, KWOK-simulated fleets |
| KWOK | Backs the 100+ node simulated fleet with no real kubelet required |
| Prometheus | Scrapes the real exposition-format metrics, including DCGM series |
| Grafana | Pre-provisioned dashboards, locally or via kube-prometheus-stack's sidecar |
| Langfuse | Per-request LLM tracing for simulated and real workloads against the mock cluster |
| Kubernetes / Helm | The whole k3s/ layer — device-plugin, trainer, inference-server, and the simgpu chart |
| GitHub Actions | A reusable e2e workflow other repos can call directly against a real k3d-deployed mock cluster |
Roadmap
Live status board: ErsatzGPU Roadmap · Contributions welcome — see CONTRIBUTING.md
No GPU, no cloud bill, no waiting on quota approval.