Skip to main content

slurmpast

How your finished Slurm jobs actually ran — and what the next one should ask for.

PyPI CI Python 3.10+ 2725 tests MIT License

The slurmpast dashboard driven end to end: finished jobs rolled into workloads ranked by resource use, filtered to the ones that went wrong, into a workload that timed out 14 times at an unchanged --time, into one run's post-mortem showing 101% of the wall clock against 0% CPU and the finding that says it hung rather than ran out of time, then the cross-run patterns and the node reliability table naming the node that ate them.

Recorded against slurmpast --demo, which is why the header reads synthetic demo data throughout. Regenerate with pip install -e ".[assets]" && python tools/demo_gif.py.

pip install slurmpast
slurmpast              # dashboard, last 7 days
slurmpast --sizing     # what to request next time, per workload
slurmpast 51170455     # one job, every field Slurm recorded
slurmpast --demo       # no Slurm to hand? synthetic cluster
slurmpast -u alice     # someone else's history (`-u alice,bob` for several)
slurmpast --all-users  # every account on the cluster
sp                     # short alias

enter open · q back · digits jump to a row · / search · f filter · s sort · n nodes · p patterns · y copy · ? help

Hold an arrow key for three seconds and the cursor starts covering ground — top to bottom of a 28,741-row history in about twenty seconds. Let go, or press the other arrow, and it is back to one row.

Before the run, slurmate builds the request. During it, slurmwatch watches. After it, slurmpast tells you what happened and what to change.

The same screens as stills

Overview: finished jobs rolled into workloads, ranked by resource use, each with an outcome ribbon, failure count and last run.

One workload: every run of it, with the repeat-failure warning and the sizing advice above the table.

Cross-run patterns: a workload that failed repeatedly at an unchanged time limit, and a memory request being hand-searched.

Regenerate with python tools/screenshots.py.


What to request next time

Over-requesting reserves capacity nobody else can use; under-requesting kills the run. Your own history settles both.

argonne35-pretrain   test · 101 runs
  --time            raise to 10:00:00   (from 08:05:00)
      longest of 90 completed runs took 07:58:23.
  --mem             already about right
  --cpus-per-task   already about right
  #SBATCH --time=10:00:00

That workload was running on a seven-minute margin. With fewer than three usable runs it says not enough evidence instead of guessing.

The figure it measures you against — 08:05:00 above — is the limit your last run asked for, not the largest in the window. Those differ the moment you tune a request, and the window is deliberately built to span that tuning: grouping ignores resource magnitudes, so that raising --mem does not fork the history you are trying to learn from.

One job

One finished job: time, CPU and memory against their limits, then every field Slurm recorded.

Time, CPU and memory against the limits you asked for, then every field Slurm recorded, the log excerpts if the files are still on disk, and the findings.

Failure, across runs

Per-node failure rates with a ready-to-paste --exclude.

seff describes one job and slurmwatch one live run. Neither can say "you submitted this 115 times and it died 99 times." Runs group into workloads, so a repeated failure — and the node it keeps landing on — is visible at a glance, with a ready-to-paste --exclude.

That --exclude is offered only when a node is worse than the rest after accounting for every other node the table tested. Without that correction a large enough history always produces a culprit: given twenty nodes with one identical true failure rate, testing each interval on its own named an innocent node more than half the time.

Correct on any cluster

sacct misreports in ways that are easy to miss: the requested memory is often blank, limits are recorded per allocation but enforced per node, and a job left in RUNNING inflates every total. slurmpast handles those, adapts to how your Slurm version spells things, and prints n/a rather than 0 for anything it cannot read.

Every trap, and the 85 fields it extracts →

As a library

The analysis modules import no third-party package.

from slurmpast import History, Sacct
from slurmpast.sizing import recommend

history = History(Sacct().history(user="you", since="now-30days"))
for advice in recommend(history.groups[0].jobs):
    print(advice.flag, advice.verdict, advice.suggestion)

--json emits everything — 103 values per job, plus 40 for every step.


Slurm 20.11.8 · Python 3.10–3.13 · Textual 0.86–8.2 · MIT

Release files for slurmpast 0.9.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for slurmpast 0.9.0
File Size Uploaded
slurmpast-0.9.0.tar.gz 1.7 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for slurmpast 0.9.0
File Interpreter ABI Platform
slurmpast-0.9.0-py3-none-any.whl Python 3 none any Details

Total release size: 2.0 MB

Release files / slurmpast-0.9.0.tar.gz

Download URL slurmpast-0.9.0.tar.gz
Size 1.7 MB
Tags Source
SHA-256 checksum
How to use checksums
01440a312f78d212b91ce1b47ca804d6d8bf2481380495eef1616a5dfcd54323
BLAKE2b-256 checksum
How to use checksums
e99e5f9031e3a5b0f96fb8f32fa72ee2ccf849d1c892e58cec16a001dbcc3a29
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 12, 2026.

Transparency log

Release files / slurmpast-0.9.0-py3-none-any.whl

Download URL slurmpast-0.9.0-py3-none-any.whl
Size 310.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4661e6fbb2e8a260838113b2481f70d89fe0ae4607e298d34d48d0580a29c12a
BLAKE2b-256 checksum
How to use checksums
c56202d3b543b8200a5d7bf604a485494f329f23de848df7755e534b3b84deb2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 12, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.9.0 This release

2 release files

0.8.3

2 release files

0.8.2

2 release files

0.8.1

2 release files

0.8.0

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page