Skip to content

Serverless vs Dedicated GPU

Serverless scales workers to zero between requests and bills only for active GPU seconds. Dedicated keeps a warm worker on permanently and bills a fixed monthly rate. This page tells you which one to pick.

Two deployment paths

APIPod ships both backends in the same package. The orchestrator and compute mode you pass to the CLI (--compute serverless or --compute dedicated) decides which router runs. Your handler code does not change.

Serverless

Scale to zero · Pay only when active

  • Auto-scale 0 → 100 workers
  • €0 when idle
  • Public or private endpoints
Provider:
RunPod

Dedicated

Always-on · Zero cold start

  • Always warm GPU memory
  • Fixed monthly pricing
  • Private by default
Providers:
Azure
Scaleway
RunPod
$ apipod --build --provider runpod

Quick Comparison

AspectDedicated GPUServerless GPU
BillingFixed monthly, always runningScale to zero; pay per active GPU-second
Cold startNone (worker stays warm)Under 4s for cached images; up to ~20s on first pull
ScalingSingle warm worker per deployment todayRunPod autoscales workers from zero on demand
Predictable latencyYes, no cold-start tailYes once warm, with a cold-start tail after idle
DevOps overheadYou own the GPU instance lifecycleRunPod handles the worker lifecycle
Ideal traffic patternSteady, high-volume, latency-sensitiveBursty or unpredictable, including idle periods
Min monthly costFixed hourly rate over 24 hours, 30 daysEUR 0 when idle
Availability todayRunPod EU via dashboard, FastAPI for local/self-hostedRunPod EU

Cold start deep-dive

A cold start happens when a serverless worker has scaled to zero and the next request arrives. RunPod pulls the container, starts the runtime, and loads model weights into GPU VRAM before APIPod's handler runs. The first request after idle pays this latency; subsequent requests do not, until the worker scales back to zero. The Socaity hero quotes a cold start under 4 seconds for cached images and small models; the figures below show the wider envelope for first-pull or large-weights cases.

Container pull (2-8s)

RunPod fetches the Docker image layers. Cached on subsequent cold starts in the same region.

Container start (1-3s)

RunPod starts the runtime and APIPod loads the Python environment baked into the image.

Model load (2-10s)

Your handler transfers weights from disk into GPU VRAM. The dominant variable; large models or remote storage push the upper bound.

Cost scenarios

These scenarios show which mode wins at each traffic level, holding GPU type and average inference time fixed. For current per-GPU rates and worked monthly examples, see socaity.ai/Pricing.

Usage PatternDaily RequestsDedicated cost shapeServerless cost shapeWinner
Hobby / low traffic< 200Full hourly rate over 720 hoursPennies, only active seconds bill
Serverless
Growing startup1,000 to 5,000Full hourly rate over 720 hoursLow, active seconds add up
Serverless
Scale-up20,000 to 50,000Full hourly rate over 720 hoursMedium, approaching dedicated
Break-even
High-volume production> 100,000Multi-GPU hourly over 720 hoursHigh, active seconds dominate
Dedicated

Decision guide

Run through these four questions in order. The first "yes" that lands you on dedicated is your answer; otherwise default to serverless.

Question 1

Do you have steady traffic above 50,000 requests per day?

Yes: dedicated is usually cheaper. No: serverless.

Question 2

Do you need a P95 below the cold-start window?

Yes: dedicated, or keep one warm worker on the RunPod endpoint. No: serverless.

Question 3

Is traffic unpredictable or bursty?

Yes: serverless. RunPod scales workers from zero per request.

Question 4

Do you want zero infrastructure management?

Yes: serverless. Dedicated still requires you to size and monitor the worker.

APIPod configuration

Switch between modes by passing flags to the apipod CLI. The same handler code runs in either backend; only the resolver behind it changes.

Serverless on RunPod

terminal
# Start a serverless backend (RunPod handler) locally for testing.
socaity start \
  --orchestrator socaity \
  --compute serverless \
  --provider runpod

Dedicated (FastAPI)

terminal
# Start a dedicated, always-on FastAPI server bound to localhost.
socaity start \
  --orchestrator local \
  --compute dedicated \
  --provider localhost \
  --host 0.0.0.0 \
  --port 8000