← All articles
Guide

Second-price auctions, explained — why you never overpay for an hour

Bid the most an hour of GPU time is worth to you, pay whatever the runner-up bid, and get your hold back the moment you are displaced. The mechanics, walked through.

· 4 min read

The one-sentence version

You submit the most you are willing to pay for an hour of GPU time. If you win, you are charged the second-highest bid, not the number you submitted.

The gap between what you submit and what you pay is the entire design. It is what makes bidding your true maximum the correct strategy rather than a way to get punished for honesty.

Why your bid is not your price

The rule doing all the work is that your own bid never sets your price. It decides whether you win. Somebody else decides what you pay. Once that lands, the strategy falls out on its own.

Suppose an hour of 24 GB capacity is worth $0.40 per GPU-hour to you, and above that the job is not worth running this hour. Bid higher, say $0.55, and one of two things happens. Either you would have won anyway, in which case the price is unchanged and the extra bid bought you nothing. Or you win an hour you would otherwise have lost, at a price somewhere between $0.40 and $0.55, which is an hour you paid more for than it was worth to you. The only outcome an overbid changes is the bad one.

Bid lower, say $0.30, and the mirror image happens. Either you win anyway at exactly the same price, or you lose an hour that would have settled at $0.38 and that you would have been glad to pay for. Underbidding never lowers your price. It only costs you hours you wanted.

Bidding your true maximum is therefore weakly better than every alternative, whatever anyone else does. A strategy that is optimal without having to guess the other bidders is the whole reason the mechanism exists. It is Vickrey’s result from 1961, and it is why there is nothing here to game.

Worked example

Three AI teams bid for the same block of 24 GB capacity at 14:00 UTC. Their sealed bids are $0.41, $0.30 and $0.26 per GPU-hour.

The $0.41 bidder wins, because they submitted the highest number, and they are charged $0.30 for every GPU-hour they consume. On a 400 GPU-hour job that is $120.00 against a bid worth $164.00, so $44.00 stays with them purely because the runner-up set the price and they did not.

The $0.26 bid is irrelevant to what anyone pays. Only the runner-up sets the price. Third place and below change nothing except who becomes the runner-up if someone withdraws before the hour seals.

That $0.30 is also the clearing price on the operator side. It is the number the 80% operator pool is computed from, which is why the same figure turns up in the earnings walkthrough.

Sealed, but not blind

Sealed means nobody sees anyone else’s number. The winner does learn the runner-up’s bid, because that is what they are charged, but that is the only thing the mechanism ever discloses and it is unavoidable in any second-price auction.

What you can see is your own standing: whether your bid is currently in the winning position for the hour. That is deliberately not the same as seeing the book. Knowing you are ahead tells you nothing about by how much, so there is no information to trade on and no reason to shade your bid in response to it.

The hour seals at the top of the UTC hour. Until then a bid can be raised, lowered or withdrawn. After it seals, allocation and price are fixed and settlement runs.

Holds, and why losing costs nothing

Submitting a bid places a hold on your balance for the most it could possibly cost, which is your bid multiplied by the GPU-hours you asked for. It is a hold, not a charge.

If a later bid displaces you, the hold releases immediately. You are not charged for losing and you are not left with money parked behind a bid that is no longer in front. If you win, the hold settles at the clearing price and the difference comes back the moment the hour settles. In the example above, $44.00 is released within the second.

This is why raising your bid early costs nothing in practice. A higher number does not change what you pay against the field you are actually facing. It only changes the point at which you stop being willing to compete.

The two edge cases

With a single bidder there is no second-highest bid, so the hour settles at the class reserve, the floor price below which capacity is not sold. A bidder alone in a class pays the reserve rather than their own number. Charging them what they wrote down would punish exactly the honesty the rest of the design depends on.

Ties are broken by timestamp, and the earlier bid wins. The price is that same amount, since the tied bid is by definition the second-highest one. Submitting your number sooner is therefore weakly better than submitting it later, and that is the only timing advantage the mechanism has.