SLURM/ArrayJobs: Difference between revisions

From UMIACS
Jump to navigation Jump to search
No edit summary
No edit summary
 
(6 intermediate revisions by 2 users not shown)
Line 1: Line 1:
Here is an example to get you started using array jobs in [[SLURM]].
==Array computation example job==
Save this code to a file called <code>test.py</code>.
<pre>
import time
print('start at ' + time.strftime('%H:%M:%S'))
print('sleep for 10 seconds ...')
time.sleep(10)
print('stop at ' + time.strftime('%H:%M:%S'))
</pre>
==Submission script==
Save this to a file called <code>array.sh</code> and you should be able to submit the job as <code>sbatch array.sh</code>.
<pre>
<pre>
#!/bin/bash
#!/bin/bash
Line 7: Line 25:


#SBATCH --job-name=example
#SBATCH --job-name=example
#SBATCH --array=1-16        # run 16 jobs at the same time
#SBATCH --time=0-00:05:00  # run for 5 minutes (d-hh:mm:ss)
#SBATCH --mem-per-cpu=500MB # use 500MB per core


# 16 jobs will run in this array at the same time
# all bash commands must be after all SBATCH directives
#SBATCH --array=1-16
 
# run for five minutes
#              d-hh:mm:ss
#SBATCH --time=0-00:05:00
 
# short partition should do it
#SBATCH --partition short
 
# 500MB memory per core
# this is a hard limit
#SBATCH --mem-per-cpu=500MB
 
# you may not place bash commands before the last SBATCH directive


# define and create a unique scratch directory
# define and create a unique scratch directory

Latest revision as of 20:30, 28 March 2024

Here is an example to get you started using array jobs in SLURM.

Array computation example job

Save this code to a file called test.py.

import time

print('start at ' + time.strftime('%H:%M:%S'))

print('sleep for 10 seconds ...')
time.sleep(10)

print('stop at ' + time.strftime('%H:%M:%S'))

Submission script

Save this to a file called array.sh and you should be able to submit the job as sbatch array.sh.

#!/bin/bash

#####################
# job-array example #
#####################

#SBATCH --job-name=example
#SBATCH --array=1-16        # run 16 jobs at the same time 
#SBATCH --time=0-00:05:00   # run for 5 minutes (d-hh:mm:ss)
#SBATCH --mem-per-cpu=500MB # use 500MB per core

# all bash commands must be after all SBATCH directives

# define and create a unique scratch directory
SCRATCH_DIRECTORY=/scratch0/${USER}/job-array-example/${SLURM_JOBID}
mkdir -p ${SCRATCH_DIRECTORY}
cd ${SCRATCH_DIRECTORY}

cp ${SLURM_SUBMIT_DIR}/test.py ${SCRATCH_DIRECTORY}

# each job will see a different ${SLURM_ARRAY_TASK_ID}
echo "now processing task id:: " ${SLURM_ARRAY_TASK_ID}
python test.py > output_${SLURM_ARRAY_TASK_ID}.txt

# after the job is done we copy our output back to $SLURM_SUBMIT_DIR
cp output_${SLURM_ARRAY_TASK_ID}.txt ${SLURM_SUBMIT_DIR}

# we step out of the scratch directory and remove it
cd ${SLURM_SUBMIT_DIR}
rm -rf ${SCRATCH_DIRECTORY}

# happy end
exit 0