Matlab

Matlab (version academic) a fait l'objet d'une opération de mutualisation entre le Pôle Calcul Scientifique et 5 laboratoires (LISIC, LMPA, LPCA, LOG et UDSMM) de l'université. Vous pouvez l'utiliser depuis vos postes clients (via le serveur de jetons) ou directement depuis la plate-forme de calcul.
Les travaux de développement et premiers tests sont à privilégier sur vos postes clients avant de procéder à la migration de vos codes sur la plate-forme et d'y lancer vos traitements.

 

1. Installation de Matlab sur votre poste de travail

Si votre laboratoire a participé à la politique de mutualisation logicielle, vous pouvez installer Matlab sur vos PC de laboratoire. Il vous suffit de récupérer les archives et les instructions d'installation dans la zone de Téléchargement du Pôle de Calcul (avec vos identifiants calculco). Des contrôles ont été mis en place et seuls les membres des entités autorisées peuvent y accéder.

Liste de diffusion [matlab-infos]:

Pour rester informé sur les mises à jour de Matlab ainsi que sur les éventuelles opérations de maintenance du serveur de jetons Matlab, il est recommandé de s'inscrire à la liste de diffusion dédiée. Cliquer sur le lien suivant : inscription à [matlab-infos] (ou envoyer un mail à Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser. dont le sujet est: «SUBSCRIBE matlab-infos»). 

2. Ressources Matlab disponibles

Nous disposons actuellement de la version R2020a avec :

  

3. Utilisation depuis la plate-forme

new (avril 2017):  la mise en place de lmod (module) sur la plateforme entraîne l'obligation de charger le module matlab préalablement à tout calcul. Le tutorial, ainsi que tous les scripts ci -dessous ont été modifiés en conséquence.

3.1. mode interactif

Ce mode est bien entendu à éviter (bloque des ressources matérielles), mais peut être utile pour effectuer rapidement quelques tests de scripts matlab.

  • Lancer une session interactive sur un des nœuds:
(calculco) oarsub -I 
  • charger le module matlab:
(calculco) ml matlab 
  • Lancer matlab en mode texte
(orval0?) matlab -nodesktop -nodisplay -nosplash
< M A T L A B (R) >
Copyright 1984-2016 The MathWorks, Inc.
R2016b (9.1.0.441655) 64-bit (glnxa64)
September 7, 2016
>>
  • idem en spécifiant des ressources ( 8 cœurs sur un seul cpu ):
(calculco) oarsub -I -l /nodes=1/cpu=1/core=8
  •  Lancer matlab en mode texte:
(orval0?) matlab -nodesktop -nodisplay -nosplash
< M A T L A B (R) >
Copyright 1984-2016 The MathWorks, Inc.
R2016b (9.1.0.441655) 64-bit (glnxa64)
September 7, 2016
>>feature('numcores')
MATLAB detected: 28 physical cores.
MATLAB detected: 28 logical cores.
MATLAB was assigned: 8 logical cores by the OS.
MATLAB is using: 8 logical cores.
MATLAB is not using all logical cores because Operating System restricted the number of cores to: 8

Remarque (astuce): comme indiqué plus haut, cette méthode est à éviter et ce, d'autant plus si vous réservez plusieurs cœurs. Néanmoins,  la consultation préalable de la charge du cluster  via l'onglet monitoring peut vous donner une bonne indication sur le fait que vous allez être «gênant » (ou pas).  

3.2. mode passif (batch)

En pratique, la bonne méthode est de : 

  • développer vos scripts de matlab sur vos PC personnels,
  • transférer les fichiers (scripts et éventuels fichiers de données) sur le frontal calculco en suivant une des quatre méthodes (scp, rsync, sshfs et git ) décrites dans l'article accéder à la plate-forme.
  • lancer les calculs via un script de lancement oar  (commande oarsub -S /path/script de lancement) 

3.2.1. batch simple (1)

Au plus simple,  le lancement d'un script pourra se faire comme suit: 

 oarsub -l /core=1,walltime=0:05 "source /nfs/opt/env/env.sh; ml matlab; matlab -nodisplay -nodesktop < hello.m > hello.out"

Rq: Réservation d'un seul cœur, pour une durée de 5 minutes. Noter les redirections  < input.m > output et les double quote qui encadrent l'ensemble de la commande.

3.2.2. batch simple (2)

Un peu plus compliqué,  avec un passage d'argument au script matlab: 

 oarsub -l /core=1,walltime=0:05 -O gc.%jobid%.stdout -E gc.%jobid%.stder "source /nfs/opt/env/env.sh; ml matlab; matlab -nodisplay -nodesktop -nojvm -batch 'testgradientconj(1000,1e-5,800);exit'" 

fichiers source:  

3.2.3. batchs avec script de lancement

L'idéal est tout de même de créer un script de lancement de vos programmes matlab. Voici cinq exemples de programmes matlab avec leur script de lancement associé que vous pourrez adapter à votre convenance.

  • certains  illustrent quelques fonctionnalités de la Parallel Computing Toolbox (parfor, spmd)
  • ils illustrent les quelques ajustements nécessaires à l'usage de Matlab en mode batch: les plots  doivent se faire dans des fichiers (cf. exemple2) et merci d'insérer la commande quit à la fin de chaque script matlab pour libérer proprement le(s) jeton(s)  que votre programme détient, afin qu'il(s) puisse(nt) être utiliser par d'autres usagers.
  • tous reprennent le concept décrit dans l'article accéder à la plate-forme, à savoir: travailler dans l'espace local de chaque nœud de calcul ( /scratch ). Une fois exécuté, les résultats sont recopiés dans votre espace de travail (/nfs/home/votreLabo/votreIdentifiant) .
  • les scripts matlab_ex(?)_launch.oar doivent être exécutables: après leur téléchargement, exécutez la commande: chmod u+x matlab*.oar
3.2.3.1. exemple 1 : multithreading

La Parallel Computing Toolbox ne fait pas « tout » : de nombreuses fonctions (built-in) Matlab sont nativement multithreadées. Un exemple de résolution de système linéraire avec deux d'entre elles : mldivide et linsolve

 (calculco) oarsub -S ./matlab_ex1_launch.oar

fichiers source:  

3.2.3.2. exemple 2 : parfor

Illustration d'une fonctionnalité de la Parallel Computing Toolbox, une boucle « for parallèle» (instruction parfor)

 (calculco) oarsub -S ./matlab_ex2_launch.oar

fichiers source:  

3.2.3.3. exemple 3 : figures 

Petit calcul d'algèbre linéaire effectué en séquentiel puis avec un nombre de cœurs croissant (autre exemple de parfor )

En mode batch et sans «display», les figures sont créées dans des fichiers, l'exemple ci-dessous utilise le driver «png». Pour spécifier les tailles, les divers ( eps, jpeg, pdf, ) des figures, voici deux pointeurs (doc officielles): print figure et size-resolution

(calculco)  oarsub -S ./matlab_ex3_launch.oar

fichiers source:  

figure obtenue:

matlab fig ex3

3.2.3.4. exemple 4 : Simple Program Multiple Data 

Ilustration d'une autre  fonctionnalité de la Parallel Computing Toolbox:  spmd  est en quelque sorte une implémentation de MPI (très simplifiée) avec Matlab.

le script matlab calcul une appromation de pi par la méthode des trapèzes:

matlab fig ex4

 (calculco) oarsub -S ./matlab_ex4_launch.oar

fichiers source:  

3.2.3.5. exemple 5 : Checkpoint

Cet exemple évoque un point essentiel de l'usage de la plateforme. Pour des calculs extrêmement longs (donc usage de la file de calcul besteffort), prévoir des checkpoint est important ...pour ne pas avoir à repartir de zéro ( pannes, arrêt du job car la file besteffort est de priorité inférieure..)

Le script matlab effectue le calcul d'une autre approxiamation de pi par la méthode de Leibniz (série alternée). Son exécution est arbitrairement ( et inutilement!) ralenti par des instructions pause afin de simuler un job long. En cas d'arrêt, il reprend les calculs au dernier checkpoint et finit très rapidement le calcul (les pauses sont retirées). 

Il peut être lancé dans une session matlab ( en interactif sur un nœud ou simplement sur votre poste de travail) puis arrêter par CTRL+C 

 (laptop-perso Matlab) >> pi_checkppoint_ex5 
Operation terminated bye user during pi_checkpoint_ex5 # arrêt par CTRL+C

>> pi_checkpoint_ex5
reprise du calcul apres arret...
fin

En mode batch:

(calculco) oarsub -S ./matlab_ex5_nfs_launch.oar
...
OAR_JOB_ID=1234

L' arrêt brutal pourra être simulé avec la commande: 

(calculco) oardel 1234  

reprise : 

(calculco) oarsub -S ./matlab_ex5_nfs_launch.oar  

fichiers source:  

Note:  la relance du script sera un peu plus compliqué  avec le «launcher»  matlab_ex5_scratch_launch.oar car il faudra récupérer les données sur l'espace  /scratch/orval0X/votreLabo/votreIdentifiant/pi_checkpoint.1234/ avant de le relancer.

 

3.3. compilation de scripts matlab

Un script matlab peut être compilé:

(calculco) ml matlab
(calculco) mcc -mv myprogram.m

puis exécuter sur un nœud, après avoir chargé le module Matlab Component Runtime [2]:

(orval) ml matlab/MCR_2020b        
(orval) ./myprogram
   

[1]: doit correspondre avec la version de Matlab avec laquelle le programme a été compilé (cf. site MathWorks)

3.4. FAQ remarques: OAR, jetons ...

Tous les scripts oar des exemples contiennent des instructions oarsub concernant les réservations de ressources nécessaires au lancement de vos programmes. Certaines peuvent paraître obscures voire redondantes. Certains pourraient dire : «ça marche sans!?» . Oui, mais pas tout le temps. Voici quelques exemples:

3.4.1. option -l /nodes=1 ?

Question: quelle est la différences entre les deux instructions suivantes? :

  • -l /nodes=1/core=20
  • -l /core=20

Réponse: tous les nœuds ont entre 28 et 32 cœurs. Pendant les périodes «creuses», il n'y a aucune différence dans la mesure où votre script sera lancé sur un seul nœud . Mais en période chargée, il va être lancé «à cheval» sur deux nœuds (ou plus) 

  • vous monopolisez (inutilement) des ressources que vous ne pouvez pas utiliser (les toolbox actuellement installées ne permettent pas de lancer un calcul parallèle sur plusieurs machines) 
  • probablement pire: si votre script matlab contient explicitement -par exemple- l'instruction parpool(20) (cf. Parallel Computing Toolbox), il va se planter car le nœud qui aura la main sur le processus matlab n'aura pas les 20 cœurs requis.  

3.4.2. option -t token:matlab=1 ?

Question: quel est l'intérêt de l'inclure dans mes réservations ?

Réponse: Si le nombre maximum de jetons en cours d'utilisation est atteint, le job sera alors mis en "Waiting" est sera lancé lorsque les jetons réclamés seront libérés. C'est le pendant de la réservation matérielle.
Ainsi le script s'exécutera si et seulement l'ensemble des ressources requis est bien disponible (matérielles + logicielles).
Si vous omettez d'inclure l'option, votre job passera néanmoins normalement si les jetons sont disponibles, sinon il "plantera" directement.

D'autres token ont été définis pour permettre des "réservations propres", ils concernent les toolboxes qui sont le plus susceptibles d'être utilisées en mode batch. Les voici référencés ci-après, leurs noms différent parfois du nom de la toolbox telle que vous la connaissez. Il s'agit en fait des noms de licence fournis par Matworks !!

-t token:Distrib_Computing_Toolbox=1 (pour la Parallel Computing Toolbox).
-t token:Image_Toolbox=1 (pour l'Image Processing Toolbox).
-t token:Optimization_Toolbox=1 (pour l'Optimization Toolbox).
-t token:Statistics_Toolbox=1 (pour la Statisitics and Machine Learning Toolbox).