MATLAB¶
MATLAB GUI¶
OnDemand features a MATLAB application using containerised builds of MATLAB including a number of popular toolboxes.
Toolboxes¶
Toolboxes and addons included:
* Image_Processing_Toolbox
* Mapping_Toolbox Optimization_Toolbox
* Parallel_Computing_Toolbox
* Signal_Processing_Toolbox
* Statistics_and_Machine_Learning_Toolbox
* Wavelet_Toolbox
* MATLAB_Compiler
* MATLAB_Compiler_SDK
* Deep_Learning_Toolbox
* Computer_Vision_Toolbox
* Simulink
* DSP_System_Toolbox
* Sensor_Fusion_and_Tracking_Toolbox
* Image_Acquisition_Toolbox
* Navigation_Toolbox
Hardware-accelerated display¶
If your MATLAB work involves rendering/visualisation, you may benefit from using OpenGL 3D hardware acceleration for display.
When launching the OOD app, make sure to tick the Request GPU
and 3D hardware-accelerated display
checkbox.
To verify from within MATLAB, enter: rendererinfo()
. The Renderer should list an NVIDIA model; If this is 'llvmpipe', you are using software rendering instead.
Commandline MATLAB¶
Commandline matlab
is available by default. Additional versions will be made available via module
going forward.
via SLURM¶
Different containerised builds of MATLAB are available in /opt/apptainer_img/ folder:
Terminal
/opt/apptainer_img/matlab-r2018a-GL.sif
/opt/apptainer_img/matlab-r2023b-GL.sif
/opt/apptainer_img/matlab-r2023b.sif
/opt/apptainer_img/matlab-r2024a-GL.sif
/opt/apptainer_img/matlab-r2024b-GL.1.sif
/opt/apptainer_img/matlab-r2024b-GL.sif -> matlab-r2024b-u4-GL.sif
/opt/apptainer_img/matlab-r2024b-u4-GL.sif
Start a new slurm interactive job on the cpu node:
Terminal
[userxyz@aoraki-login ~]$ srun --ntasks=1 --partition=aoraki --cpus-per-task=2 --time=1-01:00 --mem=20G --pty --x11=all /bin/bash
[userxyz@rtis-hpc-r01 ~]$ apptainer shell --bind "$(pwd)":/opt/workspace,/weka/rtis/userxyz/tmp:/tmp --pwd /opt/workspace /opt/apptainer_img/matlab-r2024a-GL.sif
Apptainer> export MLM_LICENSE_FILE=27001@slo-licence-svr.registry.otago.ac.nz
Start matlab in gui mode (ssh connection to aoraki-login node has to have "-X
" or "-Y
" to enable X11 forwarding, and srun`` command has to have "
--x11=all`":
Terminal
Apptainer> matlab
Start matlab in non-gui mode:
Terminal
Apptainer> matlab -nodesktop
< M A T L A B (R) >
Copyright 1984-2024 The MathWorks, Inc.
R2024a (24.1.0.2537033) 64-bit (glnxa64)
February 21, 2024
To get started, type doc.
For product information, visit www.mathworks.com.
>>
To run a matlab script:
Terminal
Apptainer> matlab -nodisplay < MATLAB_job.m
Start a new slurm interactive job on the gpu node:
Terminal
[userxyz@aoraki-login ~]$ srun --ntasks=1 --partition=aoraki_gpu_H100 --nodelist=aoraki30 --cpus-per-task=1 --time=1-01:00 --gres=gpu:1 --mem=20G --pty --x11=all /bin/bash
[userxyz@rtis-hpc-r30 ~]$ nvidia-smi
Wed Mar 5 12:19:20 2025
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 555.42.06 Driver Version: 555.42.06 CUDA Version: 12.5 |
|-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA H100 NVL Off | 00000000:61:00.0 Off | 0 |
| N/A 25C P0 60W / 400W | 1MiB / 95830MiB | 0% Default |
| | | Disabled |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| No running processes found |
+-----------------------------------------------------------------------------------------+
[userxyz@rtis-hpc-r30 ~]$ module load cuda/11.8
[userxyz@rtis-hpc-r30 ~]$ apptainer shell --nv --bind "$(pwd)":/opt/workspace,/weka/rtis/userxyz/tmp:/tmp --pwd /opt/workspace /opt/apptainer_img/matlab-r2024a-GL.sif
Apptainer> export MLM_LICENSE_FILE=27001@slo-licence-svr.registry.otago.ac.nz
Apptainer> matlab -nodesktop
< M A T L A B (R) >
Copyright 1984-2024 The MathWorks, Inc.
R2024a (24.1.0.2537033) 64-bit (glnxa64)
February 21, 2024
To get started, type doc.
For product information, visit www.mathworks.com.
>> gpuDevice
ans =
CUDADevice with properties:
Name: 'NVIDIA H100 NVL'
Index: 1
ComputeCapability: '9.0'
SupportsDouble: 1
GraphicsDriverVersion: '555.42.06'
DriverModel: 'N/A'
ToolkitVersion: 12.2000
MaxThreadsPerBlock: 1024
MaxShmemPerBlock: 49152 (49.15 KB)
MaxThreadBlockSize: [1024 1024 64]
MaxGridSize: [2.1475e+09 65535 65535]
SIMDWidth: 32
TotalMemory: 99989127168 (99.99 GB)
AvailableMemory: 99438559232 (99.44 GB)
CachePolicy: 'balanced'
MultiprocessorCount: 132
ClockRateKHz: 1785000
ComputeMode: 'Default'
GPUOverlapsTransfers: 1
KernelExecutionTimeout: 0
CanMapHostMemory: 1
DeviceSupported: 1
DeviceAvailable: 1
DeviceSelected: 1
>> gpuDeviceTable
ans =
1x5 table
Index Name ComputeCapability DeviceAvailable DeviceSelected
_____ _________________ _________________ _______________ ______________
1 "NVIDIA H100 NVL" "9.0" true true
>> rendererinfo()
ans =
struct with fields:
GraphicsRenderer: 'OpenGL Software'
Vendor: 'Mesa/X.org'
Version: '4.5 (Compatibility Profile) Mesa 22.3.6'
RendererDevice: 'llvmpipe (LLVM 15.0.6, 256 bits)'
Details: [1x1 struct]
Submit a slurm batch job:
Terminal
[userxyz@aoraki-login]$ cat /projects/userxyz/matlab.sh
#!/bin/bash
#SBATCH --job-name="matlab-xyz" # job name
#SBATCH --partition=aoraki # partition to which job should be submitted aoraki_gpu...
##SBATCH --nodelist=aoraki15 # optional node
##SBATCH --gres=gpu:1 # optional gpu if running a gpu job on the gpu partition
#SBATCH --nodes=1 # node count
#SBATCH --ntasks=2 # total number of tasks across all nodes
#SBATCH --cpus-per-task=1 # cpu-cores per task
#SBATCH --mem=20G # total memory per node
#SBATCH --time=7-00:00 # wall time DD-HH:MM
##SBATCH --auks=yes # optional if using HCS
##SBATCH --output=/projects/.../userxyz/%x/%x_%j_%a.out # optional output folder
#SBATCH --mail-user userxyz@otago.ac.nz # optional email
#SBATCH --mail-type BEGIN
#SBATCH --mail-type END
#SBATCH --mail-type FAIL
echo "Script start"
## Export matlab licence
export MLM_LICENSE_FILE=27001@slo-licence-svr.registry.otago.ac.nz
## GPU job
## apptainer exec --nv --bind "$(pwd)":/opt/workspace,/weka/rtis/userxyz/tmp:/tmp --pwd /opt/workspace /opt/apptainer_img/matlab-r2024a-GL.sif matlab -nodisplay -nodesktop < MATLAB_job.m
## CPU job
apptainer exec --bind "$(pwd)":/opt/workspace,/weka/rtis/userxyz/tmp:/tmp --pwd /opt/workspace /opt/apptainer_img/matlab-r2024a-GL.sif matlab -nodisplay -nodesktop < MATLAB_job.m
echo "Script end"
Submit a slurm array batch job:
Terminal
[userxyz@aoraki-login]$ cat /projects/userxyz/matlab-array.sh
#!/bin/bash
#SBATCH --job-name="matlab-array # job name
#SBATCH --partition=aoraki # partition to which job should be submitted aoraki_gpu...
##SBATCH --nodelist=aoraki15 # optional node
##SBATCH --gres=gpu:1 # optional gpu if running a gpu job on the gpu partition
#SBATCH --nodes=1 # node count
#SBATCH --ntasks=1 # total number of tasks across all nodes
#SBATCH --cpus-per-task=1 # cpu-cores per task
#SBATCH --mem=20G # total memory per node
#SBATCH --array=1-8 # run 8 array jobs
#SBATCH --time=0-01:00 # wall time DD-HH:MM
##SBATCH --auks=yes # optional if using HCS
##SBATCH --output=/projects/.../userxyz/%x/%x_%j_%a.out # optional output folder
#SBATCH --mail-user userxyz@otago.ac.nz # optional email
#SBATCH --mail-type BEGIN
#SBATCH --mail-type END
#SBATCH --mail-type FAIL
echo "Script start"
## Export matlab licence
export MLM_LICENSE_FILE=27001@slo-licence-svr.registry.otago.ac.nz
## GPU job
## apptainer exec --nv --bind "$(pwd)":/opt/workspace --pwd /opt/workspace /opt/apptainer_img/matlab-r2024a-GL.sif matlab -nodisplay -nodesktop -r "process_input(${SLURM_ARRAY_TASK_ID}); exit;"
## CPU job
apptainer exec --bind "$(pwd)":/opt/workspace --pwd /opt/workspace /opt/apptainer_img/matlab-r2024a-GL.sif matlab -nodisplay -nodesktop -r "process_input(${SLURM_ARRAY_TASK_ID}); exit;"
echo "Script end"