Prerequisites
- Slurm 26.05 with slurmrestd API
v0.0.45and JWT authentication; - Container runtime installed on compute nodes: Enroot + Pyxis (recommended) or Apptainer;
- A shared filesystem (for job staging directories and artifacts);
- 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
Batch script rendering
Batch script rendering
LaunchRequest renders a batch script with explicit image, mounts and topology. Each attempt keeps its own immutable environment and scheduler logs. A lost submission response retains those files and blocks another submit until the original allocation is found. Lifecycle operations use the native SLUID; numeric JobIDs are used only to retrieve the initial receipt. Automatic Slurm requeue is disabled because TunePlane owns retries.
Heterogeneous multi-pool = hetjob
Heterogeneous multi-pool = hetjob
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 and logs
Status and logs
Status is polled via REST and mapped onto the platform state machine; logs are read from the shared directory with a 64 KiB limit per file and at most 2,000 lines. Epilog and staging flags keep resources occupied until cleanup finishes.
What this backend cannot do
No Playground. A compute node usually has no inbound path from the console, so there is nowhere to reach a session. Same for a Model Deployment. No Volume mount. The platform does not control the bind list of the SIF or SQSH image, so it refuses aspec.data.volumes reference here rather than starting a job whose mount would be
empty.
The smoke test does not cover it. That would need a containerised
slurmrestd plus Apptainer. Batch script rendering, the REST client, hetjob layout and status
mapping are covered by unit tests instead, so what stays unproven here is the round trip against
a real controller.
CPU-only custom jobs
Usecustom/custom with one pool, nodes: 1, gpus_per_node: 0, and positive
cpus and memory_gb. Select a CPU-capable Slurm partition. The generated batch
script requests --cpus-per-task and --mem, with no GPU allocation or Ray.
Publish a SIF/SQSH artifact under an explicit custom-... runtime id in
TUNEPLANE_RUNTIME_REGISTRY_FILE. Set spec.framework.runtime_id to that id and
omit spec.framework.image. Artifact hashes are verified before submission and
on the compute node. The shared storage and container runtime prerequisites
still apply. Scratch and multi-machine CPU requests are not supported.