The shared execution jail¶
On this cluster every srun and sbatch step runs inside a per-job jail — a chroot / pivot_root sandbox that Slurm sets up for the step on each worker node. This is the defining trait of the cluster: your job never runs directly on the worker's root filesystem, but in an isolated, consistent Ubuntu userspace that looks the same on every node.
You can confirm you are inside the jail from any step — the VERDA_SHARED_JAIL environment variable is set to 1:
Why it exists¶
The jail gives you two things at once:
- Isolation — each job gets its own root, so steps cannot see or disturb each other's processes and mounts on a shared worker.
- A consistent userspace — the same Ubuntu environment, tools and library paths are presented on every worker node, so a job behaves identically whether it lands on
slinky-0orslinky-1.
What is visible inside the jail¶
The jail is not empty — the pieces you need for real workloads are bind-mounted in:
- Your
/homeis shared into the jail. Home directories, Python virtualenvs and Spack environments all work exactly as they do on the login node — install once under/home, use it from every job. - CUDA is available at
/usr/local/cuda. - HPC-X is available at
/opt/hpcx. - Scratch:
/sharedis the dataset area on the shared filesystem,/localis the worker's NVMe and persists across jobs on that node, and/tmpis a private per-job directory on the same NVMe, emptied when the job ends.
GPUs are the exception: they appear only when you request them. A step with no --gpus (or --gres=gpu:N) sees no GPUs at all, because the job's cgroup fences them off:
Request GPUs and exactly that many become visible inside the jail:
Tip
Always size --gpus (or --gres=gpu:N) to what your step actually needs. Anything you do not request is invisible to the step.
Implications¶
- Containers work. Apptainer / Singularity and Enroot are available inside the jail, including GPU passthrough with
apptainer exec --nvfor the GPUs you requested. See Containers for usage. - Pyxis is off. Because it is mutually exclusive with the jail,
srun --container-image=...(pyxis) is not available — use Apptainer instead. - No in-job Docker daemon. The
dockerclient binary exists, but there is no Docker daemon running inside a job, sodocker runwill not work. Use Apptainer or Enroot to run container images. -
Lmod and HPC-X modules work. Lmod is present; in a login shell (
bash -lc)module availlists the HPC-X modulefiles andmodule load hpcxworks:
Where the NVIDIA userspace comes from¶
Inside a step, the NVIDIA driver userspace (nvidia-smi, libnvidia-*.so) is injected by the NVIDIA Container Toolkit: the binaries and libraries are bind-mounted from the host, not installed from packages. So dpkg -l shows no nvidia-* entries even though the tools work:
You can see the bind-mounts with mount | grep nvidia inside a step. The login pod has no GPUs attached and therefore no injected NVIDIA binaries — nvidia-smi is only available under srun on a worker.