Grille de calcul¶
Le CIRRELT & GERAD met à votre disposition une grille de calcul locale, basée sur le gestionnaire de tâches Slurm, le même système que celui utilisé par l’Alliance de recherche numérique du Canada (anciennement Calcul Canada). Bien que nos ressources soient plus limitées et que la configuration diffère, l’utilisation reste similaire. La plupart des informations disponibles sur la page de soumission de tâches du wiki de l’Alliance s’appliquent donc également à notre grille.
Règles à suivre pour la grille de calcul¶
- Ne lancez jamais de tâches directement sur la machine
slurm(réservée à la gestion des soumissions). - Utiliser la bonne taille de mémoire pour les tâches.
- Utiliser le bon nombre de cpu pour vos tâches.
- Les tâches d’une durée inférieure à 10 minutes risquent d’être ignorées par le système. Assurez-vous que vos calculs dépassent ce seuil.
- Utilisez la bonne partition pour votre tâche
optimum: Pour des calculs de moins de 2 jours (10 machines disponibles).optimumlong: Pour des calculs de 2 à 7 jours (1 machine disponible).testing: Pour valider vos scripts avant soumission (max. 15 minutes).
- Utilisez votre espace disque sur /scratch si vous effectuez beaucoup de lecture/écriture lors de l'execution de vos tâches ou si vous avez de gros jeux de données.
Ressources matérielles¶
| Modèle | Mémoire | CPU (par machine) |
|---|---|---|
| Dell PowerEdge R740 | 512 Go | 2 × Intel Xeon Gold 6258R (56 cœurs) |
Note : La machine
slurmpeut être utilisée pour tester vos scripts (partitiontesting), mais ses ressources sont très limitées.
Gestion des tâches¶
Pour toutes les commandes slurm (squeue, sbatch, etc), il faut se
connecter par ssh à la machine slurm.
État de la grille¶
La commande sinfo permet de voir l'état de la grille de calcul et les
durées maximales des partitions.
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST
optimum* up 2-00:00:00 1 mix optimum01
optimum* up 2-00:00:00 1 drain optimum02
optimum* up 2-00:00:00 9 drng optimum03
optimum* up 2-00:00:00 9 idle optimum[04-10]
optimumlong up 7-00:00:00 1 idle optimum11
idle: ces machines sont entièrement disponiblesmix: ces machines sont utilisées en partiedrain: ces machines sont en maintenancedrng: ces machines exécutent des tâches mais n'en acceptent plus. Dès que les tâches en cours seront terminées, elles passeront au modedrain.
Soumission de tâches¶
La commande sbatch est utilisée pour soumettre une tâche à la grille de
calcul. On peut mettre les paramètres dans le script de soumission ou les
passer sur la ligne de commande ou faire une combinaison des 2.
Pour lancer une tâche dans la grille, vous devez avoir un script avec les paramètres slurm.
Voici les paramètres les plus utilisés:
| Paramètre | Description | Exemple |
|---|---|---|
--cpus-per-task |
Nombre de CPU alloués. Doit correspondre aux besoins réels de votre programme. | --cpus-per-task=4 |
--mem |
Mémoire requise. Si dépassée, la tâche est annulée. | --mem=16G |
--time |
Durée maximale. Format : JJ-HH:MM:SS. |
--time=2-12:00:00 |
--output |
Fichier de sortie. Par défaut : slurm-<ID>.out. |
--output=resultats.log |
--partition |
Partition cible (optimum, optimumlong, testing). |
--partition=optimumlong |
--nodelist |
Noeuds spécifiques (ex. : optimum[01-03]). |
--nodelist=optimum01 |
--array |
permet de lancer 8=des tâches identiques en parallèle, chacune avec un identifiant unique ($SLURM_ARRAY_TASK_ID). Cela évite de soumettre manuellement chaque instance. | --array=1-8 |
Bonnes pratiques¶
- Testez votre script avec la partition
testingavant de soumettre àoptimum. - Évitez de surestimer les ressources : plus la demande est élevée, plus l’attente sera longue.
- Limitez l’utilisation des CPU pour les logiciels comme CPLEX ou Gurobi (utilisez
--cpus-per-task). Ajustez le nombre de threads dans votre programme en conséquence.
Lorsque votre script est prêt, vous n'avez qu'à utiliser la commande
Voici 3 exemples de scripts qui peuvent vous servir de point de départ.
Script ou on n'a qu'une seule instance à résoudre.
Si on a une série d'instance, alors on privilégie l'utilisation de l'option array pour lancer une seule tâche avec sbatch qui regroupe l'ensemble des instances que vous voulez résoudre.
Dans cet exemple, lorsqu'on calcule le nombre d'instances générées, on arrive à 8.
- n = 2 valeurs
- dataset = 2 valeurs
- country = 2 valeurs.
2 * 2 * 2 = 8.
C'est pourquoi nous utilisons --array=1-8 dans l'entête. Il est très
important que ces nombres concordent pour que toutes les instances soient lancées.
Pour lancer un programme matlab dans la grille de calcul, il faut que votre programme ne soit pas en mode graphique et qu'il soit en mesure d'obtenir tous les paramètre dont il a besoin sans interaction et sans avoir à modifier le code.
Annulation de tâches¶
Le programme scancel est utilisé pour annuler une ou plusieurs tâches. Exemple:
Suivi et statistiques des tâches¶
État actuel des tâches¶
Le programme squeue est utilisé pour voir les tâches qui sont dans le
système. Par défaut, si vous ne donnez aucune option, vous verrez les
tâches de tout le monde. Vous pouvez utiliser l'option -u pour
spécifier votre nom d'utilisateur.Vous pouvez utiliser la variable
SQUEUE_FORMAT pour changer l'affichage par défaut de la commande.
Par exemple à l'alliance ils utilisent:
Exemples¶
| Commande | Description |
|---|---|
squeue -u username |
affiche toutes les tâches de l'utilisateur |
squeue -u username -t RUNNING |
affiche les tâches de l'utilisateur qui sont en exécution |
squeue -u username -t PENDING |
affiche les tâches de l'utilisateur qui sont en attente de ressources |
Liste des états¶
| Code | Statut | Description |
|---|---|---|
CA |
Canceled | La tâche a été annulée |
CD |
Complete | La tâche est terminée |
F |
Failed | La tâche quitté avec un code de sortie différent de 0 |
PD |
Pending | La tâche est en attente |
R |
Running | La tâche est en cours d'exécution |
Informations détaillées des tâches¶
Les commandes sstat et sacct peuvent être utilisées pour obtenir plus
d'informations sur les tâches.
La commande sstat ne peut être utilisée que pour les tâches en cours alors
que sacct peut aussi être utilisée pour les tâches terminées.
Les champs disponibles peut être affichés avec l'option
-e et ensuite utilisés soit avec l'option --format.
Pour voir de plus anciennes tâches, on peut spécifier une date de départ
sacct --starttime 2022-04-17 --format=Account,User,JobID,Start,End,AllocCPUS,Elapsed,AllocTRES%30,CPUTime,AveRSS,MaxRSS,MaxRSSTask,MaxRSSNode,NodeList,ExitCode,State%20
La variable d'environnement SACCT_FORMAT permet de définir un format
si on souhaite pas le spécifier à chaque exécution du programme.
L'exemple suivant est le format utilisé à l'alliance.
export SACCT_FORMAT=Account,User,JobID,Start,End,AllocCPUS,Elapsed,AllocTRES%30,CPUTime,AveRSS,MaxRSS,MaxRSSTask,MaxRSSNode,NodeList,ExitCode,State%20
Le programme seff peut être utilisé pour voir des statistiques d'exécution du programme
comme les pourcentages d'utilisation des ressources CPU et de mémoire.
$ ▶ seff 12345
Job ID: 12345
Cluster: cluster
User/Group:
State: COMPLETED (exit code 0)
Nodes: 1
Cores per node: 6
CPU Utilized: 07:31:57
CPU Efficiency: 22.34% of 1-09:42:54 core-walltime
Job Wall-clock time: 05:37:09
Memory Utilized: 49.33 GB
Memory Efficiency: 49.33% of 100.00 GB
Cette commande permet de voir l'utilisation des ressources demandées si elles sont optimales. Dans ce cas, la mémoire utilisée est 50% moins que la mémoire demandée par l'utilisateur. Même chose pour la demande de CPU qui est 23% des CPUs demandés pour cette tâche.
Le programme reportseff permet de voir les statistiques de plusieurs tâches à
la fois.

Dans l'exemple ci-dessus, on remarque que certaines tâches sont très courtes ce qui peut indiquer que le programme n'a pas fonctionné correctement. Les chiffres en rouge attirent l'attention sur les tâches ou les ressources sont mal utilisées.
Vous pouvez obtenir plus d'information sur le programme reportseff en consultant la page du logiciel.
Le programme seff-array permet de faire une analyse des tâches d'un
même array. Cela permet entre autre de voir la répartion des tâches
pour différents niveaux d'utilisation des ressources sous forme d'histogramme.
$ ▶ seff-array 12345
--------------------------------------------------------
Job Information
ID: 12345
Name: test_models.sh
Cluster: cluster
User/Group: -----
Requested CPUs: 6 cores on 1 node(s)
Requested Memory: 100G
Requested Time: 14:00:00
--------------------------------------------------------
Job Status
COMPLETED: 28
--------------------------------------------------------
--------------------------------------------------------
Finished Job Statistics
(excludes pending, running, and cancelled jobs)
Average CPU Efficiency 37.26%
Average Memory Usage 26.38G
Average Run-time 18682.25s
---------------------
CPU Efficiency (%)
---------------------
+0.00e+00 - +1.00e+01 [0]
+1.00e+01 - +2.00e+01 [7] ████████████████████████████████████████
+2.00e+01 - +3.00e+01 [5] ████████████████████████████▋
+3.00e+01 - +4.00e+01 [3] █████████████████▏
+4.00e+01 - +5.00e+01 [3] █████████████████▏
+5.00e+01 - +6.00e+01 [7] ████████████████████████████████████████
+6.00e+01 - +7.00e+01 [2] ███████████▍
+7.00e+01 - +8.00e+01 [1] █████▊
+8.00e+01 - +9.00e+01 [0]
+9.00e+01 - +1.00e+02 [0]
Memory Efficiency (%)
---------------------
+0.00e+00 - +1.00e+01 [3] █████████████▍
+1.00e+01 - +2.00e+01 [7] ███████████████████████████████▏
+2.00e+01 - +3.00e+01 [9] ████████████████████████████████████████
+3.00e+01 - +4.00e+01 [4] █████████████████▊
+4.00e+01 - +5.00e+01 [4] █████████████████▊
+5.00e+01 - +6.00e+01 [0]
+6.00e+01 - +7.00e+01 [0]
+7.00e+01 - +8.00e+01 [1] ████▌
+8.00e+01 - +9.00e+01 [0]
+9.00e+01 - +1.00e+02 [0]
Time Efficiency (%)
---------------------
+0.00e+00 - +1.00e+01 [ 2] ████▎
+1.00e+01 - +2.00e+01 [ 0]
+2.00e+01 - +3.00e+01 [ 0]
+3.00e+01 - +4.00e+01 [19] ████████████████████████████████████████
+4.00e+01 - +5.00e+01 [ 7] ██████████████▊
+5.00e+01 - +6.00e+01 [ 0]
+6.00e+01 - +7.00e+01 [ 0]
+7.00e+01 - +8.00e+01 [ 0]
+8.00e+01 - +9.00e+01 [ 0]
+9.00e+01 - +1.00e+02 [ 0]
--------------------------------------------------------
Espace de travail temporaire¶
Il y a un espace de travail temporaire disponible dans le répertoire /scratch de chacune des machines optimum. Cet espace est aussi disponible à partir de la machine frontale slurm de façon à ce que vous puissiez y copier vos données avant de lancer les tâches.
Il n'y a aucune sauvegarde des fichiers qui sont mis dans ce répertoire alors n'y mettez aucun fichier que vous ne pouvez pas vous permettre de perdre.
Nous vous demandons d'utiliser cet espace de façon raisonnable.