Table des matières

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 :

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.

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"