Skip to main content

Compute pools

Compute pools, instance types, profiles, labels, taints, and autoscaling.

Compute pools

Compute pools are the Kubernetes equivalent of Slurm partitions — a pool of identically-sized machines that the cluster autoscaler scales up and down automatically. You define the minimum and maximum size when you create the pool; Vantage handles provisioning through the cloud provider.

Each compute pool is a billing unit — you pay for every provisioned node, even if it isn't running a workload.

Roles

Every compute pool has a role:

RolePurpose
controlCluster management — runs the K8s control plane components, etcd, and Vantage system services. Compute pool name typically control-plane.
workerCompute — runs user workloads (Workbench sessions, training jobs, model serving). Compute pool name is user-defined.

A cluster must have at least one control plane pool and at least one worker pool.

Instance selection

How you select compute resources depends on the cloud provider:

AWS: Instance type browser

AWS compute pools use native EC2 instance types selected through the Vantage instance type browser:

  • Search by family (e.g., t3, c5n, p3, g5).
  • Filter by vCPU count, memory, and GPU count.
  • Select from a curated list of supported instance types.
  • Multiple instance types can be specified per pool — the autoscaler uses EC2 Fleet API for diversification and best availability.
AWS compute pool fieldNotes
instance_typesList of EC2 instance types (e.g., ["t3.xlarge"]). Multiple types enable Fleet-based diversification.
allocation_strategyEC2 Fleet allocation strategy — lowest-price (default), diversified, or capacity-optimized.

Non-AWS: Pre-defined profiles

Azure and GCP compute pools use pre-defined profiles instead of instance types:

ProfilevCPUMemoryNotes
Small48 GiBLightweight workers
Medium816 GiBGeneral purpose
Large1632 GiBMemory-intensive

Labels and taints

Labels and taints control workload scheduling onto compute pools:

  • Labels — Key-value pairs attached to every node in the pool. Workloads use nodeSelector or affinity rules to target specific labels.
  • Taints — Prevent pods from scheduling onto a node unless they tolerate the taint. Used for GPU-only nodes, spot instances, or dedicated infrastructure.

Auto-injected labels

The autoscaler injects a vc.pool: <compute-pool-name> label on every node in the pool, enabling Slurm-on-Kubernetes pod scheduling affinity.

Common label patterns

LabelValuePurpose
node-role.kubernetes.io/control-plane""Control plane nodes
node-role.kubernetes.io/worker""Worker nodes
nvidia.com/gpu"true"GPU-accelerated nodes
workload-type"ml-training"Training job affinity

Autoscaling

Every compute pool has autoscaling bounds:

  • Min size — The floor. Set to 0 to allow scale-to-zero when idle.
  • Max size — The ceiling. The autoscaler never provisions above this limit.

The autoscaler monitors pending pod capacity and scales up when workloads request more resources. It scales down when nodes are underutilized for a sustained period.

For AWS clusters, the autoscaler manages EC2 Fleet instances tagged with vantage-cluster={client_id}.

Best practices

  • Separate workload types into different compute pools — GPU training jobs and CPU preprocessing should use different pools so they don't compete for resources.
  • Set min sizes conservatively — Idle nodes cost money. Start with min=0 and adjust once you understand your workload patterns.
  • Use labels and taints for scheduling control — Mark GPU compute pools with nvidia.com/gpu: "true" so only GPU workloads land on them.
  • Multiple instance types improve availability — On AWS, specifying multiple instance types per pool gives EC2 Fleet more options during capacity constraints.
Ask AI
Ask a question about Vantage Compute...