PBS Scheduling on Allocating One Node - cluster-computing

I am trying to request two nodes in a cluster setting; however, when I print ${PBS_NODEFILE}, only one node is visible. I am running this batch script on the login node. Any suggestions to why I am only seeing one node ?
#PBS -S /bin/bash
#PBS -V
#PBS -W block=true
#PBS -l nodes=2:ppn=12
#PBS -l walltime=01:00:00
#PBS -N resnet50
#PBS -A MyProject
echo "The nodefile for this job is stored at ${PBS_NODEFILE}"
cat ${PBS_NODEFILE}

Related

how to run bash script inside the PBS script in the head node, after running the program in compute nodes

current working script (script-A)
#!/bin/bash
#PBS -N test7
#PBS -q batch
#PBS -l nodes=1:ppn=6,walltime=00:30:00
#PBS -j oe
cd \$PBS_O_WORKDIR
mpirun -np 6 /home/sai/1QE/qe-6.5/bin/pw.x < si.scf.in > 92scf.out<br>
What I want?
I want to run a "bash script analysis.sh" in the "HEAD NODE" after running the above job inside the compute node.
e.g. script-B
#!/bin/bash
#PBS -N test7
#PBS -q batch
#PBS -l nodes=1:ppn=6,walltime=00:30:00
#PBS -j oe
cd \$PBS_O_WORKDIR
mpirun -np 6 /home/sai/1QE/qe-6.5/bin/pw.x < si.scf.in > 92scf.out
bash analysis.sh
Problem
The above script-B is also fine, but not in my case.
my problem is the analysis program is installed only in my head node, not in the compute node.
so it will work only in the head node.
so, is there ant way to run the analysis.sh script in the head node after PBS script in the compute node.

PBS torque email variable

Here is an example of pbs that I use:
#!/bin/bash
#PBS -S /bin/bash
#PBS -N myJob
#PBS -l nodes=1:ppn=4
#PBS -l walltime=50:00:00
#PBS -q route
export MYMAIL=mytestmail#testmail.com
#PBS -m ae
#PBS -M mytestmail#testmail.com
./script1.sh
echo $PBS_JOBID $PBS_O_WORKDIR | mail -s "$PBS_JOBNAME script1 done" $MYMAIL
./script2.sh
echo $PBS_JOBID $PBS_O_WORKDIR | mail -s "$PBS_JOBNAME script2 done" $MYMAIL
./script3.sh
echo $PBS_JOBID $PBS_O_WORKDIR | mail -s "$PBS_JOBNAME script3 done" $MYMAIL
./script4.sh
As you can see I want to receive notifications during the process.
My problem is that users must write twice their email address.
I tried:
#PBS -M $MYMAIL
but it does not work.
I also tried to find a pbs variable containing the email stored during
#PBS -M mytestmail#testmail.com
but nothing ...
An idea ?
You are sending different emails by different methods. With the #PBS -M line you are telling pbs_server on the head node where is should send emails about the job and with "|mail " you are sending mail to the user from the node running the job.
It seems that Torque does not set an environment variable that contains the contents of -M so we can't pass that to mail.
I have two ideas for you. The first is trying to capture the Mail_Users line from qstat and parsing it.
qstat -f [job number] | grep Mail_Users
The second is to create a .forward file for each user since Torque will email the local user account by default eliminating the #PBS -M line. You will still need to pass an email or account name to mail but you may be able to get away with:
mail -s "$PBS_JOBNAME script1 done" `whoami`

Torque does not limit the number of nodes mpiexec uses

So I'm running these following pbs files at the same time:
qsub /mnt/folder/prueba1_1
qsub /mnt/folder/prueba01
An here are the files
prueba1_1
#!/bin/bash
#PBS -N pruebaF
#PBS -V
#PBS -l nodes=1:ppn=1
#PBS -q batch
#PBS -j eo
cd /mnt/folder
mpiexec -f machinefile ./cpi2>>salida1_1.o
prueba01
#!/bin/bash
#PBS -N pruebaF
#PBS -V
#PBS -l nodes=1:ppn=1
#PBS -q batch
#PBS -j eo
cd /mnt/folder
mpiexec -f machinefile ./cpi2>>salida01.o
The file machinefile contains 2 nodes slave02 and slave03 each one with 1 processor
Although I specify that each pbs file should use just 1 node and 1 processor per job (with #PBS -l nodes=1:ppn=1) the output files seems to show that each job is using both nodes at the same time. I'm wondering why since these pbsfiles should use just one node and 1 processor, for me It should be that prueba1_1 should use slave02 with 1 processor and prueba01 should use slave02 as well but with the other processor.
the output files are here
salida1_1.o
Process 0 of 2 is on slave02
Process 1 of 2 is on slave03
pi is approximately 3.1415926535900915, Error is 0.0000000000002984
wall clock time = 14.937282
salida01.o
Process 0 of 2 is on slave02
Process 1 of 2 is on slave03
pi is approximately 3.1415926535900915, Error is 0.0000000000002984
wall clock time = 14.741892
I would change machinefile to $PBS_NODEFILE. When Torque/PBS assigns nodes to your job it creates a file containing a list of those nodes and it sets the path to that file in the variable PBS_NODEFILE. I'm guessing machinefile was created for testing and since it is not created or updated by Torque that is why your jobs are always running the same way.

Virtual memory allocation in cluster - line command

I`m running a code on a computer cluster with 24 nodes, 12 processors each one and something about 64Gb memory each node. The commands I'm using to launch it are the following
#!/bin/sh
#PBS -N cclit
#PBS -l walltime=288:00:00
#PBS -l nodes=1:ppn=1
#PBS -j oe
#PBS -m n
#PBS -l mem=60000mb
Unfortunately I realized that my code need at least a virtual memory which is 120000mb. What I tried to do has been to modify the above commands as
#!/bin/sh
#PBS -N cclit
#PBS -l walltime=288:00:00
#PBS -l nodes=2:ppn=2
#PBS -j oe
#PBS -m n
#PBS -l mem=120000mb
But it doesn't seem to work... It stops again at the same point telling me that virtual memory is not sufficient.
My code is not parallelized, meaning that only 1 processor is needed. What happens when the memory of a node is totally used?? I guess Im doing something wrong with '#PBS -l mem=120000mb', or probably I need some other command... I tried to look for a solution on the web but I didn t find anything..
Can you help me?
Thanks Mirko.

running a job in unix

I have the following small script - myjob.qsub:
#!/bin/sh -login
#PBS -l walltime=00:15:00
#PBS -l nodes=1:ppn=1
#PBS -l mem=2gb
#PBS -N myrun05168
/myexecutable >mylog.log
I did make it executable by:
chmod u+x myexecutable
When I try to run by changing directory to the folder of executible and then sumbit the job:
qsub myjob.qsub
gives me error of no /myexecutable file or directory.
I tried to use "./":
#!/bin/sh -login
#PBS -l walltime=00:15:00
#PBS -l nodes=1:ppn=1
#PBS -l mem=2gb
#PBS -N myrun05168
./myexecutable >mylog.log
but doesnot help.
when I just tried to run my executable in command line as, it works:
./myexecutable
As I can not run this as this job need to be submitted as job in cluster computer.
Any suggestions ?
you need to give the full path to the script, I assume the script isn't actually in your root directory, maybe it should be /home/username/myexecutable
Your script runs with -login, is that needed?
You should change your script to use the relative pathname, like
myruns/p_runs/Fw2010/seed1/myexecutable >mylog.log

Resources