MATLAB DCS

From UABgrid Documentation
(Difference between revisions)
Jump to: navigation, search
(updated simple matlab test instructions)
Line 8: Line 8:
 
Set up your environment with the command:
 
Set up your environment with the command:
 
<pre>
 
<pre>
module load mathworks/matlab
+
$ module load mathworks/matlab
 
</pre>
 
</pre>
 
As a test, you can run MatLab and access your license server with
 
As a test, you can run MatLab and access your license server with
 
<pre>
 
<pre>
matlab -c port@license-server -nodesktop -nojvm -r "rand, exit"
+
$ matlab -c port@license-server -nodesktop -nojvm -r "rand, exit"
 
</pre>
 
</pre>
 
For example:
 
For example:
 
<pre>
 
<pre>
module load mathworks/matlab
+
$ module load mathworks/matlab
matlab -c 27000@licserver.uab.edu -nodesktop -nojvm -r "rand, exit"
+
$ matlab -c 27000@licserver.uab.edu -nodesktop -nojvm -r "rand, exit"
  
 
                         < M A T L A B (R) >
 
                         < M A T L A B (R) >
Line 58: Line 58:
 
Then submit the script to the scheduler with
 
Then submit the script to the scheduler with
 
<pre>
 
<pre>
qsub matlabtest.qsub
+
$ qsub matlabtest.qsub
 
</pre>
 
</pre>
  
 
Check on it with qstat.
 
Check on it with qstat.
 
<pre>
 
<pre>
qstat -u $USER
+
$ qstat -u $USER
 
</pre>
 
</pre>
 +
 +
=== Distributed Matlab ===
 +
These instructions provide an example of how to create and submit a distributed (serial) Matlab job on cheaha. Distributed and parallel Matlab jobs require two separate licenses:
 +
* Your own client license that includes the Parallel Computing Toolbox
 +
* The Cheaha 128 node Distributed Computing license
 +
 +
The client license will only be needed for as long as it takes Matlab to start the job on the compute nodes (unless you keep the client open, for example using "waitForState(job)" in your Matlab script).
 +
 +
The instructions are a work in progress, so please contact Research Computing support with any questions or corrections.
 +
 +
First, create the working directory for the job
 +
<pre>
 +
$ mkdir -p ~/jobs/matlab/distrib01/output
 +
$ cd ~/jobs/matlab/distrib01
 +
 +
</pre>
 +
 +
Next, create a simple 2 task distributed Matlab script called "distrib.m" make sure to change:
 +
* email to your email address
 +
* time_limit to an appropriate soft runtime limit
 +
* hard_time_limit to the maximum wall time for your job
 +
* mem_free to the maximum memory needed for each task
 +
* remote and local DataLocation to point to your working directory
 +
 +
Don't make any changes to the section labeled "Configure the scheduler"
 +
<pre>
 +
% Always set these variables
 +
email          = 'YOUR_EMAIL_ADDRESS';
 +
time_limit      = '00:05:00';
 +
hard_time_limit = '00:07:00';
 +
mem_free        = '1G';
 +
clusterHost    = 'cheaha.uabgrid.uab.edu';
 +
remoteDataLocation = '/home/USERNAME/jobs/matlab/distrib01';
 +
localDataLocation  = '/home/USERNAME/jobs/matlab/distrib01/output';
 +
 +
% Configure the scheduler
 +
sched = findResource('scheduler', 'type', 'generic');
 +
set(sched, 'DataLocation'      , localDataLocation);
 +
set(sched, 'ClusterMatlabRoot', '/share/apps/mathworks/matlab');
 +
set(sched, 'HasSharedFilesystem',  true              );
 +
set(sched, 'ClusterOsType'      , 'unix'            );
 +
set(sched, 'SubmitFcn', {@sgeSubmitFcn, remoteDataLocation, hard_time_limit, time_limit, mem_free, email});
 +
set(sched, 'DestroyJobFcn', {@sgeDestroyJob});
 +
set(sched, 'GetJobStateFcn', {@sgeGetJobState});
 +
get(sched)
 +
job = createJob(sched);
 +
 +
% start of user specific commands
 +
createTask(job, @rand, 1, {3,3});
 +
createTask(job, @rand, 2, {3,3});
 +
 +
submit(job)
 +
</pre>
 +
 +
Running the Matlab script will submit 2 SGE jobs, on for each task. The Parallel Computing Toolbox requires Java VM, so notice that for this job we do not include the "-nojvm" switch!
 +
<pre>
 +
$ module load mathworks/matlab
 +
$ matlab -c port@license-server -nodisplay < distrib.m
 +
</pre>
 +
 +
Check qstat to see that the scheduler now has 2 jobs running, one for each task
 +
<pre>
 +
$ qstat -u $USER
 +
 +
ob-ID  prior  name      user        state submit/start at    queue                          slots ja-task-ID
 +
-----------------------------------------------------------------------------------------------------------------
 +
110839 0.50167 Job1.1    jdoe        r    03/10/2010 16:32:37 all.q@compute-0-12.local          1
 +
110840 0.50083 Job1.2    jdoe        r    03/10/2010 16:32:37 all.q@compute-0-12.local          1
 +
</pre>
 +
 +
The job output can be found in the "output" directory

Revision as of 17:47, 10 March 2010

Stub

Steps to run Matlab

Simple Matlab Test

These instructions NOT use the distributed licenses available on cheaha and will be restricted to a single cpu. See the next section for an example using the distributed computing license.

Set up your environment with the command:

$ module load mathworks/matlab

As a test, you can run MatLab and access your license server with

$ matlab -c port@license-server -nodesktop -nojvm -r "rand, exit"

For example:

$ module load mathworks/matlab
$ matlab -c 27000@licserver.uab.edu -nodesktop -nojvm -r "rand, exit"

                        < M A T L A B (R) >
                Copyright 1984-2009 The MathWorks, Inc.
              Version 7.9.0.529 (R2009b) 64-bit (glnxa64)
                          August 12, 2009
 
  To get started, type one of these: helpwin, helpdesk, or demo.
  For product information, visit www.mathworks.com.

ans =

    0.8147

This will start matlab without a graphical display and without Java support. This is good just to verify things work, but do not run any significant computations on the Cheaha head node.

MatLab computational work needs to be run on the compute nodes by submitting a job submission script to the SGE scheduler

You can create a simple single cpu SGE script with (script name "matlabtest.qsub"):

#!/bin/bash
#$ -S /bin/bash
#$ -cwd
#
#$ -N testMatLab
#$ -l h_rt=00:10:00,s_rt=00:08:00
#$ -j y
#
#$ -M YOUR_EMAIL_ADDRESS
#$ -m eas
#
module load mathworks/matlab
#$ -V
 
matlab -c port@license-server -nodisplay -nojvm < matlab-script

Then submit the script to the scheduler with

$ qsub matlabtest.qsub

Check on it with qstat.

$ qstat -u $USER

Distributed Matlab

These instructions provide an example of how to create and submit a distributed (serial) Matlab job on cheaha. Distributed and parallel Matlab jobs require two separate licenses:

* Your own client license that includes the Parallel Computing Toolbox
* The Cheaha 128 node Distributed Computing license

The client license will only be needed for as long as it takes Matlab to start the job on the compute nodes (unless you keep the client open, for example using "waitForState(job)" in your Matlab script).

The instructions are a work in progress, so please contact Research Computing support with any questions or corrections.

First, create the working directory for the job

$ mkdir -p ~/jobs/matlab/distrib01/output
$ cd ~/jobs/matlab/distrib01

Next, create a simple 2 task distributed Matlab script called "distrib.m" make sure to change:

* email to your email address
* time_limit to an appropriate soft runtime limit
* hard_time_limit to the maximum wall time for your job
* mem_free to the maximum memory needed for each task
* remote and local DataLocation to point to your working directory

Don't make any changes to the section labeled "Configure the scheduler"

% Always set these variables
email           = 'YOUR_EMAIL_ADDRESS';
time_limit      = '00:05:00';
hard_time_limit = '00:07:00';
mem_free        = '1G';
clusterHost     = 'cheaha.uabgrid.uab.edu';
remoteDataLocation = '/home/USERNAME/jobs/matlab/distrib01';
localDataLocation  = '/home/USERNAME/jobs/matlab/distrib01/output';

% Configure the scheduler
sched = findResource('scheduler', 'type', 'generic');
set(sched, 'DataLocation'       , localDataLocation);
set(sched, 'ClusterMatlabRoot', '/share/apps/mathworks/matlab');
set(sched, 'HasSharedFilesystem',  true              );
set(sched, 'ClusterOsType'      , 'unix'             );
set(sched, 'SubmitFcn', {@sgeSubmitFcn, remoteDataLocation, hard_time_limit, time_limit, mem_free, email});
set(sched, 'DestroyJobFcn', {@sgeDestroyJob});
set(sched, 'GetJobStateFcn', {@sgeGetJobState});
get(sched)
job = createJob(sched);

% start of user specific commands
createTask(job, @rand, 1, {3,3});
createTask(job, @rand, 2, {3,3});

submit(job)

Running the Matlab script will submit 2 SGE jobs, on for each task. The Parallel Computing Toolbox requires Java VM, so notice that for this job we do not include the "-nojvm" switch!

$ module load mathworks/matlab
$ matlab -c port@license-server -nodisplay < distrib.m

Check qstat to see that the scheduler now has 2 jobs running, one for each task

$ qstat -u $USER

ob-ID  prior   name       user         state submit/start at     queue                          slots ja-task-ID
-----------------------------------------------------------------------------------------------------------------
 110839 0.50167 Job1.1     jdoe         r     03/10/2010 16:32:37 all.q@compute-0-12.local           1
 110840 0.50083 Job1.2     jdoe         r     03/10/2010 16:32:37 all.q@compute-0-12.local           1

The job output can be found in the "output" directory

Personal tools
Namespaces

Variants
Actions
Navigation
Toolbox