Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
doku:mathematica [2015/05/13 12:04] – [Example: Parallel Mathematica Task] ir | doku:mathematica [2022/09/20 13:41] (current) – [SLURM] groda | ||
---|---|---|---|
Line 1: | Line 1: | ||
======= Mathematica Batch Jobs ======= | ======= Mathematica Batch Jobs ======= | ||
- | ===== VSC-2 ===== | ||
- | ==== Sun Grid Engine ==== | ||
- | The simplest way is to create a file with your mathematica commands, e.g. ' | ||
- | < | ||
- | # 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=/ | + | === SLURM === |
- | $MATHDIR/ | + | |
- | </ | + | In order to be able to use Mathematica, |
- | 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 | + | |
< | < | ||
- | user@l01 $ qsub math-job.sh | + | [username@l32]$ module load Mathematica |
+ | [username@l32]$ module list # check loaded modules | ||
+ | Currently Loaded Modulefiles: | ||
+ | [...] | ||
+ | 18) Mathematica/ | ||
</ | </ | ||
- | The output will be left in file '' | + | (See also the introduction to the [[https:// |
- | + | Now, Mathematica can be called by | |
- | You could also incorporate mathematica commands in the job file itself, rather then have them in a separate file: | + | |
< | < | ||
- | #$ -cwd | + | [username@l32]$ math |
- | #$ -V | + | |
- | + | ||
- | MATHDIR=/ | + | |
- | + | ||
- | $MATHDIR/math << | + | |
- | 1+1 | + | |
- | 3*3 | + | |
- | END_MATH_COMMANDS | + | |
</ | </ | ||
- | The above notations means that everything between "<< | + | ==== Example: Parallel Mathematica Task ==== |
- | ==== Parallel Usage ==== | + | Mathematica script example '' |
- | Jobscript: | + | |
< | < | ||
- | #$ -N parallel | ||
- | #$ -q all.q | ||
- | #$ -pe mpich 32 | ||
+ | GetEnvironment[" | ||
+ | math = Environment[" | ||
+ | kernelsperhost = 16 | ||
+ | hosts=Import[" | ||
- | # $TMPDIR/ | ||
- | # 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/ | ||
- | |||
- | / | ||
- | |||
- | </ | ||
- | |||
- | Mathematica script named '' | ||
- | |||
- | < | ||
- | (* configuration for starting remote kernels *) | ||
Needs[" | Needs[" | ||
- | $RemoteCommand= " | + | $RemoteCommand = "ssh -x -f -l `3` `1` " |
- | (* initialize the kernels on all machines defined in the host file *) | + | (* first host with one kernel less *) |
+ | LaunchKernels[RemoteMachine[hosts[[1]], | ||
- | hosts=Import[" | ||
- | |||
- | (* since the kernel on the master is already running, initialization starts with host 2 *) | ||
imin=2; | imin=2; | ||
imax=Length[hosts]; | imax=Length[hosts]; | ||
idelta=1; | idelta=1; | ||
- | Do[ | + | Do[ |
- | Print[" | + | LaunchKernels[RemoteMachine[hosts[[i]], kernelsperhost]]; |
- | LaunchKernels[RemoteMachine[hosts[[i]]]]; | + | , |
- | {i, | + | |
- | ] | + | |
- | (* actual calculation *) | ||
primelist = ParallelTable[Prime[k], | primelist = ParallelTable[Prime[k], | ||
Print[primelist] | Print[primelist] | ||
- | |||
</ | </ | ||
- | |||
- | ===== VSC-3 ===== | ||
- | === SLURM === | ||
- | In order to be able to use Mathematica, | ||
- | < | ||
- | [username@l32]$ module avail # select a Mathematica version | ||
- | [username@l32]$ module load Mathematica/ | ||
- | [username@l32]$ module list # check loaded modules | ||
- | Currently Loaded Modulefiles: | ||
- | 1) Mathematica/ | ||
- | </ | ||
- | (See also the introduction to the [[https:// | ||
- | |||
- | Now, Mathematica can be called by | ||
- | < | ||
- | [username@l32]$ math | ||
- | </ | ||
- | |||
- | ==== Example: Parallel Mathematica Task ==== | ||
- | |||
- | Mathematica script example '' | ||
- | < | ||
- | (*Limits Mathematica to requested resources*) | ||
- | Unprotect[$ProcessorCount]; | ||
- | |||
- | (*Prints the machine name that each kernel is running on*) | ||
- | Print[ParallelEvaluate[$MachineName]]; | ||
- | |||
- | (*Prints all Mersenne PRime numbers less than 2000*) | ||
- | Print[Parallelize[Select[Range[2000], | ||
- | </ | ||
sbatch job script | sbatch job script | ||
'' | '' | ||
Line 123: | Line 55: | ||
#!/bin/bash | #!/bin/bash | ||
# | # | ||
- | #SBATCH -J par # job name | + | #SBATCH -J par |
- | #SBATCH -N 2 # number of nodes=2 | + | #SBATCH -N 2 |
- | #SBATCH --ntasks-per-node=16 | + | #SBATCH -L mathematica@vsc |
- | #SBATCH --ntasks-per-core=1 | + | |
- | #SBATCH --threads-per-core=1 | + | |
+ | |||
+ | module purge | ||
module load Mathematica/ | module load Mathematica/ | ||
+ | |||
+ | |||
+ | 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 | math -run < math-vsc3.m | ||
Line 138: | Line 78: | ||
[username@l32]$ squeue -u username | [username@l32]$ squeue -u username | ||
</ | </ | ||
+ | |||
+ | ==== remote kernel connection ==== | ||
+ | |||
+ | The setup follows | ||
+ | [[https:// | ||
+ | with the | ||
+ | |||
+ | **Shell command to launch kernel:** | ||
+ | |||
+ | for VSC3+ | ||
+ | < | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | for VSC4 | ||
+ | < | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | Note that on VSC4, the salloc command [as described on the | ||
+ | cc-mathematik.univie.ac.at web link] does not need the Mathematica | ||
+ | license. Just leave the -L parameter away. |