A GPU pool is a custom resource that tells the operator which GPUs in your cluster are available for Lilac inference workloads. You control everything — which nodes, how many GPUs, what hours, and how preemption works.
Creating a GPU Pool
Quickstart
Apply a basic GPUPool resource to your cluster:
Fully featured example
Use a fuller manifest when you want to cap the number of GPUs, define availability windows, or configure preemption behavior:
Model Cache
Setting up a model cache is optional, but highly recommended. The cache keeps downloaded model weights on each node so repeat cold starts do not need to fetch everything from Hugging Face again.
With a warm cache, cold starts can be reduced by up to 80%, which lets idle GPUs start serving workloads and earning money more quickly. A 1 TB cache is a good baseline and is included in the initial example above. For larger GPUs such as H200s, B200s, and B300s, use 2 TB or more for the fastest cold starts because those GPUs typically serve larger models.
Starting from scratch
If you are creating a new GPUPool, include cache in the resource:
Modify an existing GPU pool
If you already have a GPUPool, patch it to enable the cache:
Hugging Face Token
Setting up a Hugging Face token is optional, but highly recommended. The token avoids Hugging Face rate limits for unauthenticated downloads and allows models to download at full speed.
Generate a Hugging Face access token, then create a Kubernetes Secret in the same namespace as your GPUPool:
For the examples below, the GPU pool namespace is lilac-system.
Starting from scratch
If you are creating a new GPUPool, include hfTokenSecretRef in the resource:
Apply it with:
Modify an existing GPU pool
If you already have a GPUPool, patch it to attach the Hugging Face token secret:
Configuration Reference
nodeSelector
Standard Kubernetes label selector. Only nodes matching these labels are included in the pool.
capacity
Control how much of your GPU fleet Lilac can use.
schedule
Define when GPUs are available for Lilac workloads.
Use mode: always if you have dedicated GPUs that aren’t used for other workloads. Use mode: scheduled to share GPUs between your workloads (daytime) and Lilac (evenings/weekends).
preemption
Controls what happens when your workloads need GPUs back.
cache
Configures a shared Hugging Face model cache on each node in the pool. Omitting this block disables caching, so vLLM pods download model weights from Hugging Face on every cold start.
hfTokenSecretRef
References the Kubernetes Secret key that stores your Hugging Face access token.
workloads
Toggle which workload types this pool accepts.
Multiple Pools
You can create multiple GPU pools for different hardware or schedules:
Checking Pool Status
For detailed status: