Add 'computing_qsub'
parent
5a5e564fc5
commit
bf177d7994
91
computing_qsub.md
Normal file
91
computing_qsub.md
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
# qsub on sigma0
|
||||||
|
Connect to sigma0 with SLC6 as OS
|
||||||
|
```shell
|
||||||
|
ssh -p 28 -X -o ServerAliveInterval=60 -C -c aes128-ctr -m hmac-sha1 <username>@sigma0.physi.uni-heidelberg.de
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
# Setup your local environment
|
||||||
|
The simplest way.
|
||||||
|
```shell
|
||||||
|
source /cvmfs/lhcb.cern.ch/lib/LbEnv
|
||||||
|
lb-run Urania/latest bash
|
||||||
|
```
|
||||||
|
## to submit a few jobs (about 2-50) that take more than a couple minutes each
|
||||||
|
Build a bash script that creates job specific bash-scripts and submits the jobs from individual job folders.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
#!/bin/bash
|
||||||
|
#set -x #echo on
|
||||||
|
# A sample Bash script
|
||||||
|
echo 'Running Script'
|
||||||
|
workdir=/work/username/workfolder
|
||||||
|
#a, x, and y are some variables that I want to loop over with my executable
|
||||||
|
a=27
|
||||||
|
x=$(($a + 1))
|
||||||
|
for ((y=0; y<=$a; y=y+2))
|
||||||
|
do
|
||||||
|
i=$((i+1))
|
||||||
|
mkdir -p $workdir/jobs/runjob$i
|
||||||
|
rm -rf $workdir/jobs/runjob$i/* #cleanup old jobs
|
||||||
|
touch $workdir/jobs/runjob$i/runjob$i.sh #create the job bash script
|
||||||
|
echo "#!/bin/bash" >> $workdir/jobs/runjob$i/runjob$i.sh
|
||||||
|
echo "$workdir/my_executable $a $x $y" >> $workdir/jobs/runjob$i/runjob$i.sh
|
||||||
|
cd $workdir/jobs/runjob$i
|
||||||
|
echo "submitting--> $workdir/my_executable $a $x $y as ./runjob$i.sh" #output to check everything is being calculated as you want
|
||||||
|
qsub -V -b n -l os=slc6 -l ujl=20 -cwd -j yes ./runjob$i.sh # submit the job. -V passes the current environment
|
||||||
|
sleep 2 #be nice to the submission system
|
||||||
|
done
|
||||||
|
exit 1
|
||||||
|
```
|
||||||
|
|
||||||
|
## to submit a few hundred jobs use the array feature of qsub
|
||||||
|
‘qsub’ command combined with the -t option allow for the submission of an ‘array’ of jobs. When a job is launched via ‘qsub -t n[-m[:s]]’ you will have the environment variables SGE_TASK_ID and SGE_TASK_FIRST, and if you add m you will have SGE_TASK_LAST, and if you add s you will have SGE_TASK_STEPSIZE. So -t sets the ‘index numbers’ associated with the job, like so:
|
||||||
|
- n is the first index number
|
||||||
|
- m is the last index number (optional)
|
||||||
|
- s is the step size (optional, defaults to 1)
|
||||||
|
|
||||||
|
***runarray_jobcreater.sh***
|
||||||
|
```sh
|
||||||
|
#!/bin/bash
|
||||||
|
#set -x #echo on
|
||||||
|
# A sample Bash script
|
||||||
|
echo 'Running Script'
|
||||||
|
workdir=/work/username/workfolder
|
||||||
|
#a, x, and y are some variables that I want to loop over with my executable
|
||||||
|
a=2700
|
||||||
|
x=$(($a + 1))
|
||||||
|
for ((y=0; y<=$a; y=y+2))
|
||||||
|
do
|
||||||
|
i=$((i+1))
|
||||||
|
mkdir -p $workdir/jobs/
|
||||||
|
rm -rf $workdir/jobs/* #cleanup old jobs
|
||||||
|
echo "$a $x $y" >> $workdir/jobs/parameters.$i #make a unique parameter file for each task so that we can use the $SGE_TASK_ID to easily reference
|
||||||
|
done
|
||||||
|
|
||||||
|
cd /$workdir/jobs/
|
||||||
|
#submits $i jobs as an array of jobs to the queue "-t 1-$i"
|
||||||
|
#-V passes the current environment
|
||||||
|
#
|
||||||
|
qsub -t 1-$i -V -b n -l os=slc6 -l ujl=20 -cwd -j yes ./runarray.sh
|
||||||
|
exit 1
|
||||||
|
```
|
||||||
|
|
||||||
|
***runarray.sh***
|
||||||
|
```sh
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
#
|
||||||
|
workdir=/work/username/workfolder
|
||||||
|
|
||||||
|
echo "Task id is $SGE_TASK_ID"
|
||||||
|
|
||||||
|
#executes a version of your executable that will read in the parameter file that you have specifically created for this
|
||||||
|
$workdir/my_executable $workdir/jobs/parameters.$SGE_TASK_ID
|
||||||
|
```
|
||||||
|
|
||||||
|
_imported from lhcbmedia wiki_
|
||||||
|
If you want to submit jobs to only some of the machines on our cluster(e.g. leave one machine free for other users), you can specify it the queues options(chosing also a machines):
|
||||||
|
```
|
||||||
|
qsub -masterq fgslc5.q@nu*,fgslc5.q@lambda*,fgslc5.q@alpha*,fgslc5.q@beta*,fgslc5.q@gamma*,fgslc5.q@eta*,fgslc5.q@delta*,fgslc5.q@lhcb-raid03*
|
||||||
|
```
|
Loading…
Reference in New Issue
Block a user