- the private network, with every node reachable as
node-0,node-1, … (node 0 is the head); - SSH between the nodes as root, so
mpirunandpdshwork withnode-*names; /shared, mounted from the head, with the hostfile at/shared/hostfile(container machines share no folder and keep the hostfile at/etc/runcrate/hostfile);- the launcher settings in
/etc/runcrate/cluster.env, exported into every login shell:NODE_RANK,WORLD_NODES,GPUS_PER_NODE,MASTER_ADDR(the head on the private network),MASTER_PORT(29500),NCCL_SOCKET_IFNAMEandGLOO_SOCKET_IFNAME.
set -a; . /etc/runcrate/cluster.env; set +a.
The software you pick installs on top once every node is up. The cluster is installing meanwhile and ready once the software has checked itself on every node. If the install fails the cluster is degraded, with the reason in stack_detail: the nodes stay up, and you can retry the install or terminate.
None
Nothing more is installed. The cluster is ready as soon as every node has joined. Run your own launcher with the hostfile and the settings above: see Connect and run.Slurm
Slurm with munge authentication.slurmctld runs on the head and slurmd on every node, the head included, so the head’s GPUs take work too.
- Partition:
gpu, the default, with every node in it (node-0,node-1, …). - GPUs are generic resources: ask for them with
--gres=gpu:Nor--gpus-per-node=N. - Files:
/homeis local to each node; put code and data your jobs share in/shared. - Ready when
sinfoshows every node idle. - There is no accounting database, so
sacctis not available.squeueandsinfoare, and the cluster page shows the live queue.
Kubernetes
A lightweight Kubernetes (k3s) cluster: the control plane on the head and every node an agent, on the private network. The NVIDIA container toolkit and device plugin are installed, so pods can ask for GPUs.- Ready when every node is
Readyand hasnvidia.com/gpuallocatable. - On the head:
kubectlworks as root. - From your computer: download the kubeconfig and open the tunnel; its server is
https://127.0.0.1:6443, reached through SSH to the head, so the API is never open to the internet. - The built-in ingress controller is off.
- Offered on virtual machines and bare metal, not on container clusters.
127.0.0.1:6443 to the API server on the head’s address on the private network, as ssh -N -L 6443:10.77.0.1:6443 root@<head address>; the API returns the cluster’s own command in the X-Runcrate-Tunnel header of GET /clusters/{id}/kubeconfig. The kubeconfig grants admin on the cluster: keep it private.
A GPU pod uses the nvidia runtime class and a GPU limit:
Ray
Ray 2.59 on Python 3.12, in its own environment at/opt/runcrate/ray. The head runs ray start --head on the private network (port 6379) and every other node joins it.
- Ready when
ray statusshows every node. rayis on the path on every node. To import Ray in your own code use/opt/runcrate/ray/bin/python, orsource /opt/runcrate/ray/bin/activatefirst.- The dashboard listens on the head at
127.0.0.1:8265. Open it from your computer withruncrate clusters tunnel train, then browse tohttp://127.0.0.1:8265; jobs submit through the same address.