You can also run matlab jobs via scripts like other software.
Create a file with the matlab commands and then create a shell script to submit the job.
It would look like
#!/bin/bash # submit via 'bsub < run.serial' #BSUB -q matlab #BSUB -J test #BSUB -o test.stdout #BSUB -e test.stderr matlab -no display < my_code.m > /dev/null
Is now the default matlab version, just change the paths in scripts below — Meij, Henk 2013/03/14 14:57
So, now that 2010b is the version of Matlab and we're using Lava scheduler we need to integrate the two.
In the example below, the code waits for the results. Don't do that when submitting jobs, it is just for debugging purposes.
This old way still works for distributed jobs:
% distributed matlab jobs % start 'matlab -nodisplay', issue the command 'Simple' % set up the scheduler and matlab worker environment sched = findResource('scheduler', 'type', 'generic'); set(sched, 'HasSharedFilesystem', true); set(sched, 'ClusterMatlabRoot', '/share/apps/matlab/2010b') set(sched, 'SubmitFcn', @lsfSimpleSubmitFcn) % specify location for worker output set(sched, 'DataLocation', '/home/hmeij/hp/matlab') % create job and assign tasks to be done j = createJob(sched); T = createTask(j, @rand, 1, {{3,3} {3,3} {3,3} {3,3} {3,3}}); % submit job, wait for jobs to finish, fetch output submit(j) % WARNING: this may hang if the workers are busy! waitForState(j) results = getAllOutputArguments(j); results{1:5} % better to do it like Simple2.m
After you submit the job, you can exit matlab.
% distributed matlab jobs % start 'matlab -nodisplay', issue the command 'Simple2' % set up the scheduler and matlab worker environment sched = findResource('scheduler', 'type', 'generic'); set(sched, 'HasSharedFilesystem', true); set(sched, 'ClusterMatlabRoot', '/share/apps/matlab/2010b') set(sched, 'SubmitFcn', @lsfSimpleSubmitFcn) % specify location for worker output set(sched, 'DataLocation', '/home/hmeij/hp/matlab') % create job and assign tasks to be done j = createJob(sched); T = createTask(j, @rand, 1, {{3,3} {3,3} {3,3} {3,3} {3,3}}); % submit job, then exit matlab interactive session submit(j) get(sched)
Slightly different syntax. Adjust your number of workers values based on some benchmarking, not always do the most workers finish a job in the shortest amount of time.
% parallel matlab jobs % start 'matlab -nodisplay', issue the command 'Simplep' % set up the scheduler and matlab worker environment sched = findResource('scheduler', 'type', 'generic') set(sched, 'HasSharedFilesystem', true); set(sched, 'ClusterMatlabRoot', '/share/apps/matlab/2010b') set(sched, 'ParallelSubmitFcn', @lsfParallelSubmitFcn) % specify location for worker output set(sched, 'DataLocation', '/home/hmeij/hp/matlab') pj = createParallelJob(sched); set(pj, 'MaximumNumberOfWorkers', 8) set(pj, 'MinimumNumberOfWorkers', 8) T = createTask(pj, @rand, 1, {{300,300}}); % submit job, wait to finish, get status jobs, gather results submit(pj) get(sched) % you can now exit matlab % at system prompt type 'bjobs'