DASTANZAR / MLSYS
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 ↗