nodes identical machines of gpusPerNode GPUs each, placed in
one location on a private high-bandwidth interconnect, and managed as a single
resource: one quote, one launch, one price, one terminate. Use it when a model
does not fit one machine (DeepSeek-V3 or Kimi-K2 class) or for distributed
training.
The normalized contract guarantees private node connectivity, not a specific
fabric such as InfiniBand, RDMA, or NVLink. It does not expose enough provider
identity to verify one after placement. If a fabric is a hard requirement,
deploy through the provider passthrough from the outset and verify it there.
What every node gets
Set
MALLOC_ARENA_MAX=1 in env for tensor-parallel workloads. The
provider-agnostic cluster contract does not currently expose /dev/shm
sizing; workloads that require a larger shared-memory mount need a
provider-native deployment path.
Shapes
Self-serve clusters are 2 to 8 nodes of 1 to 8 GPUs each (16 to 64 GPUs at full width). Larger clusters are arranged through sales.gpusPerNode cannot
exceed what the accelerator offers per machine.
orchestrator picks the topology:
Quote, then launch
1
Quote the shape
availability is the stock signal for one node of this shape; whether
every node can be placed together is confirmed only at launch.2
Launch from the quote
env, ports, SSH keys, dockerStartCmd) can be added
at launch without changing the price. Repeating a priced field with a
different value answers 409 price_changed.3
Connect
connections lists the primary node’s SSH, every node’s SSH and its
address on the interconnect. Logs stream per node; rank 0 by default.Storage
A cluster mounts at most one persistent volume, shared by every node at the same path. Create it with the cluster (storage) so it lands in the cluster’s
location, or mount an existing one (volumeId), which pins placement to where
that volume lives. The volume survives terminate and bills until you delete
it; you cannot delete or grow it while a cluster is attached.
Weights for a 600 GB to 1 TB model take 35 to 70 minutes to download at
typical rates. Put them on the shared volume once and relaunch against it.
Lifecycle
running is infrastructure readiness. It does not probe a model server,
distributed rendezvous, or application health endpoint. Make the shared
command rank-aware and run your own readiness check before admitting traffic.
There is no stop. A cluster bills from readyAt until you terminate it:
Recover a degraded cluster
A cluster that loses a node after it was admitted goesdegraded and keeps
billing at the locked rate until you act. By default AI Reserve leaves it for
you. Opt into automatic recovery per cluster:
recovery object on the cluster reports the episode, and
nodes[].status shows each member. Make one attempt now with:
degraded
with lastError: recovery_exhausted and terminate is the way out.