LLM infrastructure deployment is the process of putting a large language model into production on GPU servers, together with the inference engine, API gateway, autoscaling, and monitoring needed to serve requests at a defined latency and cost. The model file is the smallest part of the job. Most deployment problems come from three calculations teams skip: how much GPU memory the KV cache needs at real concurrency, how many replicas a latency target requires, and which quantization level keeps accuracy acceptable.
The Layers of an LLM Serving Stack
A production deployment has more parts than a demo. Each layer has a decision and a common failure.
| Layer |
Typical components |
Decision to make |
Common failure |
| Model artifacts |
Weights in safetensors format, tokenizer, model card |
Which model, which license, which precision |
License terms not reviewed for commercial use |
| Inference engine |
vLLM, SGLang, TensorRT-LLM, NVIDIA NIM |
Engine and configuration per model |
Default settings leave most GPU memory unused or cause out-of-memory errors |
| Gateway |
OpenAI-compatible API, authentication, rate limits, routing |
How clients reach models and how usage is metered |
No per-team limits, so one client exhausts capacity |
| Orchestration |
Kubernetes, autoscaler, scheduler |
What signal triggers scaling |
Scaling on CPU load, which says nothing about GPU saturation |
| GPU nodes |
H100, H200, B200, L40S, L4 class GPUs |
GPU type and count per replica |
Model split across more GPUs than needed, wasting capacity |
| Retrieval |
Vector database, document store, embedding model |
Where documents live and who can retrieve them |
Retrieval ignores source permissions |
| Observability |
Latency, throughput, KV cache usage, errors, cost per request |
Which metrics define health |
Only average latency is tracked, hiding slow tail requests |
Choosing an Inference Engine

The inference engine determines throughput per GPU more than any other software choice. The main open options take different approaches.
| Engine |
Approach |
Fits best when |
| vLLM |
PagedAttention memory management, continuous batching, prefix caching, OpenAI-compatible server, broad model support |
You want a widely used default that supports most open models on NVIDIA and other accelerators |
| SGLang |
RadixAttention prefix reuse, fast structured output, strong multi-turn and agent workloads |
Many requests share long prompts or system prompts, or you need constrained JSON output |
| TensorRT-LLM |
Compiled engines with NVIDIA-optimized kernels, including FP8 and FP4 on supported GPUs |
You run a fixed set of models on NVIDIA GPUs and want maximum throughput per GPU |
| NVIDIA NIM |
Prepackaged inference containers built on optimized engines, licensed with NVIDIA AI Enterprise |
You want vendor-supported containers and predictable upgrades |
Benchmark at least two engines with your model, your prompt lengths, and your concurrency. Published benchmarks rarely match a specific workload, and the gap between engines changes from release to release.
Sizing GPU Memory: Weights Plus KV Cache
GPU memory for inference has two parts. The weights are fixed. The KV cache grows with every token of every active request:
KV cache per token = 2 × layers × KV heads × head dimension × bytes per value
For Llama 3.1 70B (80 layers, 8 KV heads, head dimension 128) in BF16, that is 2 × 80 × 8 × 128 × 2 bytes, about 0.33 MB per token. One request holding a full 8,192-token context therefore uses about 2.7 GB of KV cache.
Worked Example: How Many Concurrent Requests Fit
Take four 80 GB H100 GPUs serving Llama 3.1 70B in BF16 with tensor parallelism:
| Step |
Calculation |
Result |
| Total GPU memory |
4 × 80 GB |
320 GB |
| Weights |
70B parameters × 2 bytes |
about 140 GB |
| Runtime overhead (activations, CUDA graphs), example allowance |
about 10% of total |
about 32 GB |
| Memory left for KV cache |
320 − 140 − 32 |
about 148 GB |
| Concurrent requests at full 8,192-token context |
148 GB ÷ 2.7 GB |
about 55 |
Real requests rarely use the full context, so the engine can usually hold more active requests than this worst case. The calculation still sets a safe planning floor and shows why long-context features are expensive: doubling the context to 16,384 tokens halves the worst-case concurrency.
Quantizing weights to FP8 frees about 70 GB, and FP8 KV cache halves the per-token cost. On Hopper and Blackwell GPUs, FP8 is supported natively, which is why it is a common production choice for large models.
Latency and Throughput: The Metrics That Matter
Users experience two latencies, and they respond to different changes.
| Metric |
What it measures |
What drives it |
| Time to first token (TTFT) |
Delay before the first output token appears |
Prompt length, queueing, prefill compute |
| Time per output token (TPOT), also called inter-token latency |
Gap between successive output tokens |
Batch size, memory bandwidth, model size |
| Throughput |
Output tokens per second across all requests |
Batching efficiency, KV cache capacity |
| Goodput |
Throughput that still meets latency targets |
All of the above |
Total response time is roughly TTFT + TPOT × output tokens. With a TTFT of 0.4 seconds, a TPOT of 30 ms, and a 500-token answer, the full response takes about 15.4 seconds, though streaming lets users start reading after 0.4 seconds. Raising batch size increases throughput but also raises TPOT, so every deployment sets a target for each and measures goodput rather than raw throughput.
Capacity Planning: From Traffic to Replicas
Turn expected traffic into a replica count with three numbers: peak requests per second, average output tokens per request, and measured goodput per replica at your latency target.
Replicas = (peak requests per second × average output tokens) ÷ goodput per replica, rounded up, plus redundancy
For example, 20 requests per second × 400 output tokens needs 8,000 output tokens per second. If load testing shows one 4-GPU replica sustains 2,500 output tokens per second while meeting the TTFT and TPOT targets (an illustrative figure; measure your own), you need 3.2 replicas. Rounding up gives 4, and adding one for failover and rolling updates gives 5 replicas, or 20 GPUs.
Two refinements change the result in practice. Prompt-heavy workloads such as RAG with long retrieved context are limited by prefill compute, so measure TTFT under load, not only output throughput. And workloads where many requests share a long system prompt benefit strongly from prefix caching, which can raise goodput without more GPUs.
Quantization Choices
| Precision |
Memory for a 70B model's weights |
Hardware notes |
Accuracy risk |
| BF16 |
about 140 GB |
All modern data center GPUs |
Baseline |
| FP8 |
about 70 GB |
Native on Hopper and Blackwell |
Usually small; verify on your evaluation set |
| INT4 (AWQ, GPTQ) |
about 35–40 GB |
Broad engine support |
Larger; check reasoning and domain tasks carefully |
| FP4 |
about 35 GB |
Native on Blackwell |
Depends on model and calibration |
Quantization is an accuracy decision as much as a cost decision. Run the quantized model against the same evaluation set used to approve the full-precision model, and record the results before it goes to production.
Rollout Plan With Pass Criteria
| Step |
What to do |
Pass criterion |
| 1. Model approval |
Review license, evaluate accuracy on your tasks, choose precision |
Evaluation scores meet the agreed threshold |
| 2. Engine benchmark |
Run two engines with production-like prompts and concurrency |
Chosen engine meets TTFT and TPOT targets at expected load |
| 3. Load test |
Drive traffic to 1.5× expected peak, including long-context requests |
p95 TTFT and TPOT stay within targets; no out-of-memory errors |
| 4. Autoscaling setup |
Scale on queue depth, KV cache utilization, or in-flight requests, not CPU |
New replicas are ready before queue time exceeds the target |
| 5. Canary release |
Send a small share of traffic, such as 5%, to the new deployment |
Error rate and latency match the baseline for an agreed period |
| 6. Full rollout |
Shift traffic in stages |
No regression at each stage |
| 7. Rollback drill |
Revert to the previous model version under load |
Rollback completes within the agreed time |
Model weights for large LLMs take time to load onto GPUs, so new replicas are not instant. Keep weights on fast local or nearby storage, and set scaling thresholds early enough to absorb load time.
Where to Run It: API, Cloud GPUs, or Dedicated Infrastructure
| Option |
Data control |
Cost pattern |
Best for |
| Hosted model API |
Prompts leave your environment |
Per token |
Low or unpredictable volume, non-sensitive data |
| Cloud GPU instances |
Your environment on shared infrastructure |
Per GPU-hour |
Variable volume, teams already on that cloud |
| Dedicated private infrastructure |
Full control on single-tenant hardware |
Predictable monthly cost |
Steady volume, sensitive data, or fine-tuned proprietary models |
The break-even between per-token APIs and dedicated GPUs depends on sustained volume. Cost per million output tokens on your own GPUs is GPU cost per hour × GPUs per replica ÷ (goodput in tokens per second × 3,600) × 1,000,000. Compare that figure with API pricing at your real monthly volume. OneSource Cloud's analysis of inference economics at scale covers this comparison in more depth.
OneSource Cloud deploys LLM serving on dedicated AI GPU Clusters in U.S. data centers, including Richardson, Texas. The OnePlus Platform, OneSource Cloud's AI orchestration platform, provides inference services, Kubernetes lifecycle management, and developer tools on that infrastructure. See the OnePlus Platform.
FAQ
How many GPUs do I need to deploy a 70B LLM?
In BF16, weights alone need about 140 GB, so at least two 80 GB GPUs, and four for meaningful concurrency at long context. With FP8 weights and KV cache, two 80 GB GPUs can serve the model with moderate concurrency.
Which is better for production, vLLM or TensorRT-LLM?
vLLM is easier to adopt and supports more models out of the box. TensorRT-LLM often delivers higher throughput on NVIDIA GPUs for a fixed set of models but requires building engines per model and GPU type. Benchmark both with your workload before deciding.
What should LLM inference autoscale on?
Scale on signals tied to GPU saturation: request queue depth, KV cache utilization, or in-flight requests per replica. CPU utilization is a poor signal because the GPU is the bottleneck.
What is a good time to first token for an enterprise chatbot?
Many teams target well under one second at p95 for interactive chat, with streaming output. Long-context RAG requests have higher TTFT because the whole prompt must be processed first, so set separate targets per request type.
How long does it take to deploy an LLM on private infrastructure?
With GPUs already available, a single model can be benchmarked, load-tested, and released in stages within weeks. Most of the time goes to evaluation, load testing, and security review rather than installation.
Summary
Deploying LLM infrastructure is a sizing and validation exercise. Size GPU memory for weights plus KV cache at real concurrency, using about 0.33 MB per token for a 70B model in BF16. Turn traffic into replicas with measured goodput at your TTFT and TPOT targets. Choose quantization against your own evaluation set, autoscale on GPU-saturation signals, and roll out in stages with pass criteria at each step. Steady, sensitive, or proprietary workloads are usually the strongest case for dedicated infrastructure.
To size an LLM deployment on dedicated GPUs, explore OneSource Cloud's AI GPU Cluster service.