Skip to main content
For sites that already run Slurm. The control plane talks to slurmrestd (REST + JWT) only — no sbatch or SSH side channel. Training runs inside Enroot/Pyxis or Apptainer.

Prerequisites

  1. slurmrestd enabled with JWT authentication configured;
  2. Container runtime installed on compute nodes: Enroot + Pyxis (recommended) or Apptainer;
  3. A shared filesystem (for job staging directories and artifacts);
  4. First-class framework execution artifacts published to the runtime registry as SQSH / SIF (custom + slurm does not allow implicit OCI image materialization).

Configuration

Key semantics

LaunchRequest is rendered to a batch script (image, mounts, srun topology, ingest credentials). After terminal logs are archived, shared staging and scheduler logs are deleted. Interrupted submits are cleaned before retry.
Multi-pool jobs are rendered as Slurm heterogeneous jobs: one component per pool, with --constraint pinning nodes via the GPU series’ slurm_constraint. If a series declares no constraint, the assembly layer rejects outright (fail-closed — components never land on arbitrary GPU nodes).
Status is polled via REST and mapped onto the platform state machine; logs are read back from the shared directory (handled asynchronously, so large logs never block the event loop).

Known boundaries

  • Playground is not supported: training nodes usually have no inbound network;
  • The E2E closed loop does not yet cover slurm (requires containerized slurmrestd + Apptainer, planned) — batch script rendering, the REST client, hetjob, and status mapping have full unit-test coverage. See E2E Closed-Loop Testing.