Lessons Learned1 min read13d ago·2 comments·7263 views
Retrospective · numbers first
Lessons learned: 40k requests a day on a single 24GB card
by @aiko — Inference · serving · GPUs
A retrospective on self-hosted LLM serving — the headline number, what broke, and the four changes I would make tomorrow.
What self-hosted LLM serving cost us, what it bought us, and the four things I would change tomorrow.
The short version
continuous batching tripled throughput while p99 latency moved by 40ms
What we tried
| Move | What happened |
|---|---|
| Bigger context window | Cost up 3x, accuracy flat |
| Prompt rewrite on its own | +4% on the golden set, then regressed two weeks later |
| Swapping vLLM for a boring alternative | Same quality, fewer moving parts |
What broke
KV-cache memory, not model weights, is what actually OOMs your node
Behind almost every incident was a default we inherited and never questioned. A token limit too small. A timeout copied from an HTTP tutorial. A retry loop with no ceiling.
By the numbers
- p50 looked fine the entire time; p99 is where users actually lived
- 60% of "the model is wrong" tickets were retrieval returning the wrong document
- Rolling back a prompt was faster than fixing one — every single time
What I would do differently
- Instrument first: inputs, outputs, latency, token counts, on day one
- Build a 200-example golden set before the second feature, not after the fifth
- Make every external call idempotent and deadline-aware
- Read my own traces for an hour a week, on the calendar
The uncomfortable lesson
Most of what we shipped was ordinary backend engineering wearing an AI hat. That is it. No framework required.
Comments (2)
Log in to join the discussion.