Skip to content

v5.0.0 — SLURM flag parity for sbatch

Latest

Choose a tag to compare

@ksterx ksterx released this 13 Sep 01:10
bbfc1a9

srunx sbatch used SLURM's command name but not its flags. This release aligns them, and fixes a bug found on the way.

Breaking changes

--quiet's short flag is now -Q, not -q. Real sbatch/squeue/scancel use -q for --qos. On sbatch, -q <value> now works as the --qos passthrough; on commands without a --qos it is simply unknown.

Four duplicate long aliases are gone. Use sbatch's own spellings instead:

Removed Use
--name -J / --job-name
--time-limit -t / --time
--memory --mem
--work-dir -D / --chdir

--log-dir stays — it has no sbatch equivalent and expands to an --output/--error pair.

Native sbatch options now pass through

About 70 options (--array, --dependency, --account, --qos, --mail-type, …) are accepted in every real form — --array=1-10, --array 1-10, -a 1-10, -a1-10 — and forwarded to the actual sbatch invocation. --sbatch-arg is the escape hatch for anything the table doesn't cover.

srunx sbatch --array=1-10 --account=proj --qos=normal train.sh
srunx sbatch --wrap "python train.py" --dependency=afterok:123

A typo still exits 2 rather than silently reaching sbatch. Long-option abbreviations are not recognized; use --sbatch-arg=--arr=1-10 to opt into one explicitly.

Options that would break srunx's reading of the submission result are refused (--parsable, --test-only, --quiet, --wrap, --help, --usage, --version). If job-ID parsing fails on a job that was submitted, srunx reports a failure the user then retries — double-submitting to the cluster.

Bug fix

srunx sbatch --local script.sh -t 5:00 silently dropped -t. Only the SSH in-place path consumed the flags the user typed; the local and SSH temp-upload branches never passed them on, so SLURM's own precedence (command line > SBATCH_* env > #SBATCH > site default) held or didn't depending on the transport. Now wired through all three.

Notes

--cpus-per-gpu and --tres-per-task=cpu:* are mutually exclusive with --cpus-per-task, which the --wrap template emitted unconditionally; the generated directive is now dropped when either is passed.

Array jobs submitted through --array are still mis-tracked by squeue/history — job IDs like 123_4 are parsed with int(), which reads them as 1234. Submission works; the monitoring side is tracked separately.

Full changelog: v4.3.0...v5.0.0