MATLAB: Difference between revisions

From Alliance Doc
Jump to navigation Jump to search
No edit summary
(point to Mathworks page for cmd line options)
Line 36: Line 36:
#!/bin/bash -l
#!/bin/bash -l
#SBATCH --job-name=matlab_test
#SBATCH --job-name=matlab_test
#SBATCH --account=def-bmoa #adjust this to match the accounting group you are using to submit jobs
#SBATCH --account=def-someprof # adjust this to match the accounting group you are using to submit jobs
#SBATCH --time=0-03:00     #adjust this to match the walltime of your job
#SBATCH --time=0-03:00         # adjust this to match the walltime of your job
#SBATCH --nodes=1       
#SBATCH --nodes=1       
#SBATCH --ntasks=1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=1 #adjust this if you are using PCT
#SBATCH --cpus-per-task=1     # adjust this if you are using parallel commands
#SBATCH --mem=4000         #adjust this according to your the memory requirement per node you need
#SBATCH --mem=4000             # adjust this according to your the memory requirement per node you need
#SBATCH --mail-user=bmoa@uvic.ca #adjust this to match your email address
#SBATCH --mail-user=you@youruniversity.ca # adjust this to match your email address
#SBATCH --mail-type=ALL
#SBATCH --mail-type=ALL


<!--T:16-->
<!--T:16-->
#Load the appropriate matlab module
# Load the appropriate matlab module
module load matlab/2018a
module load matlab/2018a
#Remove -singleCompThread if you are using PCT
# Remove -singleCompThread if you are using parallel commands
srun matlab -nodisplay -singleCompThread -r "cosplot"
srun matlab -nodisplay -singleCompThread -r "cosplot"
}}
}}
Line 55: Line 55:
You can then submit the job using the usual <tt>sbatch</tt> command as follows:
You can then submit the job using the usual <tt>sbatch</tt> command as follows:
{{Command|sbatch matlab_slurm.sl}}
{{Command|sbatch matlab_slurm.sl}}
Remove the <code>-singleCompThread</code> option if you have requested
more than one core with <code--cpus-per-task</code>.
For further information on the command line options <code>-nodisplay</code>, <code>-singleCompThread</code>, and <code>-r</code>,
see [https://www.mathworks.com/help/matlab/ref/matlablinux.html matlab (Linux)] on the Mathworks web site.


== Using the MATLAB Compiler Runtime libraries == <!--T:5-->
== Using the MATLAB Compiler Runtime libraries == <!--T:5-->

Revision as of 18:27, 19 September 2018

Other languages:

Using MATLAB on Compute Canada clusters

There are two main ways of using MATLAB on Compute Canada clusters.

  1. Running MATLAB - this approach involves the direct use of MATLAB in one of two ways:
    1. Bring your own license, which involves using a license you already have access to, typically owned by your institution, faculty, department or lab.
    2. Running your computations on Cedar, in which case would use the license which is available for any student, professor or academic researcher.
  2. Running a compiled MATLAB application - this method requires compiling your code into a binary using the MATLAB compiler (mcc). You can then run that binary executable using the appropriate MATLAB Runtime.

More details about these approaches are provided below.

Using MATLAB by bringing your own license

Compute Canada is a hosting provider for MATLAB. This means that we have MATLAB installed on our clusters and can provision access to MATLAB by allowing you to bring your own license from your institution and run computations on our infrastructure. In general, any license can be used on our clusters. For any questions regarding additional usage of your license outside of your campus, we encourage you to contact the system administrator at your institution or MathWorks account manager.

Note that enabling access to MATLAB requires some additional technical configuration. Namely, the license server on your end will need to be reachable by our compute nodes. This will require our technical team to get in touch with the technical people managing your license software. In some cases, this has already been done. You should then be able to load the MATLAB module, and it should find its license automatically. If this is not the case, please write to technical support, so that we can arrange this for you.

Important: Like any other intensive job, you must always run MATLAB code within a job that you will have submitted to the scheduler. For instructions on using the scheduler, please see the Running jobs page.

A simple SLURM script that you can use to submit a matlab script example, named cosplot.m - see the section below, is as follows:


File : matlab_slurm.sl

#!/bin/bash -l
#SBATCH --job-name=matlab_test
#SBATCH --account=def-someprof # adjust this to match the accounting group you are using to submit jobs
#SBATCH --time=0-03:00         # adjust this to match the walltime of your job
#SBATCH --nodes=1      
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=1      # adjust this if you are using parallel commands
#SBATCH --mem=4000             # adjust this according to your the memory requirement per node you need
#SBATCH --mail-user=you@youruniversity.ca # adjust this to match your email address
#SBATCH --mail-type=ALL

# Load the appropriate matlab module
module load matlab/2018a
# Remove -singleCompThread if you are using parallel commands 
srun matlab -nodisplay -singleCompThread -r "cosplot"


You can then submit the job using the usual sbatch command as follows:

Question.png
[name@server ~]$ sbatch matlab_slurm.sl

Remove the -singleCompThread option if you have requested more than one core with <code--cpus-per-task. For further information on the command line options -nodisplay, -singleCompThread, and -r, see matlab (Linux) on the Mathworks web site.

Using the MATLAB Compiler Runtime libraries

You can also compile your code using the MATLAB compiler, included among the Compute Canada-hosted modules. See documentation for the Compiler at the MathWorks website. Here is an example MATLAB file function.


File : cosplot.m

function cosplot()
% MATLAB file example to approximate a sawtooth
% with a truncated Fourier expansion.
nterms=5;
fourbypi=4.0/pi;
np=100;
y(1:np)=pi/2.0;
x(1:np)=linspace(-2.0*pi,2*pi,np);

for k=1:nterms
 twokm=2*k-1;
 y=y-fourbypi*cos(twokm*x)/twokm^2;
end

%(The following commands for generating graphics output work
% with MATLAB 7 on glacier but produce empty plots with MATLAB 6
% on some other clusters.)
plot(x,y)
print -dpsc matlab_test_plot.ps
quit
end


To compile it, you would use the command

Question.png
[name@yourserver ~]$ mcc -m -R -nodisplay cosplot.m

This will produce a binary named cosplot, as well as a wrapper script. To run the binary on Compute Canada servers, you will only require the binary. The wrapper script, named run_cosplot.sh, will not work as is on our servers, because MATLAB assumes that some libraries can be found in specific locations. Instead, we provide a different wrapper script, called run_mcr_binary.sh which sets the correct paths.

On one of our servers, load an MCR module corresponding to the MATLAB version you used to build the executable:

Question.png
[name@server ~]$ module load mcr/R2018a

Run the following command:

Question.png
[name@server ~]$ setrpaths.sh --path cosplot

then use your binary as so:

Question.png
[name@server ~]$ run_mcr_binary.sh cosplot

You will only need to run the setrpaths.sh command once for each compiled binary. The run_mcr_binary.sh will instruct you to run it if it detects that it has not been done.

Important: Like any other intensive job, you must always run MCR code within a job that you will have submitted to the scheduler. For instructions on using the scheduler, please see the Running jobs page.