PBS et matlab

De POLR
Révision datée du 12 juin 2020 à 09:46 par Sennevil (discussion | contributions) (→‎Exécution en lot d'une tâche Matlab)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Sauter à la navigation Sauter à la recherche

Exécution en lot d'une tâche Matlab

Il est possible de lancer l'exécution automatique d'un script lors du lancement de Matlab en utilisant la syntaxe suivante:

matlab -nojvm -nosplash -nodesktop -nodisplay -logfile <fichier_log>.log -r "try; run('<fichier_matlab>'); catch; end; quit " < /dev/null


Cette commande lancera Matlab et celui-ci exécutera automatiquement le code contenu dans le script <fichier_matlab>. Les messages résultant de l’exécution seront écrits dans le fichier <fichier_log>. L'utilisation < /dev/null n'est pas obligatoire mais empêche MATALB de faire des boucles d'erreurs à l'infini.

IMPORTANT : Pour le gestionnaire de licences (FLEXLM), l'utilisation de < /dev/null a pour conséquence de rendre de votre tâche Matlab interactive et inactive à ses yeux. Votre licence vous sera donc automatiquement retirée au bout de quatre heures, ce qui mettra fin à l'exécution de votre session Matlab.


Exemple:

matlab -nojvm -nosplash -nodesktop -nodisplay -logfile produire_anim.log -r "try; run('produire_anim.m'); catch; end; quit " < /dev/null


Grâce à cette approche, il devient alors facile de soumettre une ou plusieurs tâches Matlab pour exécution sur un nœud de calcul de la grappe mingan en utilisant un script PBS pour lancer le tout.

#!/bin/bash
###################################################
#
#Soumettre un ensemble de taches matlab sur un noeud de calcul
#
###################################################
#PBS -l nodes=1:ppn=5
#PBS -l mem=50gb
#PBS -N tache_matlab
#PBS -l walltime=05:00:00
#PBS -j oe

cd $PBS_O_WORKDIR
module load matlab2015b

#On lance 5 taches en arrière-plan (... &)
matlab -nojvm -nosplash -nodesktop -nodisplay -logfile produire_anim1.log -r "try; run('produire_anim1.m'); catch; end; quit" < /dev/null &
matlab -nojvm -nosplash -nodesktop -nodisplay -logfile produire_anim2.log -r "try; run('produire_anim2.m'); catch; end; quit" < /dev/null &
matlab -nojvm -nosplash -nodesktop -nodisplay -logfile produire_anim3.log -r "try; run('produire_anim3.m'); catch; end; quit" < /dev/null &
matlab -nojvm -nosplash -nodesktop -nodisplay -logfile produire_anim4.log -r "try; run('produire_anim4.m'); catch; end; quit" < /dev/null &
matlab -nojvm -nosplash -nodesktop -nodisplay -logfile produire_anim5.log -r "try; run('produire_anim5.m'); catch; end; quit" < /dev/null &

#On attend que toutes les taches se terminent
wait


Lorsqu'il y a des figures à imprimer via la commande print(nomFichier,'-dpng') ou imwrite dans les taches matlab, veuillez utiliser:

matlab -nodesktop  -logfile produire_anim1.log -r "try; run('produire_anim1.m'); catch; end; quit" < /dev/null 

Les figures doivent être lancés avec l'option 'visible' set à 'off' à l'intérieur de 'produire_anim1.m' hf=figure; set(hf,'visible','off')


NOTE

Lorsque la tâche que vous désirez soumettre via qsub utilise Matlab, vous devez vous assurer que vous n'avez pas une session Matlab déjà active sur un nœud, que ce soit une session interactive sur compute-0-2 ou compute-0-3 ou une tâche en lot sur un autre nœud de calcul. Cette restriction découle du fait que nous n'avons que 10 licences Matlab et que ces licences sont attribuées de la façon suivante:

  • une licence par utilisateur, par nœud de calcul ;
  • sur un même nœud, un utilisateur peut lancer plusieurs instances de Matlab en ne consommant qu'une seule licence .