Autoscaling
Autoscaling adjusts the number of replicas serving a deployment so that capacity tracks demand without manual intervention. Configure each deployment with autoscaling parameters that control how replicas scale in response to demand. CoreWeave manages the autoscaling logic, monitors request load, and adjusts replica count within your configured bounds.Scaling parameters
Use the following parameters to set the boundaries and behavior the autoscaler applies to your deployment. Theautoscaling field on a deployment controls scaling behavior:
How autoscaling works
CoreWeave uses request signals to determine when to add or remove replicas, and uses priority to break ties when deployments contend for GPUs. CoreWeave monitors request queue depth and active request counts across your deployment’s replicas. When demand exceeds the current capacity, the autoscaler adds replicas up tomax. When demand drops, the autoscaler removes replicas down to min.
Scaling priority (priority) determines which deployments scale first when multiple deployments contend for the same GPU resources. A deployment with priority: 1000 scales before one with priority: 100.
Choose a concurrency target
The autoscaler currently scales only on concurrent running and queued requests, not on serving metrics such as latency or throughput. CoreWeave recommends settingautoscaling.concurrency from your own benchmarks, then mapping the result onto a concurrent-request count.
Benchmark against a workload profile that matches your production traffic:
- Input sequence length (ISL): the prompt sizes you expect, including any system prompt.
- Output sequence length (OSL): how many tokens your responses generate.
- Cache hit rate: how often prefixes repeat across requests, as they do with a shared system prompt or multi-turn conversations.
autoscaling.concurrency is a per-replica target, so read the knee per replica rather than as a total across the deployment. Below it, each replica has headroom you aren’t using. Above it, requests queue and latency degrades faster than throughput improves.
CoreWeave recommends benchmarking with at least two replicas. A second replica reduces downtime during deployment updates. It also lets the benchmark capture how requests spread across replicas, which sets your prefill cache hit rate. On the dynamo-vllm engine that routing is kv-cache aware, so a single-replica run can’t reproduce the hit rate you see in production. See Supported engines.
Benchmarking also shows you where replicas start to churn. Any autoscaler adds and removes replicas repeatedly when sustained traffic sits close to its target, whether it tracks RPS or concurrency. Finding that point in a benchmark lets you set the target deliberately instead of discovering it in production.
If you have no benchmark data yet, estimate a starting point for the sweep. Multiply the expected requests per second (RPS) per replica by the average request duration in seconds:
Scaling stabilization
Dedicated Inference doesn’t expose configurable scale-up or scale-down cooldown fields. The autoscaler evaluates scale-up requests without a stabilization delay, although provisioning a GPU instance and loading model weights still takes time. When demand falls, the autoscaler stabilizes scale-down recommendations for about 5 minutes before removing replicas. This delay avoids scaling down during short traffic dips. To watch replica count change for a deployment, use the Replicas panel in the Scaling row of the inference dashboard.Best practices
Follow these guidelines to optimize autoscaling for your workloads:- Set
minbased on latency requirements. A higher minimum avoids cold-start delays when new requests arrive during low-traffic periods. Each replica must load model weights before it can serve requests. Setminto at least2to avoid downtime during deployment updates. - Set
maxto control cost. Each replica consumes GPU resources that are billed. Set the maximum to the highest replica count your budget allows. - Match GPU type to model size. Choose an instance type with enough GPU memory to fit your model weights and the inference runtime’s working memory. Over-provisioning wastes resources, and under-provisioning causes out-of-memory failures.
- Use
concurrencyto tune latency. For latency-sensitive workloads, set a lower concurrency target so the autoscaler adds replicas sooner. For throughput-oriented workloads, set a higher value to maximize GPU utilization per replica. Benchmark again when your workload profile changes, such as a new model, a longer system prompt, or different output lengths.
Capacity claims
Autoscaling adjusts replica count within available resources, but doesn’t guarantee that GPU capacity is available. For workloads that require guaranteed GPU capacity, create capacity claims to reserve hardware resources. Capacity claims ensure that infrastructure is available for your deployments, even during periods of high demand.How capacity claims work
A capacity claim reserves a specified number of GPU instances in an Availability Zone. Reserving capacity is separate from using it: the claim only sets hardware aside, while a deployment’scapacityClasses setting controls scheduling.
Capacity types
ThecapacityType field is required and must be set to CAPACITY_TYPE_MANAGED. You can’t change it after the claim is created.
CAPACITY_TYPE_MANAGED reserves instances from CoreWeave’s managed inference capacity pool. These instances are billed on demand at GPU-hour rates, and you pay for the reserved instances for as long as the claim exists, whether or not a deployment is actively using them. Availability depends on the capacity CoreWeave has free in the requested zone.
CAPACITY_TYPE_SERVERLESS and CAPACITY_TYPE_CUSTOMER are no longer accepted values. CAPACITY_TYPE_MANAGED replaces the former CAPACITY_TYPE_SERVERLESS. Update any configuration that still sets either value.Capacity classes
A deployment’scapacityClasses setting controls which capacity its replicas can schedule onto. A claim sets capacity aside, but a replica runs on it only when the deployment’s capacityClasses value allows it:
Capacity claim configuration
Use the following fields to describe the hardware you want to reserve. Theresources field on a capacity claim specifies what to reserve:
The
instanceId must be an instance type that’s available for capacity claims in the zone you request. Query the capacity claim parameters endpoint to see the available instance types per zone, returned under zoneInstanceTypes. Replace [API-TOKEN] with your API access token:
Capacity claim status
After creating a capacity claim, check its status to see how many instances are allocated:Update and delete behavior
You can change a capacity claim’s instance count after it’s created. Reducing the instance count can take effect on a delay, because CoreWeave limits how often capacity claims can scale down. Pending changes appear in the claim’s status. Deleting a capacity claim releases its instances. Whether a deployment running on those instances keeps serving depends on itscapacityClasses setting:
- Deployments restricted to
CAPACITY_CLASS_RESERVEDare evicted, because reserved capacity is the only place their replicas can schedule. - Deployments that also accept on-demand capacity, including those that leave
capacityClassesunset, can keep serving by rescheduling onto unclaimed on-demand capacity when it’s available.
Manage capacity claims
Create, update, and delete capacity claims through the API rather than the deployment configuration. Manage capacity claims through the CoreWeave Inference API. For request and response schemas, see the CapacityClaimService pages in the API reference. The parameters endpoint returns the available instance types per zone underzoneInstanceTypes.