Skip to content

[Feature]: Scheduler submission driver (Slurm/PBS/LSF) for remote compute jobs #927

Description

@carlkaub

Preflight checklist

  • I searched existing issues and discussions and this hasn't been proposed yet.

What problem does this solve?

The Capability Map says "Slurm/cloud-GPU submission … not built yet". That is half right, and the accurate half changes the size of the job.

Detection is built. src/main/compute/compute-service.ts probes for sbatch, qsub, and bsub, exposes detectedScheduler: 'slurm' | 'pbs' | 'lsf' | 'none', and classifies hosts as scheduler_cluster.

Submission is not. src/main/compute/job-dispatcher.ts launches every job the same way regardless of host shape — nohup setsid bash launcher.sh & over SSH — and src/main/compute/job-poller.ts tracks liveness with kill -0 <pid>.

The consequences on a real cluster are immediate: jobs run on the login node instead of the queue, which is the fastest way for a researcher to get their account suspended; no partition, walltime, GPU, or memory request; no queue position; and a hard 7-day ceiling that compute-service.ts already apologizes for in its own error text — "Use a scheduler driver for multi-day jobs."

The code, in other words, already names the missing component.

Proposed solution

Introduce a job driver interface at the existing dispatcher/poller seam — the split is already in the right place.

  • DirectSshDriver — today's nohup setsid + kill -0 behavior, unchanged, for hosts with no scheduler.
  • SlurmDriversbatch for submission, sacct/squeue for status, scancel for cancellation, exit-code and OOM classification from sacct rather than inferred from elapsed time.
  • PbsDriver / LsfDriver — same interface, added as demand appears.

Driver selection follows the detectedScheduler value the probe already returns, with an explicit user override per host, since a cluster may have a scheduler the user still does not want to use.

Scheduler resource requests (partition, walltime, CPUs, memory, GPUs) become part of the host or job configuration. The 7-day cap can then be lifted for scheduler-backed hosts, where the scheduler owns the walltime.

Alternatives considered

  • Submit through a generic wrapper script. Loses queue state, cancellation, and accounting — polling would still be blind.
  • Ask users to submit manually and register results. Breaks the harvest path that already routes results back into the data-storage location.

Additional context

Also unblocks parameterized sweeps, where per-run scheduler submission is the entire point.

Worth noting for reviewers: harvest-engine.ts and harvest-classifier.ts should need no change — drivers differ in submission and status, not in how results come home.


Part of #917 (preserve-the-backend blend plan). This proposal is additive: it does not change the ACP runtime, artifact/provenance store, notebook execution semantics, or the Prisma schema.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions