Inference-Time Techniques: Spending Compute for Accuracy

A reasoning model thinks harder on its own — but you can spend test-time compute on top of any model, reasoning or not, to squeeze out more accuracy. Generate many answers and vote. Generate many and pick the best with a verifier. Search a tree of reasoning steps, pruning the bad branches. These techniques share one shape — do more work at inference, then choose well — and understanding them turns test-time compute from a model property into a toolkit you control.

The test-time-compute post named the family of techniques for spending inference compute; this post details the main ones you can apply at inference, on top of a model: best-of-N sampling, self-consistency, verifiers and reward models, and search. These are how you turn extra compute into extra accuracy explicitly, whether the underlying model reasons natively or not. Knowing them lets you build systems that spend compute deliberately where accuracy matters.

Best-of-N and self-consistency: sample, then select

The simplest inference-time techniques generate multiple candidate answers and select among them — trading N× the compute for better accuracy:

Sample-then-select:
   problem → generate N candidates (sampling) → [c1, c2, ... cN]
   self-consistency: return the most frequent answer
   best-of-N:        return argmax(scorer(ci))  ← needs a good scorer

Both spend compute (generate N instead of 1) to raise accuracy, and both illustrate the core pattern: generation is cheap and imperfect; selecting among many generations is where the gain is. The quality of best-of-N hinges entirely on the scorer — a good verifier makes best-of-N powerful; a bad one wastes the samples. Which is why verifiers matter.

Verifiers and reward models

A verifier (or reward model) is a model that scores candidate solutions — estimating how likely a solution is correct, or how good the reasoning is. Verifiers are the key to spending compute well, because generating candidates is easier than knowing which is right, and a verifier supplies that judgment:

Verifiers embody a deep idea: decouple generating from judging. A system that generates many candidates and verifies well can be much more accurate than one that must get it right in a single generation — because it converts the hard problem of “produce the correct answer” into the easier problem of “produce many candidates and recognize the correct one.” This generate-and-verify decomposition recurs throughout inference-time scaling.

Search: exploring the space of reasoning

The most structured way to spend inference compute is search — treating reasoning as exploring a tree of possibilities rather than committing to one path:

Search is the richest form of test-time compute: it spends compute exploring the solution space with lookahead and backtracking, which can solve problems that no single chain of thought reaches. It’s more complex and expensive than sampling-and-voting, but for hard problems with a large solution space (planning, complex proofs, puzzles), structured search can be far more effective than linear reasoning. It’s also computationally intensive — a genuine “spend a lot of compute” technique.

Choosing and combining techniques

These techniques form a toolkit, and using test-time compute well means choosing and combining them for the problem:

The unifying principle across all of them: generate more, and choose well — spend inference compute to produce and then select (or search over) candidates, converting compute into accuracy. Generation is imperfect but cheap; the leverage is in verification, voting, and search. Next: the economics — because all this compute has a cost, and knowing when the accuracy is worth the money and latency is the practical crux.

Key takeaways

Further reading

Sources & References