Outlier  ›  vs

Self-hosting an LLM on a server vs running it on-device

Quick answer

Self-hosting an LLM means running open-weight model files yourself on a GPU server you rent or own — usually vLLM or llama.cpp behind an OpenAI-compatible HTTP API — instead of the model running inside an app on the end user's own machine. Self-hosting wins where size, concurrency and memory bandwidth matter: tensor parallelism spans GPUs, so one deployment can serve 671B-class models to many people at once. On-device wins where the marginal cost per user is zero, the network is unreliable or absent, and nobody wants to run infrastructure — but you're capped by whatever memory the machine shipped with.

Disclosure first: I build Outlier, a Mac app that runs models on-device, so I have a side in this. That's exactly why I want to be precise about where the server approach genuinely beats mine. Both routes run the same open weights. What changes is where the tensors live, who pays for the silicon they live on, and what breaks when something goes wrong.

What self-hosting actually involves

The mechanism is unglamorous. You pull open-weight files — safetensors or GGUF — from somewhere like Hugging Face, load them into an inference server on a machine with a GPU, and that process exposes an HTTP endpoint speaking the OpenAI chat-completions schema. Every client you already own then points at your URL.

Three servers cover most of the field. vLLM (Apache-2.0) calls itself "a fast and easy-to-use library for LLM inference and serving" and supports NVIDIA, AMD and Intel GPUs plus x86/ARM/PowerPC CPUs, with plugins for Google TPUs, Intel Gaudi and Huawei Ascend. llama.cpp (MIT) ships llama-server, "a lightweight, OpenAI API compatible, HTTP server for serving LLMs," spanning Metal, CUDA, HIP, Vulkan, SYCL and WebGPU, with 1.5-bit through 8-bit quantization and CPU+GPU hybrid inference to partially accelerate models larger than total VRAM. Ollama (MIT) wraps that for macOS, Windows, Linux and Docker behind a REST API on localhost:11434.

The lever that makes servers different in kind, not degree, is --tensor-parallel-size — vLLM's "number of tensor parallel groups." Splitting one model's weights across many GPUs is how a deployment holds something no single accelerator can. An AWS g6e.48xlarge, a common target, is eight L40S cards at 48 GB each: 384 GB of VRAM in one box.

What on-device actually involves

On-device, the weights load into the same process the user is clicking around in, and inference runs on whatever accelerator the machine already has. On Apple Silicon that's Metal, usually via MLX (MIT), built around unified memory: "Arrays in MLX live in shared memory. Operations on MLX arrays can be performed on any of the supported device types without transferring data." No PCIe staging — but also no way to add memory the machine wasn't sold with.

Outlier is one instance of this shape, and I'll use it as an example rather than a recommendation. Apple Silicon only, M1 or later, macOS 12+. Its Core tier is Qwen3.6-27B at 15.13 GB, needs 24 GB of RAM, and runs about 20.7 tok/s on an M1 Ultra. Its largest tier is a 397B-a17b MoE: a 209 GB download that needs a 64 GB Mac and pages experts off the SSD to hold peak RSS near 11 GB, at 2.1 tok/s. That number is the honest shape of the ceiling — on-device can reach big models, but it reaches them by fighting for every gigabyte. Worth noting the Core weights are Apache-2.0 Qwen3.6-27B, the same checkpoint you'd serve from vLLM. On-device doesn't imply a weaker model family.

Side by side

Axis Self-hosted server On-device
Model size ceilingEffectively unbounded via tensor parallelism — 671B-class is servableCapped by installed memory; SSD paging extends it at a speed cost
ConcurrencyMany simultaneous users per GPU via continuous batchingOne person at a time
Memory bandwidthH100 SXM 3.35 TB/s; H100 NVL 3.9 TB/s at 94 GBConsumer unified memory, well below datacenter parts
Recurring costHourly, forever — $0.69/hr (RTX 4090) to $4.29/hr (H100 SXM) and upHardware you already own; no per-hour line
NetworkRequired for every tokenNone after the model download
Auth & securityOperator-supplied: TLS, keys, rate limits, monitoringNo listening endpoint to misconfigure
Ops burdenCluster, storage, secrets, upgrades, on-callAn app install
Apple SiliconSecond-class on the server stackThe native target

Where self-hosting genuinely wins

These aren't concessions. They're the reasons serious deployments are server-side.

Where on-device genuinely wins

The cost and ops math people skip

RunPod Secure Cloud lists H100 PCIe at $2.89/hr and RTX 4090 at $0.69/hr, storage billed separately. Run either around the clock — 730 hours a month — and that's roughly $2,110/month for the H100 and roughly $504/month for the 4090. Lambda lists one H100 SXM at $4.29/GPU/hr (about $3,100/month) with no egress fees. Hugging Face Inference Endpoints, if you'd rather not touch metal, run $0.80/hr on an L4 up to $9.25/hr on a B200.

Serverless softens this without erasing it. RunPod bills per second "from when a worker starts until it fully stops," and Flex workers scale to zero — with a configurable idle timeout, default five seconds, that's still billed, plus a cold start on the next request. You're trading money for time-to-first-token.

Then there's the work itself. vLLM's own Kubernetes guide wants a running GPU cluster, a PersistentVolumeClaim for model storage, a Secret holding a Hugging Face token, and a shared-memory emptyDir for tensor-parallel inference — before you add TLS, authz, rate limiting, monitoring or an on-call rotation. Buying instead of renting moves the problem to facilities: NVIDIA rates the H100 SXM at up to 700W configurable, per GPU, before host, networking and cooling.

One more check before building on any of it: open weights aren't uniformly open source. Llama 3.3's license requires a separate license from Meta above 700 million monthly active users and mandates "Built with Llama" attribution. DeepSeek-V3's code is MIT while the weights carry a separate Model License. Open WebUI, the common self-hosted front end, is BSD-3-Clause plus a clause prohibiting altering or removing its branding unless you're under 50 end users per 30 days or hold written permission. Qwen3.6-27B and gpt-oss-20b, by contrast, are plain Apache-2.0.

Who should pick which

Self-host if you're serving more than one person, you need a model bigger than any single machine holds, you want one endpoint behind your CI and internal tools, you need central audit logs and key rotation, or compliance says inference has to run on hardware your organization owns. Self-host too for throughput work — batch classification, evals, pipeline jobs — where continuous batching pays for the GPU many times over.

Go on-device if you're one person doing one thing at a time, the recurring bill is the problem, the machine has to work without a connection, or the data is the kind you'd rather never transit anyone's network. Outlier is one implementation: no account, no caps, nothing uploaded, free at the Nano and Lite tiers. It has no web search, no image generation, no mobile app, no voice mode, no Windows or Linux build and no cloud sync, because those are what the architecture costs. LM Studio, Jan and a locally built llama.cpp are the same category with different trade-offs.

Run both if that's your actual week — a small on-device model for everything routine and confidential, a server for the jobs needing 671B parameters or forty concurrent requests. They're not competing philosophies. They're two places to put the same weights.

Sources and receipts: vLLM capabilities, install matrix, serve flags and Kubernetes requirements from github.com/vllm-project/vllm and docs.vllm.ai; the throughput and PagedAttention numbers come from the June 20, 2023 launch post and are dated accordingly. llama.cpp and Ollama details from their repos and docs.ollama.com/faq. MLX unified-memory quote from github.com/ml-explore/mlx. Pricing from runpod.io/pricing, lambda.ai and huggingface.co/pricing; the monthly figures are my own arithmetic on those hourly rates at 730 h/month. H100 power and bandwidth from nvidia.com. License terms read from the Llama 3.3, DeepSeek-V3, Qwen3.6-27B, gpt-oss-20b and Open WebUI license files. Outlier tier sizes, RAM floors and tok/s measured on an M1 Ultra Mac Studio. GPU pricing and vendor policies change often — everything here was current as of 2026-07-23, so re-check the source pages before budgeting against them.

Want the on-device side to try?

Outlier runs open weights entirely on Apple Silicon — no account, no caps, works with Wi-Fi off. Nano and Lite are free. It won't replace a GPU cluster, and it isn't trying to.

Download for Mac