we stopped projecting your earnings and started measuring them
Every marketplace for GPU time shows you a number before you own an account. "Up to $180 a month." "Earn while you sleep." The number is real in the sense that some card, somewhere, under some conditions, produced it.
We built that page too. Then we benchmarked a real card and threw the page away.
the number that broke the habit
An RX 7900 XTX, serving Qwen3.8 27B, on our own pinned engine build: 7.8 tokens per second. Batched across four concurrent requests: 8.8. At our launch price that is under two cents an hour to the host, against roughly ten cents of Belgian electricity.
Negative. On the flagship model, on a card near the top of what consumers buy.
We could have shipped the estimator anyway — it is not lying, exactly, it is a different card under different assumptions. Instead we changed what the product is allowed to say.
estimated, qualified, failed
Every model on a machine now sits in one of three states, and the words are load-bearing:
- estimated — the catalogue thinks this build fits your card. Enough to decide whether a 15 GB download is worth it. Never enough to quote money.
- qualified — mahout loaded it on your machine and measured it. Decode rate, time to first token, signed into a receipt.
- failed — we tried and it did not work, with the reason. A silent gap looks like a bug; a stated failure looks like an honest agent.
Only a qualified row produces a euro figure, and the formula is on the page:
€/hour while serving = measured tok/s × 3600 ÷ 1e6 × output €/Mtok × 0.8
Per serving hour — never per month. A monthly figure requires promising demand, and we cannot promise demand. When there is no work, an honest dashboard should show that, not a projection.
what it cost us
A worse-looking landing page, and a conversation we now have to have: at today's prices, on today's engine build, hosting a 27B loses a host money. That is not a comfortable thing to publish.
It is also the reason we found the fix. Digging into why the number was so bad turned up a 3× difference between our pinned engine binary and one compiled on the machine — same model, same flags, same card. A generic upstream build was costing every host three quarters of their earnings. We would not have gone looking if the dashboard had been quoting somebody else's 4090.
the levers, in order
- Better engine binaries. 3× measured, and the largest lever by a distance.
- Price. Now editable from the operator dashboard without a release, precisely so it can move the day the arithmetic says it must.
- Real batching. Continuous batching gives ×1.1 on a 27B and ×1.7 on a 12B on this engine — not the ×15 the datacenter literature promises. The workstation tier is where that changes.
Until those land, your dashboard will keep showing small numbers, because they are your numbers. We would rather lose the host who wanted a fantasy than keep them for six weeks and lose them angry.
What your GPU actually earns · What a receipt proves · Measure your own card
Read next
one model, every card: how a 27b runs on 8 gb
Qwen3.8 27B ships in five builds, from Q5_K_M on a 24 GB card down to IQ2_XXS on 8 GB. Why we split models from builds, what quantization actually costs, and how a quantized KV cache doubled our context overnight.
prices should not need an engineer
Our price book used to be a file in a repository, which meant changing a price meant a deploy. It is now a dashboard control with guard rails that refuse an incoherent price — and the file is still the fallback you can return to.