Outils pour utilisateurs

Outils du site


logiciels:matlab

Ceci est une ancienne révision du document !


Matlab

MATLAB® est un logiciel commercial développé par la société Mathworks. Matlab est un langage de haut niveau et un environnement interactif pour le calcul numérique, la visualisation et la programmation.

Toolbox

Matlab fonctionne avec des extensions appelées toolbox. Les toolbox nécessitent des licences additionnelles.

Toolbox disponibles sur CALI :

MATLAB                                             
Image Processing Toolbox                          
Optimization Toolbox                                
Partial Differential Equation Toolbox               
Signal Processing Toolbox                          
System Identification Toolbox                     

Utilisation

Sélection de la version

Pour sélectionner la version voulue : utiliser les modules

Par exemple :

module load matlab/R2014a

Travailler avec slurm en mode séquentiel

Le principe consiste à préparer un fichier de commande matlab, puis à lancer dans le job slurm le logiciel matlab en lui demandant d'exécuter ce fichier de commandes.

Ci-dessous un exemple qui calcule la produit de deux matrices et sauve la résultat dans un fichier de sortie au format matlab out.mat

  1. Préparation du script matlab, dans le fichier matmul.m
    % Creation de deux matrices aleatoires 100x100
    A=rand(100);
    B=rand(100);
    
    % Produit matriciel
    AB=A*B;
    
    disp(sprintf('Somme de tous les elements de AB : %12.5f', sum(AB(:))));
    
    % Sauvegarde du resultat dans "out.mat"
    save out.mat AB;
  2. Préparation du job slurm (fichier matmul.sbatch)
    #!/bin/bash 
    #
    #SBATCH --partition=rapide
    #SBATCH --ntasks=1
    #SBATCH --mem-per-cpu=1000
    #SBATCH --time=00:30:00
    
    module load matlab
    matlab -nojvm -nosplash -nodisplay -singleCompThread -r "matmul, exit"
  3. Soumission du travail
    sbatch matmul.sbatch

:!: Notez que :

  • l'option -singleCompThread demande à matlab de n'utiliser qu'un seul thread, car nous avons demandé dans les réservation slurm une seule CPU
  • la commande exit est nécessaire dans les commandes matlab pour quitter le logiciel à la fin de l'exécution de matmul. En l'absence de cette commande, matlab resterait en attente de commande, sans “rendre la main”
  • la quantité de mémoire demandée, et le temps prévisionnel d'exécution, sont à adapter pour votre script. N'oubliez pas que slurm tuera le job si la consommation de mémoire ou la durée excédent ce qui est demandé
  • vous devez choisir la partition en fonction de vos besoins (voir l'article sur les base de slurm)

Execution sous slurm en multi-threadé

Sans l'option -singleCompThread, matlab utilisera tous les coeurs disponibles sur la machine. On peut également utiliser la commande (obsolète) maxNumCompThreads pour limiter le nombre de threads matlab.

Il faut alors que votre réservation slurm corresponde au nombre de threads utilisés par matlab.

  • Solution 1 : vous réservez un noeud entier et vous laissez matlab utiliser tous les threads
  • Solution 2 : vous indiquez dans slurm une réservation de N coeurs et vous faites appel à la fonction matlab maxNumCompThreads pour limiter le nombre de thread matlab

Pour reprendre l'exemple précédent :

  1. Script matmul.m
    cpus=str2num(getenv('SLURM_CPUS_PER_TASK'))
    maxNumCompThreads(cpus);
    disp(sprintf('Max number of threads : %d', maxNumCompThreads));
    
    % Creation de deux matrices aleatoires 100x100
    A=rand(100);
    B=rand(100);
    
    % Produit matriciel
    AB=A*B;
    
    disp(sprintf('Somme de tous les elements de AB : %12.5f', sum(AB(:))));
    
    % Sauvegarde du resultat dans "out.mat"
    save out.mat AB;
  2. Script matmul.sbatch
    #!/bin/bash 
    #SBATCH --partition=rapide
    #SBATCH --ntasks=1
    #SBATCH --cpus-per-task=4
    #SBATCH --mem-per-cpu=1000
    #SBATCH --time=00:30:00
    
    module load matlab
    echo "Nombre de cpu : $SLURM_CPUS_PER_TASK" 
    matlab -nojvm -nosplash -nodisplay -r "matmul, exit"
logiciels/matlab.1508175290.txt.gz · Dernière modification: 2017/10/16 19:34 de montap01