berth is an estimator. It predicts from a model, and an estimate you cannot check is just an assertion. So berth ships sounding, the same measurement harness that produced its own validation data. You use the estimator; the harness is how we earned your trust in it.
sounding drives an OpenAI-compatible completion server, vLLM or SGLang, with streaming requests across a grid of batch sizes, prompt lengths and output lengths, and records time to first token and time per output token per cell. Standard-library Python, so the box you rent needs nothing beyond a Python interpreter and a running model server.
One run measures one accelerator against one model: ninety cells across five batch sizes, three prompt lengths and two output lengths, in randomized order so thermal drift does not confound the sweep. Roughly an hour on a rented box, a few dollars of GPU.
Add a card by running it again there and passing both files to validate. Cells accumulate, and that is how the L40S and H100 PCIe comparison above was built.
The fixed prefill floor is a property of one accelerator, driver, server and config, and is not predictable from a spec sheet: it measured 74.6 ms on the L40S and 54.6 ms on the H100 PCIe. Silicon profiles ship 0.0 and every run fits its own. Do not carry someone else's.
No GPU handy? --mock runs the whole path from sweep to error report against the analytical model plus noise. Mock traces are stamped as such and can never enter the corpus.
Every record carries source, either measured or mock, written by the harness. A mixed file is refused, and CI rejects any contributed trace that cannot prove which it is. A mock trace and a hardware trace are otherwise indistinguishable on disk, and the corpus is worth exactly as much as that distinction.