stacpolly
Job Submission
- Overview
- Setting up your environment
- Usage
- Job Scripts
- Memory
- Reserving an entire node
- Requesting a specific node
- Requesting hardware properties
Overview
Torque 2.3.5 is the queuing software. Folks familiar with PBS will be at home with Torque.
All parallel tasks require submission to the queue. Submission of jobs is done with the qsub command. The queue can be queried with showq or qstat.
Setting up your environment
Follow the instructions in Environment.
Usage
Submit jobs with
qsub job_script
Display the queue status with
qstat
or
showq
Cancel jobs with
qdel job_id
where job_id can be retrieved from showq or qstat.
Other useful commands are:
- showbf
- see how many nodes are available for use.
- mdiag (aka diagnose)
- explain why jobs aren't running.
- checkjob
- check the status of a particular job.
- pbsnodes
- list nodes and their state.
- pbsnodes -l "up"
- list all nodes that are up.
- /home/ert/bin/NodeUsage
- Find the loads on each node.
- /home/brs/tools/queue_stat/queue_stat
- Queue summary
Job Scripts
Serial job
# The shell #PBS -S /bin/tcsh # The number of nodes and the number of processes per node #PBS -l nodes=1 # The wall time for the calculation in HH:MM:SS #PBS -l walltime=720:00:00 # Where the errors go #PBS -e /home/foo/070419a/log.error # Where the messages go #PBS -o /home/foo/070419a/log set DIR = /home/foo/070419a # The work directory cd $DIR # Run the executable /home/foo/bin/my.executable < my.input > my.output
For running an octave job:
octave --silent --no-window-system Job.m > Job.log
MPI job
The following will run PMRT on 16 cores spread over 2 nodes. Note, you are unable to request more than 8 processors per node (ppn). There are 17 nodes (16 8-way and 1 6-way).
# The shell #PBS -S /bin/tcsh # The number of nodes and the number of processes per node #PBS -l nodes=2:ppn=8 # The wall time for the calculation in HH:MM:SS #PBS -l walltime=720:00:00 # Where the errors go #PBS -e $HOME/PMRT/Runs/Polar/L=1e21/090107f/log.error # Where the messages go #PBS -o $HOME/PMRT/Runs/Polar/L=1e21/090107f/log set DIR = $HOME/PMRT/Runs/Polar/L=1e21/090107f set EXE = $HOME/bin/PMRT_Polar_HY_zi=8_zt=5.5 set IC = $HOME/PMRT/ICs/ic_256_z=009.bin.min # The work directory cd $DIR module load openmpi # Run the executable mpirun $EXE $IC 1 1 >& PMRT.log
OpenMP job
# The shell #PBS -S /bin/tcsh # The number of nodes and the number of processes per node # OpenMP cannot request more than one node, and no more than the number of # cores on the largest node, currently 64, but less for most nodes #PBS -l nodes=1:ppn=8 # The wall time for the calculation in HH:MM:SS #PBS -l walltime=720:00:00 # Where the errors go #PBS -e log.error # Where the messages go #PBS -o log set DIR = $HOME/PMRT/Runs/Polar/L=1e21/090107f set EXE = $HOME/bin/PMRT_Polar_HY_zi=8_zt=5.5 set IC = $HOME/PMRT/ICs/ic_256_z=009.bin.min # The work directory cd $DIR setenv OMP_NUM_THREADS 8 # Run the executable $EXE $IC 1 1 >& PMRT.log
Hybrid MPI/OpenMP job
# The shell #PBS -S /bin/tcsh # The number of nodes and the number of processes per node # 4 nodes, with 8 processors per node, so 4 MPI jobs, with 8 threads each #PBS -l nodes=4:ppn=8 # The wall time for the calculation in HH:MM:SS #PBS -l walltime=1:00:00 # Where the errors go #PBS -e log.error # Where the messages go #PBS -o log set DIR = $HOME/Comp/test_HybridJob set EXE = $DIR/MPI_OpenMP_test # The work directory cd $DIR # Each process can generate 8 threads setenv OMP_NUM_THREADS 8 # Run the executable on 4 nodes, with only one process per node mpirun -n 4 --map-by ppr:1:node --bind-to none $EXE >& Log
Note, for the last line you can use the deprecated but clearer:
mpirun -n 4 -npernode 1 $EXE >& Log
Job Arrays
To submit a number of very similar jobs, perhaps varying an input data file or a parameter, create a job array.
Submit with:
qsub -t 0-10 JobArrayScript.pbs
or
qsub -t 1,2,5,10 JobArrayScript.pbs
JobArrayScript.pbs is just like any of the job submission scripts above, but will be called 11 times in the first example and 4 times in the second with the environment variable $PBS_ARRAYID set appropriately.
Memory
The amount of memory required can be set with the mem parameter. This is useful if you know you need an amount of memory available only on all selection of nodes.
# The memory requested per process. The largest requested by all processes. #PBS -l mem=30gb
Reserving an entire node to one job
On occassion, you may want to start only a few jobs on a node, but reserve the whole node for your single job. For example, you know you will need all the memory or you want to mix threading with MPI.
The following will run the job on 2 nodes, using only 1 processor per node.
#PBS -l nodes=2:ppn=1 #PBS -W x=NACCESSPOLICY:SINGLEJOB mpirun -n 2 MyMPIProg
To determine the number of processors available on the assigned node:
# Determine the number of cores available on this node set NCores=`cat /proc/cpuinfo | grep processor | wc -l`
Requesting a specific node
On occassion, you may want to have a job placed on a particular node. For example, you already have a dataset on a local drive.
The following will run the job on worker004.
#PBS -l nodes=worker004.cluster.loc
Requesting hardware properties
Since stacpolly is a heterogenous system, properties of the nodes differ. These properties are selectable at job-submission time. Add the following resource requests as necessary:
- intel
- Intel CPU
- amd
- AMD CPU
- localdatadisc
- A local /data scratch directory
- gpu
- Two Tesla M2090 GPUs
- infiniband
- InfiniBand-connected nodes
- weaklensing
- Nodes provided by the Weak Lensing group
Examples
#PBS -l nodes=4:intel:ppn=12
Select four Intel nodes with 12 cores per node.
#PBS -l nodes=1:gpu
Select the GPU node.
If you want to choose multiple resources, separate the properties with a ":".
#PBS -l nodes=1:intel:localdatadisc:ppn=1
Last modified 2015-May-19 by Eric Tittley