TL;DR: A traditional real-time endpoint is a rented server billing 24/7 whether it serves one request a day or a million. Serverless Inference provisions compute per request and bills compute-milliseconds × memory-GB — for sporadic or business-hours traffic, that's routinely a 75–95% cut. The costs: cold starts of 5–15 s after idle gaps, and hard limits (6 GB memory, 60 s per request, CPU only, ~200 default concurrency).
The numbers
- 100k requests/month × 200 ms × 4 GB ≈ single-digit dollars, vs ~$100/month minimum for an always-on ml.m5.large-class endpoint
- Break-even rule: an endpoint busy under ~30% of the time is cheaper serverless; above that, a right-sized real-time endpoint (plus Savings Plan) wins
- Field example: a support-ticket classifier used 40 of 168 weekly hours cut ~75% by going serverless — the morning's first-ticket cold start was invisible to agents
Do this
-
Find the idle renters:
InvocationsPerInstanceover 30 days per endpoint. Under ~30% duty cycle → convert; zero invocations → delete (the best optimization of all). -
Check the hard limits before converting: model ≤ 6 GB memory, inference ≤ 60 s, no GPU requirement. Any violation → stay real-time or use Asynchronous Inference (24-hour timeout) for long-running models.
-
Convert via endpoint config: replace the instance spec with a
ServerlessConfig(memory 1–6 GB, max concurrency). Test a couple of memory sizes — more memory = more CPU = faster per-ms, so the cheapest setting isn't always the smallest. -
Tame cold starts where they matter: a CloudWatch-scheduled keep-alive ping every few minutes costs pennies and eliminates them for business-hours tools; provisioned concurrency is the heavier, pricier hammer for true hot paths.
-
Set the guardrails: max concurrency bounds a runaway retry loop's blast radius; a billing alarm on daily SageMaker spend catches the rest. Five minutes, cheap insurance.
-
Default new/unknown-traffic models to serverless — migrating out later is easy; months of overpaying on an idle real-time endpoint is just regret.
Gotchas
- Cold starts are the tax: 5–15 s on first request after a quiet period. Fine for dashboards, async pipelines, internal tools; wrong for user-facing hot paths.
- The limits are hard: >6 GB models don't fit; >60 s requests fail (medical-imaging-style long inference wants async endpoints); no GPU at all.
- High steady volume inverts the math — always-warm means no idle savings, and per-ms pricing exceeds amortized instance pricing at scale.
- The mature architecture is a mix: serverless for prototypes/internal/sporadic, real-time + Savings Plans for high-volume production, Multi-Model Endpoints for per-tenant fleets, async for big/slow models.
Skip this if
- Traffic is consistently high with strict latency SLOs — dedicated endpoint + Savings Plan is the recipe.
- The model needs GPU or exceeds the size/timeout envelope.
- You're doing large offline scoring — that's Batch Transform, not an endpoint at all.