Using VM Pools
What is a VM Pool?
A pre-allocated VM Pool is a set of virtual machines (VMs) reserved for your organization in advance and held ready for code runs. Instead of provisioning a machine when a run starts, the run claims a slot on a machine that already exists.
Why use a VM Pool?
Guaranteed availability
High-demand workloads — GPU-intensive AI training and inference in particular — do not compete with other workloads for capacity that may not be there when you need it.
Predictable cost
Capacity is a fixed reservation rather than a variable, per-run provisioning charge.
See Compute Options to explore alternatives.
Prerequisites and Availability
Pre-allocated VM Pools are currently available for any code object that run on Google Cloud Platform (GCP) Rhino-hosted agents, and are supported for Generalized Compute, Python Code, and NVIDIA FLARE code objects.
If you do not see a Use VM Pool option, either no pools have been configured for your organization or your code object is not running on a GCP Rhino-hosted agent.
How Agents Claim Pool Capacity
A federated run executes at more than one Rhino Client, and each participating agent needs a slot. How those slots are claimed depends on the code object type:
Generalized Compute and Python Code — each agent claims its slot independently. An agent that finds capacity begins work without waiting for the others.
NVIDIA FLARE — a two-phase claim. All agents must secure pending slots before any job dispatches. A FLARE job therefore starts only when every participating site has capacity reserved.
Selecting VM Pools for a Code Object
A code object can be associated with more than one pre-allocated VM pool. Where you maintain separate pools — CPU and GPU variants, or pools dedicated to particular projects or sites — a single code object can target each pool that suits it, without duplicating the code object per pool.
System validation will prevent the creation of a Code Object if the requirements do not match the selected pool's capabilities (for example, requesting a non-GPU job on a GPU-only pool).
Tracking VM Pool Status
You can track the performance, health, and availability of your VM Pool project resources in the Virtual Machine Pools tab. This dedicated subpage provides a comprehensive view of your environment, including total pool capacity, current utilization (number of running VMs), and queue length.
To learn more about the status of the VM Pools in your project, do the following.
Select Code from the main menu, then select the Virtual Machine Pools tab at the top of the page.

Review the information about the pools.
Total Pools - Number of VM Pools available across the project.
Total Capacity - Number of VMs, including how many are in use and how many are idle.
Queued Jobs - Number of jobs waiting for processing across all pools.
Health - How many VM pools are active, as well as a brief description of the inactive VM Pools.
Running Jobs - There is also a listing that contains pool information for running jobs. This includes the pool name, compute specs (number of CPUs, amount of ram, GPUs), utilization, how many jobs are in the queue, and the status of the job.
Confirming Which Resources a Run Used
Code run details show the VM pools a run requested alongside the resources it actually claimed. This is the authoritative record of what a run executed on, and the first place to look when:
A run started more slowly than expected — it may have queued or fallen back.
You are reconciling compute cost against reserved capacity.
A FLARE job did not dispatch — check whether every agent secured a slot.
The Details tab of a code run's logs also displays the compute resource mode and the requested specifications.
VM Execution & Capacity Exhaustion
When a job is triggered against a pre-allocated pool, it follows a more efficient execution path compared to standard auto-scaling. Jobs are submitted to the chosen pool and transition rapidly from a "Queued" phase directly into a "Running" state as resources are already primed for use.
If a pool's capacity is exhausted, jobs are placed into a First-in-First-Out (FIFO) queue rather than failing. You can monitor the "Queued (VM Pool)" status and your job's position on the Code Run page. Once a slot frees, the job is automatically assigned and dispatched.
Troubleshooting
Use VM Pool is not offered
No pools configured, or the code object is not on a GCP Rhino-hosted agent
Confirm with your administrator
Code object will not save with a pool selected
Validation mismatch between the code object's requirements and the pool's configuration
Compare the code object's GPU and resource requirements against the pool's fixed configuration
Job sits in Queued (VM Pool)
Pool capacity exhausted
Check queue position on the Code Run page and pool utilization on the Virtual Machine Pools tab
A FLARE job does not dispatch while some agents appear ready
Two-phase claim — not all agents have secured pending slots
Identify which participating site lacks capacity
A run used different resources than the pool provides
The run fell back to an ad hoc VM
Check requested pools against claimed resources in the run details
Last updated
Was this helpful?

