Approvals: 0/1
This is an old revision of the document!
Mathematica Batch Jobs
VSC-2
Sun Grid Engine
The simplest way is to create a file with your mathematica commands, e.g. 'math-input.m', and just input that in the batch file.
# the following option makes sure the job will run in the current directory #$ -cwd # this option makes sure the job has the same environment variables as the submission shell #$ -V MATHDIR=/opt/sw/Mathematica/90/bin $MATHDIR/math < math-input.m
If we name the above file as math-job.sh and place it in the same directory as math-input.m we can submit it from the same directory with
user@l01 $ qsub math-job.sh
The output will be left in file math-job.sh.o$JOB_ID
and any errors in math-job.e$JOB_ID
.
You could also incorporate mathematica commands in the job file itself, rather then have them in a separate file:
#$ -cwd #$ -V MATHDIR=/opt/sw/Mathematica/90/bin $MATHDIR/math <<END_MATH_COMMANDS 1+1 3*3 END_MATH_COMMANDS
The above notations means that everything between “«END_MATH_COMMANDS” and “END_MATH_COMMANDS” will be used as math program's input. You can again submit this job with qsub.
Parallel Usage
Jobscript:
#$ -N parallel #$ -q all.q #$ -pe mpich 32 # $TMPDIR/machines shows which host machines are reserved for the current job; # copy this file to a temporary file which will be read in by Mathematica; # in the following the small Mathematics m-file will start a kernel on each machine; # since the kernel on the master is already running, it is sufficient # to start the kernels beginning with the second host in the machines file. cp -v $TMPDIR/machines machines_tmp /opt/sw/Mathematica/90/bin/math -run "<<math.m"
Mathematica script named math.m
:
(* configuration for starting remote kernels *) Needs["SubKernels`RemoteKernels`"] $RemoteCommand= "ssh `1` -n -l `3` \"/opt/sw/Mathematica/90/bin/math -mathlink -linkmode Connect `4` -linkname `2` -subkernel -noinit >& /dev/null &\"" (* initialize the kernels on all machines defined in the host file *) hosts=Import["machines_tmp","List"] (* since the kernel on the master is already running, initialization starts with host 2 *) imin=2; imax=Length[hosts]; idelta=1; Do[ Print["starting Kernel: ",i," on ",hosts[[i]]]; LaunchKernels[RemoteMachine[hosts[[i]]]];, {i,imin,imax,idelta} ] (* actual calculation *) primelist = ParallelTable[Prime[k], {k, 1, 20000000}]; Print[primelist]
VSC-3
SLURM
In order to be able to use Mathematica, you have to load the program with the module load xyz
command
[username@l32]$ module avail # select a Mathematica version [username@l32]$ module load Mathematica/10.0.2 # load desired version [username@l32]$ module list # check loaded modules Currently Loaded Modulefiles: 1) Mathematica/10.0.2
(See also the introduction to the module command.)
Now, Mathematica can be called by
[username@l32]$ math
Example: Parallel Mathematica Task
Mathematica script example math-vsc3.m
:
GetEnvironment["MATH_BIN"] math = Environment["MATH_BIN"] kernelsperhost = 16 hosts=Import["nodelist","List"]; Needs["SubKernels`RemoteKernels`"] $RemoteCommand = "ssh -x -f -l `3` `1` " <> math <> " -mathlink -linkmode Connect `4` -linkname '`2`' -subkernel -noinit" (* first host with one kernel less *) LaunchKernels[RemoteMachine[hosts[[1]], kernelsperhost-1]]; imin=2; imax=Length[hosts]; idelta=1; Do[ LaunchKernels[RemoteMachine[hosts[[i]], kernelsperhost]]; , {i, imin, imax, idelta}] primelist = ParallelTable[Prime[k], {k, 1, 20000000}]; Print[primelist]
sbatch job script
jobPar.sh
:
#!/bin/bash # #SBATCH -J par #SBATCH -N 2 #SBATCH -L mathematica@vsc module purge module load Mathematica/10.0.2 # load desired version export MATH_BIN=`which math` #export MATH_PROC=16 scontrol show hostnames $SLURM_NODELIST > nodelist #execute prolog for getting access to license everywhere srun hostname math -run < math-vsc3.m
[username@l32]$ sbatch jobPar.sh # submit your job [username@l32]$ squeue -u username # check state of your job