PBS et matlab

De POLR
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>.


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




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 .