# Azure ML Online Deployment Idle

> Azure ML online deployments showing zero requests per minute, on both average and maximum, across at least 7 days of metric coverage are flagged for deletion, with the deployment's full monthly cost as savings. GPU and CPU utilization attach as corroborating evidence, and a missing metric series never triggers the recommendation.

Source: https://zop.dev/integrations/azure/recommendations/azure-ml-online-deployment-idle
Updated: 2026-08-19

---

## Zero requests per minute, average and maximum

- RequestsPerMinute is the primary idle signal. Rule fires only when this series is present and both Average == 0 and Maximum == 0. Absent series (new deployment / no Azure Monitor data) → nil; never emits a delete recommendation without positive evidence of zero traffic.
- GpuUtilizationPercentage and CpuUtilizationPercentage are corroborating evidence. Both are declared in RequiredMetrics and attached to the recommendation as evidence when present; they are not gates.
- AvgCoverageDays() >= 7 (project-wide MinMaxCoverageDays), gated on the Average band because RequestsPerMinute is an Average-only Azure Monitor metric (MaxCoverageDays is structurally 0, so a Max gate would abstain unconditionally); prevents a brand-new deployment with a day or two of naturally zero traffic from triggering this high-severity delete recommendation.
- Billing cost > 0 is required before firing. The billing overlay for a managed online deployment lags ~24–72h. A $0-cost/$0-savings recommendation can't be ranked, and the low-savings drop filter (shouldDropLowSavings) only drops Savings > 0 && \< $5, so a $0 recommendation would otherwise slip through and persist as noise. Once the overlay lands, the next engine run surfaces the idle deployment with real savings.

## Gates for a zero-traffic delete call

```text
fires when all gates align: metric series present AND RequestsPerMinute.Average == 0 AND Maximum == 0 AND AvgCoverageDays() >= 7 AND cost > 0. Any traffic or absent series → no recommendation.
```

## Deleting refunds the deployment's whole bill

PricingAware: SavingsUSD = CurrentCostUSD (full monthly cost saved if the deployment is deleted). Cost comes from the billing overlay (pricing[UID]).

## Removing the deployment and its endpoint

1. Confirm no application routes inference to this deployment
2. In Azure ML studio (ml.azure.com) → Endpoints → the online endpoint → Deployments
3. Delete the idle deployment, or set its instance count to 0
4. Delete the parent endpoint too if it has no remaining deployments

## Request rate plus GPU and CPU corroboration

RequestsPerMinute + GpuUtilizationPercentage + CpuUtilizationPercentage (30d lookback each)
