roofline-planner / planning
34 plans.
One wall.
Five models against nine GPUs, evaluated at 4K context with FP16 weights. No invented peaks: each plan is a committed receipt with its VRAM stack, ridge point, and measured decode rates. The planner's own answer is that batch-1 decode is always memory-bound — and batch decode doesn't buy it back.
The decision
Which GPU absorbs this model, how far the operating point sits from the roofline knee, and is batching worth anything?
receipt / 34 plans
Roofline sketch / log arithmetic intensity
—
VRAM stack / weights + KV vs card
—
WEIGHTS — KV —
VRAM — SPARE —
The plan read
—
—
—
knee sits above the operating point
—
batch size where it turns compute-bound
—
VRAM spare (derived %)
—
bs=64 total vs bs=1 (derived x)
| Model | GPU | VRAM / GB | tok/s bs=1 | tok/s bs=64 | ≈ $/M bs=1 | bs* knee | Fit |
|---|
Source receipts/receipt.json
34 plans / 5 models x 9 GPUs / FP16 / 4K context
Derived here: knee gap, spare %, batch ratio, $ / M tokens
Throughput is measured; the $ / GPU-hr price is your assumption
Open receipt ↗