Independent, free tool by Second Run · MIT · v2.3.0
Runner · not connected
Second Run · for Hot Aisle MI300X
Drop your vLLM result.
One figure: what 1,000 accepted requests cost on your Hot Aisle allocation, and what an H100 would have to deliver to tie. The file stays in this tab. The receipt recomputes from its bytes.
Download and extract the runner kit (zip, no dependencies, Node 20 or newer). From that folder run node runner/bin/workload.cjs serve, then open http://localhost:8787 (or connect this page to it). The runner is built against the public Hot Aisle API, read-only: it reads your team, allocations and prices and never provisions, deletes or powers anything. Its first run on a customer allocation is still pending. Add --demo for a synthetic trial with no account or GPU.
02
Prepare an evaluation. You see the exact vllm bench serve command, the concurrency levels it will test, the time and spend limits, and you approve a plan hash (the exact plan you approve; a changed plan needs a new approval). Nothing runs until then.
03
The runner drives the benchmark on your allocation and keeps every completed trial even if this tab closes; reconnect and it picks up where it was. The result is a qualified record. Later, a change to price, traffic or runtime tells you the smallest check that restores confidence.
Connect this page to your runner
Your browser may ask before letting a public page talk to localhost, and some block it. If so, the runner's own page at http://localhost:8787 is this same page and always works. Credentials stay with your runner; this page holds no state.
Inspect assumptions
Prices, gates, comparison conditions, full report, receipts
Everything the figure above rests on. Change any of it and the figure recomputes. Nothing here is typed in; every number comes from the imported bytes and the price you entered.
Cost = allocation price × benchmark windows, nothing else unless you enter it
Completed is not correct: gates decide what counts
Price ratios are not measured speed
Inputs
Your result, your price, your gates
Import one or more trials on each side; a comparator is optional. Files stay in memory and clear on reload.
Synthetic sample. Five fixture requests that exercise the software. Not a Hot Aisle or NVIDIA measurement.
Count only results that meet your requirements
“Completed” means a successful response, not a correct task. Gates below change the cost denominator. They need per-request samples.
Gates intersect on the same requests; nothing is multiplied. A per-request pass/fail file (a sidecar) binds correctness to an exact source hash. Sidecar format
Import a result on either side. A comparison file is optional.
No file needed
Price-only break-even
At the same allocation size, the share of a comparator's throughput that MI300X needs to tie on rental cost. Price ratios, not measured speed.
Prices per GPU-hour from each provider's public list page (DigitalOcean GPU Droplets, Nebius AI Cloud), reviewed 22 Sep 2026. Confirm the purchasable instance size. Custom rates and whole-bill charges go in the inputs above.
Manual path
Get a compatible result from your server
Add these flags to your existing, approved vllm bench serve command. Keep your actual model, request set and offered load. The runner emits exactly these.
This page never starts a benchmark by itself. The runner does, only after you approve a plan hash. Generated text and error bodies in detailed results are excluded from every export.
Receipts
Verify a receipt against its source file
Select a saved Evidence JSON and any original result file. A match proves the report was computed from exactly those bytes.
Command line: node scripts/recompute.cjs evidence.json original.json or workload verify <record> run the page's own engine outside the browser.
What this claims, and what it doesn't
Cost
Cost starts with the allocation you enter and the sum of the benchmark windows. Setup, restarts, idle time, storage and taxes outside those windows are excluded unless you enter them.
A whole-bill override divides your supplied charge by the outcomes in the imported set.
Repeated runs are weighted by measured duration.
Latency
Percentiles pool only when every trial has successful-request samples; otherwise per-trial ranges stay separate.
Failed requests never improve latency statistics. Producer goodput is recorded, never relabeled as correctness.
Qualification
A record is qualified when the concurrency level you will run at (its primary cell) meets every stated requirement with no requirement left unchecked (a held gate). Requirements are yours; the tool applies them, it does not choose them.
A local-environment record is always marked synthetic and can never be published as measured.
Comparison
Model, revision, precision, tokenizer, workload, cache and offered-load identities must match before a savings figure appears.
Entered identities are declarations. Imported benchmarks are producer evidence. There is no independent-verification badge.
Runner
The runner reads the Hot Aisle API and never provisions, deletes or powers anything. It starts a benchmark only for a plan whose hash you approved, within your time and spend limits.
Jobs and records live on the machine running the runner. The page holds no state.
Privacy
Files stay in memory and clear on reload. No account, backend, telemetry or storage in the page.
Reports omit prompts, responses, error bodies, original filenames and unknown metadata. They keep model and runtime identifiers, normalized timings and file hashes.
Projected in this browser from the record's retained trials through the page's own engine, then checked against the record's checksum. Nothing on this card is typed in.