All Resources

R-40

Intelligence (AI)

Local AI: When It Wins, and When It Does Not

An honest account of running models on your own hardware — the four cases where it is clearly right, the arithmetic that decides cost, and the operational burden nobody mentions.

PAR2 Labs

August 22, 2026

14 min

Local AI: When It Wins, and When It Does Not

Local inference is neither the obvious future nor a hobbyist detour. It is an engineering trade with a narrow set of cases where it clearly wins and a much larger set where it quietly costs more than the API it replaced. This is how to tell which one you are in, before you buy the hardware.

01

The four cases where local clearly wins

Data that legally or contractually cannot leave a boundary. Workloads with high, steady volume where per-token pricing compounds. Latency requirements that a round trip cannot meet. And environments where the network is unreliable or absent.

Notice what is not on that list: cost at low volume, quality, and 'we want control'. At low volume an API is almost always cheaper all-in, frontier hosted models remain ahead of what fits on one box, and control has an operational price that is easy to underestimate.

HONEST COMPARISON — LOCAL VS HOSTEDLocal winsData cannot cross a boundaryHigh steady volume, predictableSub-100ms, or no network at allFixed cost preferred to variableSmall specialised model sufficesAir-gapped or intermittent siteHosted winsLow or spiky volumeFrontier capability requiredSmall team, no ops capacityFast iteration on model choiceLong context windows neededYou have not measured demand yetDEFAULT TO HOSTED UNTIL A SPECIFIC CONSTRAINT FORCES LOCAL — THEN MOVE ONLY THAT WORKLOAD

Fig 1 — this is not a maturity ladder. Most production systems end up hybrid: a local model for the high-volume routine path and a hosted model for the hard cases.

02

The arithmetic

The break-even calculation is simple enough to do on the back of an envelope, and doing it honestly settles most arguments. Count the whole cost of local, not just the GPU: hardware amortised over its useful life, power, hosting or rack space, and the engineer time to keep it running.

Then compare against actual measured token volume — not projected volume, which is invariably optimistic by a factor that matters.

Cost lineHostedLocalNote
Marginal requestPer token, published≈ electricity onlyLocal marginal cost is genuinely near zero — that is the whole appeal
Fixed costNoneHardware amortised + power + spaceThe number that has to be beaten by volume
Ops burdenProvider's problemYours: updates, drivers, capacity, on-callConsistently the most underestimated line
Capability ceilingFrontier, improves without youWhat fits in your VRAM todayImproving quickly, still a real gap on hard reasoning
Scaling shapeElastic, instantBuy another box, wait for deliverySpiky demand is expensive to serve locally
Data exposureLeaves your boundaryStays insideOften the only line that actually matters

If data residency is the driver, the arithmetic is irrelevant — the requirement decides it. Do the sums only when cost is the argument.

Local inference is not a maturity ladder — it is a trade with four narrow cases where it clearly wins.

03

Standing up local inference properly

If you have concluded local is right, this is the path. The order matters: measuring demand before buying hardware prevents the most expensive mistake in the exercise.

01

Measure real demand before buying anything

  • TOOL

    Your existing hosted usage

  • USE

    Tokens per day, p95 concurrency, prompt/completion split

  • GET

    A sizing input based on evidence

Instrument the current hosted usage for at least two weeks: total tokens, requests per second at peak, and the ratio of input to output tokens. Model that against candidate hardware before any purchase.

Why: VRAM sizing follows from concurrency and context length, not from the parameter count alone. Buying first and measuring later is how you end up with a box that cannot serve peak.

02

Right-size the model to the task

  • TOOL

    Your eval set

  • USE

    Smallest model that passes; compare against the hosted baseline

  • GET

    A justified model choice

Run your eval set against progressively smaller models until quality drops below the threshold the task genuinely needs. Compare each against the hosted model you are replacing, on the same set.

Why: Most production tasks are classification, extraction or routine drafting, and a well-chosen small model handles them. Serving a very large model for a task a small one does is the fastest way to make local uneconomic.

03

Understand quantisation before you rely on it

  • TOOL

    GGUF or AWQ/GPTQ quantised weights

  • USE

    8-bit for near-parity; 4-bit when memory forces it

  • GET

    A model that fits, with known quality

Prefer 8-bit where it fits — degradation is usually slight. Drop to 4-bit only when memory forces it, and always re-run the eval set afterwards rather than trusting a general benchmark.

Why: Quantisation loss is task-dependent. A model that holds up on a public benchmark can degrade sharply on your specific extraction task, and only your eval set will show it.

04

Choose the serving stack for the shape of your load

  • TOOL

    vLLM for throughput, llama.cpp/Ollama for simplicity

  • USE

    Continuous batching and paged attention for concurrency

  • GET

    Hardware you are actually using

Use a server with continuous batching and paged KV-cache management if you have concurrent traffic. Use the simpler single-process runtimes for low concurrency, edge boxes or development.

Why: Naive serving leaves most of a GPU idle under concurrent load. Continuous batching is often the difference between serving five users and fifty on identical hardware.

05

Put it behind the same interface as the hosted model

  • TOOL

    An OpenAI-compatible endpoint

  • USE

    One client interface, provider selected by config

  • GET

    A reversible decision

Expose the local server behind the same API shape your application already uses, and make the provider a configuration value. Keep the hosted path working and tested.

Why: This keeps the decision reversible per workload and lets you route hard cases to a hosted model without a rewrite. It is also your fallback when the box is down.

06

Run it like production, because it is

  • TOOL

    Your existing monitoring

  • USE

    GPU utilisation, VRAM headroom, queue depth, p95 latency, thermals

  • GET

    An operable service

Alert on queue depth and VRAM headroom, not just on liveness. Plan for driver and runtime upgrades, model version pinning, and who is on call when it stops at 2am.

Why: This is the line that gets left out of the business case and then dominates the actual cost. A local model is infrastructure, with all the obligations that implies.

04

What people regret

Every item here is something teams say afterwards, not something they anticipated. Most of them stem from treating the move as a technology choice rather than an operations commitment.

Regrets, in order of frequency

01

Bought hardware before measuring demand, and sized it against a projection rather than a trace.

02

Served a very large model for a task a small one handled, destroying the cost case entirely.

03

Quantised to 4-bit for memory, never re-ran the eval set, and shipped a quiet quality regression.

04

No continuous batching, so a capable GPU served a handful of concurrent users.

05

No fallback to a hosted provider, so a driver upgrade became a product outage.

06

Counted GPU and power in the business case, and left out the engineer who now maintains it.

05

Reference

The serving-stack documentation is the practical reading; the sizing decisions come from your own traces rather than from anyone's benchmark table.

Primary documentation

vLLM

Continuous batching and paged attention — the throughput path for concurrent serving.

llama.cpp

GGUF quantisation formats and CPU/GPU inference for smaller deployments.

Ollama

The fastest way to get a local model behind an HTTP endpoint for evaluation.

Hugging Face Transformers

Model cards, licences and quantised weight variants.

NVIDIA DGX Spark

The unified-memory class of box that fits models a consumer card cannot.

OpenTelemetry — GenAI conventions

So local and hosted paths report the same telemetry shape.

Key Takeaways

01

Default to hosted until a specific constraint forces local, then move only that workload.

02

Measure two weeks of real token volume and p95 concurrency before buying hardware.

03

Right-size the model to the task — a large model on a small task destroys the cost case.

04

Put local behind the same interface as hosted, so the decision stays reversible.


PAR2 Labs · Intelligence (AI)

Work With Us

Have a problem worth solving?