This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
howto:pbs-pro_job_submission_examples [2015/04/08 16:25] ischeepers |
howto:pbs-pro_job_submission_examples [2021/12/09 16:42] (current) |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ===== PBS-Pro Job Submission Examples ===== | ||
| - | + | ====== | |
| - | Job submission scripts are similar to shell scripts with PBS directives in comments. | + | |
| - | + | ||
| - | **PLEASE NOTE:** | + | |
| - | + | ||
| - | - The first line should have the hash-bang and shell path, eg. ''# | + | |
| - | - The output and error file paths (''# | + | |
| - | - Job names (''# | + | |
| - | + | ||
| - | On a cluster system, run the '' | + | |
| - | + | ||
| - | < | + | |
| - | # | + | |
| - | #PBS -e scratch/ | + | |
| - | #PBS -o scratch/ | + | |
| - | #PBS -j oe | + | |
| - | #PBS -l walltime=5:00:00 | + | |
| - | #PBS -l select=3:ncpus=8:mpiprocs=8 | + | |
| - | #PBS -V | + | |
| - | + | ||
| - | source / | + | |
| - | module add openmpi/ | + | |
| - | + | ||
| - | cd $HOME/ | + | |
| - | + | ||
| - | mpirun -np 24 / | + | |
| - | + | ||
| - | </ | + | |
| - | + | ||
| - | ===How to specify number of nodes and cores for a job=== | + | |
| - | + | ||
| - | This is done using the ''# | + | |
| - | Cluster partitions differ in how many cpu's per node there are: | + | |
| - | * Harpertown: 8 cores per node | + | |
| - | * Nehalem: 8 cores per node | + | |
| - | * Westmere: 12 cores per node | + | |
| - | * Dell: 12 cores per node | + | |
| - | + | ||
| - | To run a 24-core job on the Dell partition, for instance, only 2 nodes are needed: | + | |
| - | + | ||
| - | ''# | + | |
| - | '' | + | |
| - | + | ||
| - | ===Number of cluster nodes in a job=== | + | |
| - | + | ||
| - | The number of cores can be obtained by: | + | |
| - | + | ||
| - | '' | + | |
| - | '' | + | |
| - | + | ||
| - | + | ||
| - | ===Number of cores (cpu' | + | |
| - | + | ||
| - | To determine the number of cores, include the following line in the submission script: | + | |
| - | + | ||
| - | '' | + | |
| - | + | ||
| - | + | ||
| - | ===Determining the machinefile (list of nodes)=== | + | |
| - | + | ||
| - | The mpirun command can use the PBS variable '' | + | |
| - | file name with the list of nodes: | + | |
| - | + | ||
| - | + | ||
| - | '' | + | |
| - | '' | + | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | On a non-cluster system, run an executable on 24 cores for 5 hours | + | |
| - | + | ||
| - | < | + | |
| - | # | + | |
| - | #PBS -j oe | + | |
| - | #PBS -l walltime=5: | + | |
| - | #PBS -l ncpus=24 | + | |
| - | #PBS -V | + | |
| - | + | ||
| - | cd $HOME/ | + | |
| - | </ | + | |
| - | + | ||
| - | ===Using Modules=== | + | |
| - | + | ||
| - | To use the module system, add the following line to your submission script after | + | |
| - | the #PBS lines: | + | |
| - | + | ||
| - | '' | + | |
| - | '' | + | |
| - | + | ||
| - | Then you will be able to include your required module to set up an environment: | + | |
| - | + | ||
| - | '' | + | |
| - | '' | + | |
| - | + | ||
| - | To list modules, the MODULEPATH variables normally are set by default and can be viewed | + | |
| - | from the command line using: | + | |
| - | + | ||
| - | '' | + | |
| - | '' | + | |
| - | + | ||
| - | For Bioinformatics users, add the additional modules in your .profile as follows: | + | |
| - | + | ||
| - | + | ||
| - | '' | + | |
| - | '' | + | |
| - | + | ||
| - | ===How long can a job run=== | + | |
| - | + | ||
| - | There is no limit to the amount of time that a PBS job can run. If no time limit is specified, a default of 12 hours is assigned. Remember to check point long running jobs. | + | |
| - | + | ||
| - | To specify a time, include the following line in the submission script: | + | |
| - | + | ||
| - | ''# | + | |
| - | + | ||
| - | ===Exclusive use of cluster nodes=== | + | |
| - | + | ||
| - | On cluster systems, if a job does not request all the cores on a node, it is possible another job will share the same node. To prevent this, request exclusive use. | + | |
| - | + | ||
| - | ''# | + | |
| - | + | ||
| - | ===How to export interactive session environment to job=== | + | |
| - | + | ||
| - | To include the shell environment in the batch job, either use the -V option with qsub or as a PBS directive | + | |
| - | + | ||
| - | '' | + | |
| - | + | ||
| - | ''# | + | |
| - | + | ||
| - | ===Hyper-Threading=== | + | |
| - | + | ||
| - | On the CHPC cluster, Hyperthreading is disabled, except on the MIC nodes. | + | |
| - | + | ||
| - | ===Suppose I want to do a parameter study. How do I submit all these jobs with a different value of parameter? | + | |
| - | + | ||
| - | Use PBS Job Arrays. You can specify how many jobs to run by adding the directive | + | |
| - | + | ||
| - | #PBS -J < | + | |
| - | + | ||
| - | where range is X-Y:Z. So 2-10:2 indicates all the even jobs from 2 to 10, i.e., 2,4,6,8 and 10. | + | |
| - | + | ||
| - | PBS defines two environment variables: | + | |
| - | + | ||
| - | PBS_ARRAY_INDEX | + | |
| - | + | ||
| - | PBS_ARRAY_ID | + | |
| - | + | ||
| - | These variables are also defined as attributes: | + | |
| - | + | ||
| - | array_index | + | |
| - | + | ||
| - | array_id | + | |
| - | + | ||
| - | Based on the job array index, different input files can be used for each job in the job array. Below is a job script example that submits two jobs, each using one processor. | + | |
| - | + | ||
| - | NOTE: The PBS directives specify the resources that will be used by EACH individual job, NOT all the jobs together. | + | |
| - | + | ||
| - | < | + | |
| - | #!/bin/sh | + | |
| - | #PBS -V | + | |
| - | #PBS -l select=1: | + | |
| - | #PBS -N Job_Array_Test | + | |
| - | #PBS -j oe -o ja.^array_index^.pbs | + | |
| - | #PBS -J 1-2 | + | |
| - | + | ||
| - | source / | + | |
| - | module add openmpi/ | + | |
| - | unset echo | + | |
| - | + | ||
| - | cd $PBS_O_WORKDIR | + | |
| - | echo $PBS_ARRAY_INDEX | + | |
| - | echo $PBS_ARRAY_ID $PBS_ARRAY_INDEX >> ja.$PBS_ARRAY_INDEX.out | + | |
| - | echo ' ' | + | |
| - | / | + | |
| - | + | ||
| - | exit | + | |
| - | </ | + | |
| - | + | ||
| - | + | ||
| - | ===A job submitted to the queue is not running=== | + | |
| - | + | ||
| - | Look at the job status with qstat. The next to last line of the output is a comment describing the job status. Possible outputs include: | + | |
| - | + | ||
| - | '' | + | |
| - | + | ||
| - | * Job run at date at time on hostname | + | |
| - | Job is running OK | + | |
| - | + | ||
| - | * Not Running: No available resources on nodes | + | |
| - | Job requires more memory, | + | |
| - | + | ||
| - | * Job held, too many failed attempts to run | + | |
| - | Delete and resubmit job | + | |
| - | + | ||
| - | If this persists, contact User support | + | |
| - | + | ||
| - | * Not Running, Draining system to allow starving job to run | + | |
| - | | + | |
| - | + | ||
| - | ===Queued Jobs stuck in an error state (E)=== | + | |
| - | + | ||
| - | Try deleting the job with qdel | + | |
| - | + | ||
| - | '' | + | |
| - | + | ||
| - | The following must be **plain text** files, as created by unix programs like '' | + | |
| + | See the [[quick: | ||