How to Deploy an LLM On-Premise: A Practical Guide

TL;DR

Deploying an LLM on your own infrastructure is a sequence of concrete decisions: pick the model, size the hardware, choose a serving runtime, quantize for your GPU, and wire in monitoring. This guide walks each step with the trade-offs that actually matter for a production on-prem deployment.

Deploying an LLM on-prem is a sequence of decisions

Self-hosting a language model is not one task — it is a chain of decisions, each with a real trade-off. Get the model right and the hardware wrong and you pay for idle GPUs. Get the runtime right and the quantization wrong and you leave latency on the table. This guide walks the full sequence so you can make each call deliberately instead of by default.

Step 1 — Pick the model for the task, not the benchmark

The single most common mistake is choosing the largest model you can find. A frontier model sized for every possible task is overkill for a workload that does one thing well. Start from the task: what does the model actually need to do, and what accuracy bar does the workload set?

A smaller model that is fine-tuned and compressed for your specific workload will often match a much larger general model on the task that matters — at a fraction of the memory, latency, and cost. Size the model to the job.

Step 2 — Size the hardware from the model, not the other way

The model's parameter count and precision determine your memory floor. A rough rule: a model with N billion parameters in FP16 needs roughly 2N GB of VRAM just for the weights, plus headroom for the KV cache and activations. Quantization changes that math dramatically — an INT4 model needs roughly a quarter of the memory of its FP16 equivalent.

Your latency target then decides how many GPUs and how much concurrency you need. Batch size, sequence length, and throughput all feed the same equation. Size for the workload you actually run, not the theoretical maximum.

Step 3 — Choose a serving runtime

The runtime is the layer that turns weights into a usable service. The main options:

  • vLLM — high-throughput serving with continuous batching and PagedAttention. The default for GPU production serving.
  • MLX — Apple Silicon optimized. The right choice for on-device and edge deployments on Mac hardware.
  • llama.cpp — lightweight, CPU-friendly, and portable. Good for constrained environments and quick tests.

Your choice depends on your hardware and your throughput needs. For GPU-heavy production, vLLM is the standard starting point.

Step 4 — Quantize for your hardware

Quantization reduces the precision of the weights to fit more model into less memory and run faster. The two approaches that matter in practice:

  • Post-training quantization (PTQ) — like AWQ or GPTQ — compresses an existing model without retraining. Fast to apply, and with good calibration it preserves most of the quality.
  • Pruning removes parameters the model does not use, shrinking the model itself before quantization.

The right recipe depends on your model and hardware. The key is to measure quality after compression, not assume it — a well-calibrated INT4 model can be near-lossless on your task.

Step 5 — Wire in monitoring and evaluation

An on-prem model is software you now operate. That means you need the same discipline as any production service: request logging, latency and throughput metrics, error tracking, and — most importantly — an evaluation loop that tells you whether the model is still meeting the accuracy bar as you upgrade it.

The teams that succeed with on-prem treat the model as a versioned product: they A/B test a new release against the incumbent on a real workload and decide on measured results, not claims.

The shortcut: a production-shaped artifact

The steps above are exactly what a model vendor does for you. A production-shaped artifact — already pruned, quantized, and validated for a serving runtime — removes most of the engineering risk. If you would rather evaluate a model on your hardware than build the pipeline yourself, that is the path most enterprises take.

More research

Optimized LFM2.5-VL-3B: FFN Width Pruned, Distillation Aligned, INT4 Quantized

We surgically compress Liquid AI’s LFM2.5-VL-3B — an architecture-searched hybrid conv+attention vision-language model — by cutting FFN width where the search never optimized it: joint-SwiGLU Wanda pruning (10752→8192 and →7168), distillation-to-baseline LoRA recovery, and hand-rolled W4A16 GPTQ + W8 mixed-precision quantization. All three tiers are near-lossless against the base on our paired eval shards — PPL ratios at or below baseline (0.79–0.85), top-5 token agreement ≥ 0.95, quantization adding only +0.02–0.06 nats — across 5.30 GB (−15%), 4.92 GB (−21%), and 1.93 GB packed / 2.22 GB (Konic Optimized) — native INT4/INT8 compressed-tensors in vLLM (−69%). Live comparison on the smallest tier preserves scenes, facts, and tool calling — 10/10 tool rounds, including correct abstention where the base over-triggered. Recorded runs, not general benchmarks.

Read article

LFM2.5 Encoder 230M + SigLIP2: A Compact Multimodal Encoder

We augment Liquid AI’s LFM2.5 Encoder 230M — a 230M-parameter bidirectional masked-language encoder — with a SigLIP2 vision tower and 32 learned soft tokens to build an encoder-only multimodal model for retrieval and image-text matching. Clean image-only retrieval on 12,500 held-out MONET pairs reaches 0.1194 image→text R@1 with the BF16 reference; the GPTQ INT4 release retains 0.1091 while shrinking the package from 923.65 MB to 370.46 MB (−59.9%). Cyclic-negative matching AUROC is 0.9733; text-nearest hard negatives and image-conditioned masked-token prediction remain at chance, and the model does not generate.

Read article

Two Stages, Much Smaller MoE: REAP Expert Pruning Followed by AWQ INT4 Quantization

We chain two complementary compression stages on Liquid LFM2.5-8B-A1B — REAP CUDA expert pruning (32→16 experts across 22 MoE layers) then external AWQ INT4 quantization (W4A16_ASYM, group 128). The published packed artifact is 1.15B packed-weight equivalent / 2.79 GB; recorded MATH500 and BFCLv3 results use a separate 9.18 GB AWQ-scaled BF16 derivative for vLLM evaluation, not direct packed-INT4 runtime. These are recorded run summaries, not general benchmarks.

Read article

From-Scratch AWQ INT4 Quantization on Qwen3-8B

We validate a from-scratch, pure-PyTorch AWQ implementation on Qwen3-8B: group-wise INT4 with per-channel AWQ scaling produces a 4.0× smaller model (13.9 GB → 3.5 GB linear weights) at 1.034× FP16 perplexity on WikiText-2 (10.08 vs 9.75), loaded and run in a real INT4 GEMM runtime. The decisive factor is norm-folding the AWQ scale — 20× more accurate per weight than weight-dequantization.

Read article

REAP Expert Pruning for On-Device MoE Models

We present REAP-MLX, an Apple Silicon implementation of Router-weighted Expert Activation Pruning (REAP) for Mixture-of-Experts language models. We evaluate quality retention across compression ratios on the LFM2.5-8B architecture: REAP preserves 96.8% of code generation performance at 25% compression and 91.4% at 50% compression, with less than 0.4 percentage point variance across independent calibration draws.

Read article