Outlier  ›  vs

Self-hosted LLM vs on-device AI: the real trade-offs

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 user's own machine. Self-hosting wins on size, concurrency and memory bandwidth: tensor parallelism spans GPUs, so one deployment serves 671B-class models to many people at once. On-device wins on zero marginal cost, offline operation and having no infrastructure — but it's capped by the 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 — which is why I want to be precise about where the server approach wins over mine. Both routes run the same open weights. What changes is where the tensors live and who pays for the silicon.

What self-hosting actually involves

The mechanism is unglamorous. You pull open-weight files from Hugging Face, load them into an inference server on a GPU machine, and that process exposes an HTTP endpoint speaking the OpenAI chat-completions schema. Every client you own 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. llama.cpp (MIT) ships llama-server, "a lightweight, OpenAI API compatible, HTTP server," with 1.5-bit to 8-bit quantization and CPU+GPU hybrid inference for models larger than total VRAM. Ollama (MIT) wraps it behind a REST API on localhost:11434.

The lever that makes servers different in kind is --tensor-parallel-size, vLLM's "number of tensor parallel groups": splitting one model's weights across many GPUs is how a deployment holds what no single accelerator can.

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 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."

Outlier is one instance of that shape — an example here, not the conclusion. Its Core tier is Qwen3.6-27B at 15.13 GB, wants 24 GB of RAM and runs about 20.7 tok/s on an M1 Ultra. Its largest is a 397B-a17b MoE, a 209 GB download that pages experts off the SSD to keep peak RSS near 11 GB on a 64 GB Mac — at 1.59 tok/s, which is the honest shape of the ceiling. Those Core weights are the same Apache-2.0 checkpoint you'd serve from vLLM, though: on-device doesn't mean a weaker model family.

Side by side

Axis Self-hosted server On-device
Model sizeUnbounded via tensor parallelismInstalled memory; paging costs speed
ConcurrencyMany users per GPUOne person at a time
BandwidthH100 SXM 3.35 TB/sConsumer unified memory
Recurring cost$0.69–$4.29/hr per GPUNo per-hour line
NetworkRequired per tokenNone after download
SecurityYou add TLS, keys, limitsNo listening endpoint
Ops burdenCluster, secrets, on-callAn app install
Apple SiliconSecond-classNative target

Where self-hosting genuinely wins

These aren't concessions — they're why 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 and $504 respectively. Lambda's H100 SXM is $4.29/GPU/hr, about $3,100/month, with no egress fees. Hugging Face Inference Endpoints run $0.80/hr on an L4 to $4.50/hr on an H100.

Serverless softens that: RunPod bills per second "from when a worker starts until it fully stops," and Flex workers scale to zero — though the idle timeout, five seconds by default, is still billed, and the next request pays a cold start.

Then the work itself. vLLM's Kubernetes guide walks you through a GPU cluster, a shared-memory emptyDir that tensor-parallel inference requires, plus optional model-cache storage (a PersistentVolumeClaim or hostPath) and, for gated models, a Secret holding a Hugging Face token — before TLS, authz, rate limiting or on-call. Owning metal moves the problem to facilities: NVIDIA rates the H100 SXM at up to 700W configurable, per GPU, before cooling.

Check licenses too — open weights aren't uniformly open source. Llama 3.3 needs a separate license from Meta above 700 million monthly active users and mandates "Built with Llama" attribution. DeepSeek-V3's code is MIT while its weights carry a separate Model License. Open WebUI forbids removing its branding above 50 end users per 30 days. Qwen3.6-27B and gpt-oss-20b 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, or compliance says inference must run on hardware you own. Self-host for throughput work too — 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 a network. Outlier is one implementation: no account, no caps, nothing uploaded, free at the Nano and Lite tiers, and with no web search, image generation, mobile app or Windows build — that's what the architecture costs.

Run both — something on-device for routine and confidential work, a server for jobs needing 671B parameters or dozens of concurrent requests. They're two places to put the same weights.

Sources and receipts: capabilities, install matrix, serve flags and Kubernetes requirements from vllm-project/vllm and its docs; throughput and PagedAttention from the June 20, 2023 launch post, dated accordingly; llama.cpp and Ollama from their repos and the FAQ; ml-explore/mlx; pricing from RunPod, Lambda and Hugging Face, monthly totals my arithmetic at 730 h/month; H100 specs from NVIDIA; the Llama 3.3, DeepSeek-V3 and Open WebUI license files; Outlier figures measured on an M1 Ultra. GPU pricing and vendor policies change often — re-check the sources before budgeting.

Want the on-device side to try?

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

Download for Mac