Outils pour utilisateurs

Outils du site


logiciels:matlab

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.

CALI ne dispose pas de licences Matlab. Vous devrez donc utiliser des licences flottantes de votre laboratoire pour pouvoir exécuter ce logiciel.

Utilisation

Sélection de la version

Pour sélectionner la version voulue : utiliser les modules

Par exemple :

module load matlab/R2014a

Indiquer votre gestionnaire de licences

Pré-requis :

  1. Votre laboratoire doit disposer d'un gestionnaire de licences flottantes
  2. Vous devez connaître le nom DNS de ce gestionnaire de licences, et le numéro de port utilisé
  3. L'accès réseau au gestionnaire doit être ouvert depuis CALI

Une fois ces conditions remplies, positionnez une variable d'environnement dans votre terminal connecté à CALI :

export MLM_LICENSE_FILE <PORT>@<NOM_SERVEUR_LICENCES>

en remplaçant <PORT> par le numéro de port réseau, et <NOM_SERVEUR_LICENCES> par le nom DNS (ou l'adresse IP) de votre serveur de licences.

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.txt · Dernière modification: 2023/10/16 12:21 de montap01