Différences entre versions de « PBS et matlab »

De POLR
Sauter à la navigation Sauter à la recherche
 
(7 versions intermédiaires par 3 utilisateurs non affichées)
Ligne 5 : Ligne 5 :
 
Il est possible de lancer l'exécution automatique d'un script lors du lancement de '''Matlab''' en utilisant la syntaxe suivante:
 
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"
+
  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>''.
+
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:
 
Exemple:
  matlab -nojvm -nosplash -nodesktop -nodisplay -logfile produire_anim.log -r "try; run('produire_anim.m'); catch; end; quit"
+
  matlab -nojvm -nosplash -nodesktop -nodisplay -logfile produire_anim.log -r "try; run('produire_anim.m'); catch; end; quit " < /dev/null
  
  
Ligne 23 : Ligne 26 :
 
  #
 
  #
 
  ###################################################
 
  ###################################################
  #PBS -l nodes=1:ppn:5
+
  #PBS -l nodes=1:ppn=5
 
  #PBS -l mem=50gb
 
  #PBS -l mem=50gb
 
  #PBS -N tache_matlab
 
  #PBS -N tache_matlab
Ligne 29 : Ligne 32 :
 
  #PBS -j oe
 
  #PBS -j oe
 
   
 
   
  cd $PBS_O_WORK_DIR
+
  cd $PBS_O_WORKDIR
 
  module load matlab2015b
 
  module load matlab2015b
 
   
 
   
 
  #On lance 5 taches en arrière-plan (... &)
 
  #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" &
+
  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" &
+
  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" &
+
  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" &
+
  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" &
+
  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
 
  #On attend que toutes les taches se terminent
Ligne 43 : Ligne 46 :
  
  
 +
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')
  
  
Ligne 53 : Ligne 61 :
 
* une licence par utilisateur, par nœud de calcul ;
 
* 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 .
 
* sur un même nœud, un utilisateur peut lancer plusieurs instances de ''Matlab'' en ne consommant qu'une seule licence .
 +
  
  

Version actuelle datée du 12 juin 2020 à 09:46

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 .