AWS introduced quota management in AWS Batch for Amazon SageMaker Training jobs, letting administrators divide shared compute into quota shares by team or project. Each share gets capacity limits plus a sharing strategy, while idle GPU capacity can be lent automatically and reclaimed when the owner needs it. The capability targets multi-team training environments where coordination overhead grows with scale.

AWS Batch adds quota sharing for SageMaker Training jobs

How quota shares divide GPU capacity

A quota share works as a virtual queue nested inside a Batch job queue. Administrators set compute quotas for each team or project and choose one of three strategies: RESERVE keeps idle capacity waiting, LEND offers idle capacity to other shares, and LEND_AND_BORROW both lends idle capacity and borrows spare capacity when its own jobs could use it. Batch prioritizes shares operating below their limits during scheduling.

When jobs arrive in a share that previously lent capacity, Batch performs cross-share preemption and returns resources without manual termination of borrowing jobs. When a share sits at or above its limit, Batch checks for borrowable idle capacity elsewhere and runs workloads on it if available. A separate option enables priority-based in-share preemption, which preempts lower-priority jobs in SCHEDULED, STARTING, or RUNNING state so higher-priority jobs at the front start sooner.

Setup requires an AWS account with permissions for Batch and SageMaker resources, plus SageMaker Python SDK v3. Administrators create a Scheduling Policy containing a quotaSharePolicy, a Service Environment defined in specific instances, and a SageMaker Training job queue connected to both, then associate quota shares with the queue. The AWS guide provides AWS CLI and console examples, while a sample notebook shows an end-to-end flow through the aws_batch module with helper functions.

What shared GPU scheduling means for business

The example in the announcement configures three quota shares, each limited to one ml. g5.xlarge instance. QS1 covers background jobs with checkpointing, uses LEND_AND_BORROW, and enables in-share preemption so higher-priority jobs displace lower ones. QS2 covers medium-priority work that prefers waiting over extra preemptions, while QS3 reserves capacity, neither lends nor borrows, and disables in-share preemption for minimal interruption.

Jobs reach a quota-enabled queue through the TrainingQueue constructor in the aws_batch module, using a ModelTrainer and a Region-specific image URI. In the walkthrough, three jobs enter QS1 with high, medium, and low priority, and the two highest-priority jobs start because QS2 has spare capacity to borrow. A later submission to QS2 reclaims lent capacity from QS1 through cross-share preemption, while QS3 capacity remains untouched.

Priorities can change after submission through the UpdateServiceJob API. In the example, raising the priority of a waiting low-priority job in QS1 triggers in-share preemption when no borrowable capacity exists. Companies adopting the model should map workload tolerance for interruption to the three strategies, confirm checkpointing where preemption stays enabled, and test priority schemes before moving production training onto shared queues.