Choosing a serving stack

Choosing a serving stack

Guide

Choosing a serving stack

The software in front of your model decides your concurrency, your latency and how much of the card you actually use. It matters more than most model choices, and it is usually picked by accident.

Topic
Inference tooling
Reading
About 8 minutes
Published
1 August 2026
Applies to
All plans, Medusa

The short version

The differentiating properties are continuous batching, paged cache management, quantisation format support and operational maturity. Match those to whether you are prototyping, serving interactive traffic, or running batch work. Verify current capabilities against documentation rather than articles, including this one.

01Picked by accident

Most teams choose a serving stack by following whichever tutorial they found first, then keep it because migrating feels expensive. That is understandable and worth revisiting, because the stack sets ceilings the model cannot overcome.

Two implementations of the same model on the same card can differ several-fold in concurrent users supported, because memory management and batching strategy differ. No amount of model tuning recovers that.

We are deliberately not ranking named tools here. This space moves quickly enough that a ranking would be stale within months, and a stale recommendation is worse than none. What is stable is the set of properties to compare.

02What a serving stack does

Four jobs, and stacks differ in how well they do each.

  • Loads and places weights, including quantised formats and splitting across cards.
  • Manages the KV cache — allocation, eviction, reuse. The largest source of difference between stacks, and why cache behaviour deserves its own article.
  • Schedules requests — batching strategy, queueing, preemption.
  • Exposes an API and the operational surface around it: metrics, health, streaming.

A stack that does the first well and the second poorly will load your model successfully and then serve very few users — a confusing failure, because nothing errors.

03The properties that differentiate

What to compare, and why it matters
PropertyWhy it matters
Continuous batchingImproves throughput and latency together; the most consequential single feature
Paged cache allocationBlocks rather than contiguous reservations; large reduction in wasted memory
Prefix cachingReuses prefill for shared prompt prefixes; a big win with long system prompts
Quantisation formats supportedA format your server cannot load is not an option for you
Cache quantisationOften more valuable than weight quantisation for concurrency
Multi-GPU supportOnly matters if you will use more than one card
Metrics exposedDecides whether you can diagnose anything in production
Model coverageNew architectures are supported at different speeds across stacks

Check each against current documentation for the version you would deploy. Capabilities change quickly, and the honest recommendation is to verify rather than trust any summary, this one included.

04Rough fit by situation

Without naming tools, the shape of the right answer differs by what you are doing.

Prototyping and internal use. Optimise for setup time and model coverage. Concurrency is irrelevant with three users, and a stack you can run in one command beats one that serves forty people. Do not carry this choice into production by default.

Interactive production traffic. Continuous batching, paged cache and prefix caching are close to requirements. Metrics matter, because you will need to diagnose latency percentiles rather than guess.

Batch and offline work. Latency does not matter, so optimise purely for throughput: large batches, aggressive memory use, no streaming. A stack that is wrong for interactive serving can be ideal here.

Constrained hardware. On a 16 GB card, quantisation format support and cache quantisation matter more than scheduling sophistication, because your binding constraint is memory rather than compute.

05Things that bite three months in

Four problems that do not appear during evaluation and reliably appear later.

A model you want is unsupported. Architecture support varies, and being blocked on a stack’s release cycle is a real cost when a model you need has landed elsewhere.

Quantised weights in the wrong format. You quantise a model, then discover your server cannot load that format. Check compatibility before spending the GPU hours.

No usable metrics. Everything works until it does not, and then you cannot see queue depth, cache occupancy or per-phase latency. This is the failure that makes incidents last days instead of hours.

Memory fragmentation over long uptime. A server stable for hours can degrade over weeks as allocation patterns fragment. Test the uptime you intend to run.

06A selection procedure

  1. Write down which you are optimising — interactive latency or batch throughput. Skipping this is how teams end up with a stack that is wrong for their product.
  2. List the models you need now and plausibly next. Eliminate stacks that do not support them.
  3. Confirm quantisation compatibility for the formats you intend to use, in both weights and cache.
  4. Require continuous batching and paged cache for anything production-facing.
  5. Check the metrics surface against the four signals in what to monitor. If you cannot see them, you cannot operate it.
  6. Load-test with your own traffic shape — real prompt lengths, real concurrency, real output lengths. Published benchmarks were measured on someone else’s workload.

That last step is what a dedicated card makes straightforward: hold two stacks, serve the same model, compare against identical traffic without another tenant distorting the result.

If you would like help designing that comparison: contact@vijaycloud.com.

Leave a Reply

Your email address will not be published. Required fields are marked *