MATLAB

From FarmShare

(Difference between revisions)
Jump to: navigation, search
 
(47 intermediate revisions not shown)
Line 1: Line 1:
-
=first steps=
+
[https://www.mathworks.com/products/matlab.html MATLAB] is a multi-paradigm numerical computing environment and programming language.
-
Per [[FarmShare software]] try something like:
+
-
<source lang="sh">
+
-
module avail
+
-
module load matlab
+
-
</source>
+
-
If you're running MATLAB for the first time, it'll try to write some stuff into $HOME/.matlab so make sure you have your [[AFS]] tokens or else MATLAB will crash with an undecipherable error message.
+
== Getting Started  ==
-
As of 9/22/2013 this works on the corn.stanford.edu cluster but NOT on the myth.stanford.edu cluster.
+
Run <code>module avail</code> to get a list of all software modules, or <code>module spider</code> to get a list of available versions of MATLAB.
-
=interactive MATLAB=
 
-
This is the "regular" way to use it, it pops up a GUI.
 
<source lang="sh">
<source lang="sh">
-
ssh -X corn.stanford.edu
+
module spider matlab      
-
module load matlab
+
-
matlab
+
-
</source>
+
-
If your X11 forwarding is configured correctly, it will pop up the MATLAB gui on your display.
+
--------------------------------------------------------------------------------------------------------------------------------
 +
  matlab:
 +
--------------------------------------------------------------------------------------------------------------------------------
 +
    Description:
 +
      A multi-paradigm numerical computing environment and programming language.
-
If you don't have X11 forwarding enabled, you'll get an error message like this:
+
    Versions:
-
  Warning: No display specified.  You will not be able to display graphics on the screen.
+
        matlab/r2016b
-
and then you get the cli interface.
+
        matlab/r2017a
-
If you want the cli interface, just use 'matlab -nodesktop'.
+
--------------------------------------------------------------------------------------------------------------------------------
 +
</source>
-
If you want a single-threaded matlab, use something like
+
Use <code>module load</code> to set up your environment, and then run <code>matlab</code> to start an interactive session.
-
  matlab -nosplash -nodesktop -nodisplay -singleCompThread
+
-
 
+
-
= example single matlab file run via qsub  =
+
-
 
+
-
Here's our helloworld.m:
+
-
<source lang="m">disp('Hello World');
+
-
</source>  
+
-
Here's a command to run that non-interactively:
+
-
 
+
-
  matlab -nodesktop < helloworld.m
+
-
 
+
-
We want to run this same command via the job scheduling system. Let's write a job script (save this as matlab_example.script)
+
<source lang="sh">
<source lang="sh">
-
#!/bin/bash
 
-
 
-
#$ -N matlab_example
 
-
#$ -m bes
 
-
#$ -M chekh@stanford.edu
 
-
#$ -V
 
-
 
module load matlab
module load matlab
-
matlab -nodesktop < /farmshare/software/examples/matlab/helloworld.m
+
matlab
</source>
</source>
-
Submit the script:  
+
If you have not configured a [https://srcc.stanford.edu/farmshare2/connecting remote display] MATLAB will start in text-mode, but the MATLAB desktop is also supported.
-
  qsub matlab_example.script
 
-
 
-
Look at the job status:
 
-
 
-
  qstat
 
-
 
-
You should get output file like matlab_example.oXXXXX
 
-
<pre>Warning: No display specified.  You will not be able to display graphics on the screen.
 
-
Warning: No window system found.  Java option 'MWT' ignored
 
-
 
-
                            &lt; M A T L A B (R) &gt;
 
-
                  Copyright 1984-2011 The MathWorks, Inc.
 
-
                    R2011b (7.13.0.564) 64-bit (glnxa64)
 
-
                              August 13, 2011
 
-
 
-
 
-
To get started, type one of these: helpwin, helpdesk, or demo.
 
-
For product information, visit www.mathworks.com.
 
-
 
-
&gt; &gt; Hello World
 
-
</pre>
 
-
 
-
= example second matlab file run via qsub  =
 
-
 
-
Now we want to make sure we avoid AFS.
 
-
 
-
Here's our helloworld.m:
 
-
<source lang="m">disp('Hello World');
 
-
</source>
 
-
Here's a command to run that non-interactively:
 
-
 
-
  matlab -nodesktop < helloworld.m
 
-
 
-
We want to run this same command via the job scheduling system. Let's write a job script.
 
<source lang="sh">
<source lang="sh">
-
#!/bin/bash
+
ssh -X sunetid@rice.stanford.edu
-
 
+
-
#$ -N matlab_example
+
-
#$ -m bes
+
-
#$ -M chekh@stanford.edu
+
-
 
+
module load matlab
module load matlab
-
matlab -nodesktop < /farmshare/software/examples/matlab/helloworld.m
+
matlab &
</source>
</source>
-
Submit the script:
+
== Running MATLAB in Batch Mode ==
-
  cd /farmshare/user_data/$USER
+
If you have prepared MATLAB code as a program (<code>.m</code>) file you can run it non-interactively.
-
  qsub -cwd matlab_example.script
+
-
Look at the job status:
+
<source lang="sh">matlab -nodesktop < program.m</source>
-
  qstat
+
You can use this method to submit a MATLAB job to a compute node, and you can even include MATLAB code in-line in an <code>sbatch</code> script.
-
You should get output file like matlab_example.oXXXXX in your current directory
+
<source lang=sh>
-
<pre>Warning: No display specified.  You will not be able to display graphics on the screen.
+
-
Warning: No window system found.  Java option 'MWT' ignored
+
-
 
+
-
                            &lt; M A T L A B (R) &gt;
+
-
                  Copyright 1984-2011 The MathWorks, Inc.
+
-
                    R2011b (7.13.0.564) 64-bit (glnxa64)
+
-
                              August 13, 2011
+
-
 
+
-
+
-
To get started, type one of these: helpwin, helpdesk, or demo.
+
-
For product information, visit www.mathworks.com.
+
-
+
-
&gt;&gt; Hello World
+
-
</pre>
+
-
 
+
-
=PCT=
+
-
We have the Parallel Computing Toolbox, you can use that to parallelize your job across multiple cores in a single machine.
+
-
 
+
-
Here's how to write a job using MDCS: http://docs.uabgrid.uab.edu/wiki/MatLab_CLI#Parallel_MATLAB
+
-
 
+
-
You can use the "maxNumCompThreads" command (deprecated) to see how many parallel threads you can run. I get "24" on barley, or "8" on corn.
+
-
 
+
-
== simple PCT run  ==
+
-
 
+
-
<pre>matlab -nodesktop -r 'maxNumCompThreads'
+
-
 
+
-
&gt;&gt; matlabpool ( 'open', 'local', 8)
+
-
Starting matlabpool using the 'local' configuration ... connected to 8 labs.
+
-
&gt;&gt;
+
-
&gt;&gt; matlabpool size
+
-
 
+
-
ans =
+
-
 
+
-
    8
+
-
 
+
-
Then use 'parfor' instead of 'for'.
+
-
</pre>
+
-
matlabpool of size 0 and size 1 are effectively the same, except the latter uses a PCT toolbox license.
+
-
 
+
-
Here are some training slides and example code that I copied from http://www.osc.edu/~samsi/sc11edu/
+
-
 
+
-
*http://stanford.edu/~chekh/matlab.tar
+
-
 
+
-
 
+
-
== matlab with matlabpools on the barley ==
+
-
 
+
-
<source lang="m">
+
#!/bin/bash
#!/bin/bash
-
 
-
#$ -N matlabfft
 
-
#$ -S /bin/bash
 
-
#$ -pe shm 4
 
-
#$ -l mem_free=500M
 
-
#$ -cwd
 
-
 
-
hostname
 
-
 
-
echo ""
 
-
echo ""
 
-
echo ""
 
module load matlab
module load matlab
 +
matlab -nodesktop << EOF
 +
  % MATLAB code
 +
EOF
 +
</source>
-
matlab -nodesktop <<EOF
+
== Using MDCS ==
-
cluster = parcluster('local')
+
-
tmpdirforpool = tempname
+
-
mkdir(tmpdirforpool)
+
-
cluster.JobStorageLocation = tmpdirforpool
+
-
msg = sprintf('setting matlabpool to %s', getenv('NSLOTS'))
+
MATLAB Distributed Computing Server is supported, and you can submit jobs using up to 127 workers. To set up the cluster, load the <code>matlab</code> module, start MATLAB, and run <code>configCluster</code>. This only needs to be done once.
-
cluster.NumWorkers = str2num(getenv('NSLOTS'))
+
-
matlabpool(cluster)
+
Once the cluster has been configured, commands like <code>parcluster</code> should use cluster (rather than local) workers by default. You can get a handle to the cluster using the <code>parcluster</code> command, submit jobs using <code>batch</code> (which returns a handle to the job), and query job state and results using <code>State</code> and <code>fetchOuputs</code>.
-
cluster
+
<source lang="matlab">
-
 
+
c = parcluster;
-
a = ones(1000,1000)
+
j = c.batch(@pwd, 1, {}, 'Pool', 4);
-
 
+
j.State
-
disp('begin running parfor')
+
j.fetchOutputs{:}
-
parfor i = 1:10000
+
-
  b=ones./a
+
-
end
+
-
 
+
-
disp('done running parfor')
+
-
 
+
-
matlabpool close
+
-
EOF
+
</source>
</source>
 +
For a more detailed walkthrough see [[Media:Getting_Started_with_Serial_and_Parallel_MATLAB.pdf|Getting Started with Serial and Parallel MATLAB]].
-
 
+
Please note that, while multi-node jobs are supported, FarmShare does not have a fast interconnect, so code that requires a lot of communication or synchronization between workers may not fully realize any expected improvement in performance. You may want to restrict your MDCS jobs to a single node, or to 15 (or fewer) workers, when possible.
-
= tomlab =
+
-
We have a TOMLAB license. To start it up:
+
-
# launch matlab r2013a
+
-
# cd to /farmshare/software/non-free/MATLAB-R2013a/tomlab
+
-
# startup
+
-
 
+
-
----
+
-
 
+
-
Search the farmshare-discuss archives for posts about&nbsp;[https://mailman.stanford.edu/mailman/swish?query=Matlab&submit=Search+farmshare-discuss+%21&listname=farmshare-discuss&metaname=swishdefault&sort=unixdate Matlab].
+

Latest revision as of 16:46, 15 February 2018

MATLAB is a multi-paradigm numerical computing environment and programming language.

Getting Started

Run module avail to get a list of all software modules, or module spider to get a list of available versions of MATLAB.

module spider matlab       

--------------------------------------------------------------------------------------------------------------------------------
  matlab:
--------------------------------------------------------------------------------------------------------------------------------
    Description:
      A multi-paradigm numerical computing environment and programming language.

     Versions:
        matlab/r2016b
        matlab/r2017a

--------------------------------------------------------------------------------------------------------------------------------

Use module load to set up your environment, and then run matlab to start an interactive session.

module load matlab
matlab

If you have not configured a remote display MATLAB will start in text-mode, but the MATLAB desktop is also supported.

ssh -X sunetid@rice.stanford.edu
module load matlab
matlab &

Running MATLAB in Batch Mode

If you have prepared MATLAB code as a program (.m) file you can run it non-interactively.

matlab -nodesktop < program.m

You can use this method to submit a MATLAB job to a compute node, and you can even include MATLAB code in-line in an sbatch script.

#!/bin/bash

module load matlab
matlab -nodesktop << EOF
  % MATLAB code
EOF

Using MDCS

MATLAB Distributed Computing Server is supported, and you can submit jobs using up to 127 workers. To set up the cluster, load the matlab module, start MATLAB, and run configCluster. This only needs to be done once.

Once the cluster has been configured, commands like parcluster should use cluster (rather than local) workers by default. You can get a handle to the cluster using the parcluster command, submit jobs using batch (which returns a handle to the job), and query job state and results using State and fetchOuputs.

c = parcluster;
j = c.batch(@pwd, 1, {}, 'Pool', 4);
j.State
j.fetchOutputs{:}

For a more detailed walkthrough see Getting Started with Serial and Parallel MATLAB.

Please note that, while multi-node jobs are supported, FarmShare does not have a fast interconnect, so code that requires a lot of communication or synchronization between workers may not fully realize any expected improvement in performance. You may want to restrict your MDCS jobs to a single node, or to 15 (or fewer) workers, when possible.

Personal tools
Toolbox
LANGUAGES