DOCUMENTATION

Plus d'informations concernant ce logicuel ici : https://fr.mathworks.com/.

Pour utiliser ce logiciel, il faut charger le module correspondant à la version désirée :

module load matlab/r2021a

Calcul parallèle sur 1 nœud

L'exemple qui suit n'est valable que pour un calcul sur 1 seul nœud, en utilisant tous les cœurs du nœuds.

Voici un exemple de script montecarlo_par.m Matlab qui utilise la fonction parpool pour faire un calcul parallèle :

% local indique qu'on utilise la pool locale de processeur
% Peu importe le chiffre que vous allez mettre, on le modifiera dynamiquement avec le script SLURM
parpool('local',24);

% MonteCarlo simulations
disp('Starting ...')
tic;
iter = 100000;
sz   = 55;
a    = zeros(1, iter);
parfor (simNum = 1:iter, 6)
   a(simNum)=max(svd(rand(sz)))
end
toc;
% Ferme la pool locale de processeur
% Les processeurs resteront alloués sans rien faire si ce n'est pas fait
delete(gcp)
% Quitte Matlab
quit

Voici le script de soumission associé :

#!/bin/bash

#SBATCH -n 24
#SBATCH -N 1-1
#SBATCH -t 00:05:00
#SBATCH -o output_par.log
#SBATCH -e error_par.log
#SBATCH --constraint=matlab # Certains nœuds sont incompatibles avec la dernière version de matlab

module purge
module load slurm/slurm
module load matlab/r2021a

monscript=montecarlo_par.m
# On injecte dans notre script le nombre de processus à utiliser, en fonction des ressources réservées grâce à SLURM
sed -i "s/parpool('local',.*/parpool('local',$SLURM_CPUS_ON_NODE);/" $monscript

# On lance Matlab en ligne de commande
matlab -nodisplay -nosplash -r "run $monscript"

Calcul parallèle sur plusieurs nœuds

Cluster profile

La première chose à faire avant de lancer des calculs sur plusieurs nœuds est de créer un cluster profile dans Matlab. Ce profil permettra à Matlab de soumettre des jobs SLURM.

Pour se faire, dans l'onglet HOME de Matlab, cliquez sur Parallel puis Create and Manage Clusters

CreateCluster

Une nouvelle fenêtre va s'ouvrir. CLiquez su Add Cluster Profile puis Slurm

AddSlurmProfile

Vous pouvez renommer ce profil (vivement conseillé) : Clic droit sur le profil puis Rename. Enfin, vous pouvez modifier les options de ce profil : Clic droit sur le profil, puis Edit. Il n'y a que l'option Ressource arguments for job submission [...] à modifier obligatoirement, voici l'option correcte pour utiliser la partition public :

--ntasks=^N^ --cpus-per-task=^T^ --constraint=matlab

Options

Pour utiliser une partion grant ou pri :

--ntasks=^N^ --cpus-per-task=^T^ --constraint=matlab -A <votre_account> -p <partition_grant ou pri>

OptionsGrant

Vous pouvez également ajouter n'importe quelle option SLURM, notemment l'option -t hh:mm:ss.

Exemple de script Matlab tournant sur plusieurs nœuds

c=parcluster('PublicShort'); % On utilisera le profil nommé 'PublicShort'

% Le chiffre correspond au nombre de processeurs demandés
% Ne pas dépasser la limite imposée par la partition SLURM utilisée
% (96 dans public)
parpool(c,48);

% MonteCarlo simulations
disp('Starting ...')
tic;
iter    = 100000;
sz      = 55;
a       = zeros(1, iter);
parfor (simNum = 1:iter, 6)
        a(simNum)=max(svd(rand(sz)))
end
toc;
% Ferme la pool locale de processeur
% Les processeurs resteront alloués sans rien faire si ce n'est pas fait
delete(gcp)
% Quitte Matlab
quit

Lancement du job multi-nœud

Vous pouvez lancer le job directement depuis un terminal avec cette commande :

matlab -nodisplay -nosplash -r "run montecarlo_par.m"

Matlab se chargera de soumettre le job pour SLURM. Attention cependant, il faut rester connecter jusqu'à ce que le job soit terminé. Il est préféable de lancer vos jobs dans un tmux ou un screen afin de pouvoir faire autre chose ou quitter sereinement votre session.

Vous pouvez également lancer vos scripts via la GUI de Matlab, mais la remarque ci-dessus s'applique également et est encore plus contraignante car il n'y a pas de possibilité d'utiliser un tmux ou un screen.


VERSIONS ET SCRIPTS D'INSTALLATION


TAGS