Slurm
We use SLURM as a workload manager to schedule jobs onto compute resources. Via SLURM we can ensure that each user gets a fair share of the limited compute resources and that multiple users do not interfere with each other when e.g. running benchmarks.
Important: You can only access a node via SSH when you have a SLURM allocation of that node.
Other resources:
Basics
Most HPC systems use a job scheduler. VSC and JET use, which uses the following commands to control jobs:
| Command | Description |
|---|---|
sinfo |
Partition information |
squeue |
Queue information |
sqos |
Quality of service information |
scontrol show job <jobid> |
Show job information |
salloc |
Request an allocation |
srun -N<n> <cmd> |
Run a command |
sbatch <job file> |
Run job script |
scancel <jobid> |
Cancel a job |
scontrol update job <jobid> <option> |
Change job settings while running (e.g. TimeLimit) |
seff <jobid> |
Show efficiency of job |
IMGW special commands
There are currently a few extra commands that can be used on the Jet Cluster to facilitate usage of the nodes.
| Command | Description |
|---|---|
jobinfo |
Show detailed information about a specific job. |
jobinfo_remaining |
Display remaining time and resources for your jobs. |
nodeinfo |
Show information about available compute nodes. |
queueinfo |
Display the current job queue status. |
watchjob |
Continuously monitor the status of a specific job. |
Example Job
| Example Slurm Job | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
Common sbatch options:
| Option | Description |
|---|---|
--job-name=<name> |
Job name |
--nodes=<n> |
Number of nodes |
--ntasks=<n> |
Number of tasks |
--ntasks-per-node=<n> |
Tasks in parallel on a single node |
--ntasks-per-core=<n> |
Tasks on a single core |
--mem=<mem> |
Max memory (e.g., 1MB, 1GB) |
--time=<time> |
Estimated run time (D-HH:MM:SS) |
--constraint=<arch> |
CPU architecture (e.g., skylake, zen4) |
Please note that when you do not supply the --output= option, a file called slurm-
MPI applications
When an application is compiled using the Message Passing Interface (MPI), it can run in parallel across multiple nodes and CPUs. SLURM provides built-in support for launching MPI jobs, making it straightforward to scale your application.
Running an MPI Application with SLURM
To run an MPI application, you typically use srun or mpirun within a SLURM allocation. The recommended approach is to use srun, as it integrates directly with SLURM's resource management.
Example SLURM Job Script for MPI
| Example Slurm job with MPI | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 | |
Options:
--nodes=2: Request 2 nodes.--ntasks-per-node=4: Run 4 MPI tasks per node (total 8 tasks).module load openmpi: Load the MPI module (adjust as needed for your environment).srun ./my_mpi_program: Launches your MPI application using SLURM's resource allocation.
Notes
- You can also use
mpirunormpiexec, butsrunis preferred for better integration with SLURM. - Adjust the number of nodes and tasks per your application's requirements.
- Make sure your application is compiled with the same MPI library as the one loaded in the environment.
For more details, see the SLURM MPI documentation.
Status and reason codes
The squeue command details a variety of information on an active job’s status with state and reason codes. Job state codes describe a job’s current state in queue (e.g. pending, completed). Job reason codes describe the reason why the job is in its current state.
The following tables outline a variety of job state and reason codes you may encounter when using squeue to check on your jobs.
Job State Codes
| Status | Code | Explaination |
|---|---|---|
| COMPLETED | CD |
The job has completed successfully. |
| COMPLETING | CG |
The job is finishing but some processes are still active. |
| FAILED | F |
The job terminated with a non-zero exit code and failed to execute. |
| PENDING | PD |
The job is waiting for resource allocation. It will eventually run. |
| PREEMPTED | PR |
The job was terminated because of preemption by another job. |
| RUNNING | R |
The job currently is allocated to a node and is running. |
| SUSPENDED | S |
A running job has been stopped with its cores released to other jobs. |
| STOPPED | ST |
A running job has been stopped with its cores retained. |
A full list of these Job State codes can be found in Slurm’s documentation.
Job Reason Codes
| Reason Code | Explaination |
|---|---|
Priority |
One or more higher priority jobs is in queue for running. Your job will eventually run. |
Dependency |
This job is waiting for a dependent job to complete and will run afterwards. |
Resources |
The job is waiting for resources to become available and will eventually run. |
InvalidAccount |
The job’s account is invalid. Cancel the job and rerun with correct account. |
InvaldQoS |
The job’s QoS is invalid. Cancel the job and rerun with correct account. |
QOSGrpCpuLimit |
All CPUs assigned to your job’s specified QoS are in use; job will run eventually. |
QOSGrpMaxJobsLimit |
Maximum number of jobs for your job’s QoS have been met; job will run eventually. |
QOSGrpNodeLimit |
All nodes assigned to your job’s specified QoS are in use; job will run eventually. |
PartitionCpuLimit |
All CPUs assigned to your job’s specified partition are in use; job will run eventually. |
PartitionMaxJobsLimit |
Maximum number of jobs for your job’s partition have been met; job will run eventually. |
PartitionNodeLimit |
All nodes assigned to your job’s specified partition are in use; job will run eventually. |
AssociationCpuLimit |
All CPUs assigned to your job’s specified association are in use; job will run eventually. |
AssociationMaxJobsLimit |
Maximum number of jobs for your job’s association have been met; job will run eventually. |
AssociationNodeLimit |
All nodes assigned to your job’s specified association are in use; job will run eventually. |
A full list of these Job Reason Codes can be found in Slurm’s documentation.
Get information on your jobs
| Job details | |
|---|---|
1 2 3 4 | |
| Job efficiency | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
There is a helpful script that can report job efficiency for job arrays too.
seff-array.py
| seff-array.py | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 | |
One can use that to get more detailed information on a job array.
Reservations
There can be reservations for certain cases, e.g. a workshop, a trainings exercise, project deadline, ... which can be used as follows. To Check if there is a reservation available run: scontrol show reservations this will give you something like this:
| Slurm reservation | |
|---|---|
1 2 3 4 5 | |
This says that there is a reservation named training available from starttime to endtime with 4 nodes on JET. Notice that only users trainee1, trainee2 have access. In order for them to use it, they need to specify in their job script that they want to use the reservation:
| Slurm reservation usage | |
|---|---|
1 2 3 | |
Going beyond the partition limits
It is only possible in certain cases to use more resources than the partition limits. This is organized by the system administrators and a so called QOS (quality of service) priority queue. If you have a use case that requires more resources than the partition limits, please contact the system administrators to discuss the possibility of using the QOS priority queue.
Slurm's hierarchical limits are enforced in the following order with Job QOS and Partition QOS order being reversible by using the QOS flag 'OverPartQOS':
- Partition QOS limit
- Job QOS limit
- User association
- Account association(s), ascending the hierarchy
- Root/Cluster association
- Partition limit
- None
If you require longer wall times or something else please contact the system admin.