Skip to main content
rightsizing · aws

SageMaker endpoint fleets of 2+ instances doing one instance's work

resource types
1
rule IDs covered
1
severity
medium

What does ZopNight detect here?

SageMaker bills every instance behind an endpoint per hour, so a 4-instance fleet at 3% CPU is mostly paid-for silence. ZopNight recommends shedding exactly one instance, saving cost/N precisely, after normalizing CPU by vCPU count, since the endpoint namespace sums utilization across cores.

Signal and threshold

How ZopNight evaluates SageMaker endpoint fleets of 2+ instances doing one instance's work.
Field Value
Rule IDsRC-1624
Categoryrightsizing
Severitymedium
Metricnone — pure configuration read
Sourcesagemaker_endpoint_instance_count.go

The normalization most dashboards miss

CPU utilization in the SageMaker endpoint namespace is summed across vCPUs: a 4-vCPU instance reads 0–400%, not 0–100%. Read naively, a fleet running at a tenth of capacity looks four times busier than it is, and an earlier reading of this data under-fired on every multi-core family for exactly that reason. The rule resolves the instance type’s published vCPU count and divides before judging. It abstains entirely when the count cannot be resolved, because an un-normalizable number cannot be compared to a 10% threshold safely. Memory needs no such treatment; it is genuinely 0–100 in this namespace.

Who qualifies

In-service endpoints running at least 2 instances on a single production variant. One-instance endpoints cannot shed capacity without going dark; that is the idle rule’s territory. Multi-variant endpoints (A/B, blue-green, shadow) abstain because one utilization series cannot describe several independent fleets. The trigger is normalized CPU under 10%; memory under 50% acts as a veto when its series exists, and since memory here is an agent-dependent metric, its absence falls back to the CPU-plus-peak gates rather than silently exempting the fleet. A normalized peak near saturation suppresses everything: bursty fleets keep their headroom.

Arithmetic with no estimation in it

Endpoint cost is the per-instance hourly rate × instance count, so dropping one of N saves exactly cost/N: a fifth of a five-instance fleet’s bill, half of a two-instance fleet’s. No utilization-to-dollars model, no fabricated fraction. That is also why the rule abstains when the endpoint’s measured cost is missing.

Observe a fleet yourself

Terminal window
aws cloudwatch get-metric-statistics \
--namespace /aws/sagemaker/Endpoints --metric-name CPUUtilization \
--dimensions Name=EndpointName,Value=my-endpoint Name=VariantName,Value=AllTraffic \
--start-time "$(date -u -v-30d +%Y-%m-%dT%H:%M:%SZ)" \
--end-time "$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
--period 86400 --statistics Average Maximum

Divide the values by the instance’s vCPU count before comparing to any threshold.

Applied by you, not by automation

Capacity on an inference endpoint is an SLA decision involving traffic peaks, latency budgets, and autoscaling floors, so this recommendation is advisory by design: no automated resize is offered. Lower the variant’s desired instance count (or the autoscaling minimum), watch latency against SLA on the smaller fleet, and repeat next month if utilization still says so.

See it fire on your bill.

Connect an account read-only. The first findings land in minutes.

417 rule families across 353 resource types on 22 platforms. Every threshold, metric, and IAM action is documented on these pages before you grant anything.

417 rule families documented
353 resource types covered
read-only default access level
Multi-cloud automation· Production-ready in 30 min· SOC 2 · ISO 27001· 20–60% off the bill, first month· 4 platforms · 1 console· Multi-cloud automation· Production-ready in 30 min· SOC 2 · ISO 27001· 20–60% off the bill, first month· 4 platforms · 1 console·