Outils pour utilisateurs

Outils du site


slurm:les-bases

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
slurm:les-bases [2015/06/04 17:03]
montap01 [Avant-propos]
slurm:les-bases [2023/01/03 15:32] (Version actuelle)
montap01 [Calcul sur GOPU]
Ligne 2: Ligne 2:
 ====== Slurm, l'ordonnanceur de travaux ====== ====== Slurm, l'ordonnanceur de travaux ======
  
-Cet article donne les recettes pratiques simples pour inter-agir avec le logiciel //slurm// :+Cet article est une introduction à //slurm//, l'ordonnanceur de travaux (//jobs//) sur CALI. Vous trouverez les recettes pratiques pour commencer à travailler sur CALI :
   * comment soumettre un //job//   * comment soumettre un //job//
   * comment voir l'état de vos travaux   * comment voir l'état de vos travaux
Ligne 10: Ligne 10:
  
 Pour exécuter un programme, vous devez le soumettre à l’ordonnanceur (//scheduler//). Le logiciel utilisé comme ordonnanceur sur notre cluster est // [[http://slurm.schedmd.com/ | slurm]]//. Il exécutera votre programme (//job//) en différé, quand les ressources (CPU, mémoire) nécessaires à votre travail seront disponibles "quelque part" dans le cluster, sur un des nœuds dédiés aux calculs. Pour exécuter un programme, vous devez le soumettre à l’ordonnanceur (//scheduler//). Le logiciel utilisé comme ordonnanceur sur notre cluster est // [[http://slurm.schedmd.com/ | slurm]]//. Il exécutera votre programme (//job//) en différé, quand les ressources (CPU, mémoire) nécessaires à votre travail seront disponibles "quelque part" dans le cluster, sur un des nœuds dédiés aux calculs.
-===== Soumettre un job ===== 
-==== Principe ==== 
-Préparez un fichier texte qui décrit : 
-  * les ressources nécessaires : quantité de mémoire, nombre de CPU 
-  * le temps d’exécution maximum prévu 
-  * la //partition// et la //QoS// voulus (plus de détails ci-après) 
-  * la ou les commandes à exécuter 
  
-Ensuite, la commande ''sbatch'' permet de soumettre le fichier batch, autrement dit de créer un //job// slurm qui sera exécuté dès que les ressources demandées seront disponibles.+===== Premier exemple pratique =====
  
-==== Dépassement des ressources ==== +==== Fichier batch et soumission  ==== 
-<note important>Si votre job dépasse certaines quantités demandées (mémoire, temps d'exécution), il sera automatiquement tué par slurm.</note> +Nous créons un fichier texte ''mon_programme.batch'' (n'importe quel nom est admissible) 
- +
-===== Partition et QoS ===== +
-Deux éléments importants sont la //partition// et la //QoS// (qualité de service) que vous demandez quand vous soumettez un job. +
-  * Une //partition// est un groupe de nœuds de calcul du cluster, avec une priorité +
-  * Une //QoS// décrit des limites d'usage, et une priorité +
- +
-Vous pourrez par la suite consulter la liste complète des [[partitions-qos | partitions et QoS utilisables]], ou la page [[:gpu:utilisation | utilisation des noeuds GPU]]. Nous présentons ci-après 2 combinaisons usuelles utilisant les noeuds de calcul "génération 2014"+
- +
-==== Travaux de très courte durée ==== +
-Utilisez ''partition=rapide'' et ''qos=rapide'' +
-  * pour les travaux très courts (< 1 heure) : mise au point du code, tests +
-  * limites d'usage basses +
-==== Travaux de longue durée ==== +
-Utilisez ''partition=cluster'' et ''qos=cluster'' +
-  * pour les jobs de longue durée (30 jours maximum) +
-  * ils pourront être préemptés (gelés) pour libérer des ressources pour des travaux plus courts +
- +
-===== Premier exemple ===== +
-Ce premier exemple est adapté pour un programme //séquentiel//, qui n'utilise qu'un seul processus sans //threads// (processus léger). +
- +
-==== Fichier batch ==== +
-Nous créons un fichier texte ''mon_programme.batch''+
  
 <code> <code>
 #!/bin/bash #!/bin/bash
 +
 #SBATCH --partition=rapide #SBATCH --partition=rapide
-#SBATCH --qos=rapide 
 #SBATCH --ntasks=1 #SBATCH --ntasks=1
 #SBATCH --mem-per-cpu=100 #SBATCH --mem-per-cpu=100
Ligne 56: Ligne 27:
 </code> </code>
  
-==== Soumission du travail ==== 
 Ensuite, on indique à slurm que l'on veut lancer ce job : Ensuite, on indique à slurm que l'on veut lancer ce job :
  
   sbatch mon_programme.batch   sbatch mon_programme.batch
  
-==== Options sbatch ==== +Et voilà, votre code ''mon_programme'' sera exécuté dès que le cluster aura des //ressources// disponibles ! Nous allons maintenant détailler le contenu du fichier //batch// et comment slurm travaille..
-Les lignes ''#SBATCH'' sont des **options pour la commande ''sbatch''** (et considérées comme des commentaires pour le shell -- elles commencent avec ''#'').+
  
-  * ''%%--%%partition=rapide'' et ''%%--%%qos=rapide'' sélectionnent la //partition// et la //qos// +==== Explications ==== 
-  * ''%%--%%ntasks=1'' donne le nombre de processus +Le fichier texte ''mon_programme.sbatch'' est de type //shell script//. 
-  * ''%%--%%mem-per-cpu=100'' donne la **quantité de mémoire en Mo** pour chaque CPU**Le job sera tué si la quantité consommée excède la valeur demandée** +
-  * ''%%--%%time=00:30:00'' donne la durée maximale du job, au format JOUR-HH:MM:SS . **Le job sera tué si la quantité consommée excède la valeur demandée**+
  
-==== Points d'attention ==== +Mais il possèdes des //commentaires// spéciaux, commençant par ''#SBATCH '', placés en première partie du fichier. Ces directives destinées à slurm indiquent : 
-<note important>  +  * la //partition// voulue (plus de détails ci-après) 
-  * Vous **devez** indiquer les ressources mémoire et temps nécessairescar les valeurs par défaut sont très basses et ne permettraient certainement pas à votre travail de se terminer +  * les ressources nécessaires : nombre de processus qui seront lancés, quantité de mémoire, nombre de CPU 
-  * Les quantités demandées en temps, CPU, mémoire doivent être compatible avec la //qos// et la //partition//, sinon ils ne seront pas acceptés lors de la soumission +  * le temps d’exécution maximum prévu
-  * Un job consommant plus de mémoire ou de temps que demandé sera tué +
-</note>+
  
-===== Résultats du job ===== +Dans notre exemple :  
-Par défaut, les sorties standards et d'erreur sont redirigés vers le fichier ''slurm-<JOB_ID>.out''+  * ''%%--%%partition=rapide'' sélectionne la //partition// nommée ''rapide'' 
 +  ''%%--%%ntasks=1'' donne le nombre de processus qui sera exécuté dans le batch -- En général, on met "1" pour un programme séquentiel ou multi-threadé, une valeur 1 seulement pour les programmes MPI 
 +  * ''%%--%%mem-per-cpu=100'' donne la **quantité de mémoire en Mo** pour chaque CPULe job sera tué si la quantité consommée excède la valeur demandée :!: 
 +  * ''%%--%%time=00:30:00'' donne la durée maximale du job, au format JOUR-HH:MM:SS . Le job sera tué si la quantité consommée excède la valeur demandée :!:
  
-===== Inter-agir avec slurm =====+Dans sa seconde partie, le fichier contient la ou les commandes à exécuter.
  
-==== Voir la file d'attente ==== +La commande ''sbatch'' permet de soumettre le fichier batch, autrement dit de créer un //job// slurm qui sera exécuté dès que les ressources demandées seront disponibles. ''sbatch'' a affiché le //Job ID//, un numéro unique associé au job soumis. 
-Voir tous les jobs dans la file :+ 
 +Toutes les directives (''#SBATCH ...'') sont en pratique des //options// de la commande ''sbatch''. Il est simplement plus facile de les inscrire dans le fichier //batch// que de les taper sur la ligne de commande.  
 +===== Où est mon job ? Comment l'arrêter ? ====
 +Une fois votre //job// soumis, vous pouvez examiner la //queue//, c'est-à-dire la liste des travaux en attente ou en cours d'éxécution. 
 + 
 +Pour voir tous les jobs dans la file :
   squeue -l   squeue -l
  
-==== Arrêter  un job en cours ====+Les //job// ont un //état// associé -- Les 2 principaux sont : 
 +  * ''PENDING'' : en attente 
 +  * ''RUNNING'' : en cours d'exécution 
 + 
 +Vous pouvez stopper un job en cours avec :
   scancel <JOB_ID>   scancel <JOB_ID>
-===== Pour plus d'information ===== +   
-Consultez le contenu de la rubrique dédiée à [[start slurm ]]+Pour plus d'informations, consultez le contenu de la rubrique dédiée à [[start | slurm ]] 
 + 
 +==== Où sont stockés les résultats du job ? ==== 
 +Slurm exécute le job depuis le dossier où vous étiez quand vous avez soumis le job. 
 + 
 +Par défaut, les sorties standards et d'erreur (qui s'affichent sur le terminal) sont redirigées vers le fichier ''slurm-<JOB_ID>.out'' 
 + 
 +==== Dépassement des ressources ==== 
 +<note important>Si votre job dépasse certaines quantités demandées (mémoire, temps d'exécution), il sera automatiquement tué par slurm.</note> 
 + 
 +===== Les partitions slurm ===== 
 +Un élément est **primordial** quand vous soumettez un job : la //partition//  
 +  * c'est un groupe de nœuds de calcul du cluster, avec une priorité 
 +  * des //limites// sont associées à chacune : temps maximal d'exécution, nombre de CPU utilisables (au total ou par utilisateur) 
 +  * certaines sont //pré-emptibles// : un job en cours pourra être suspendu s'il faut libérer des ressources pour un autre, plus prioritaire :!: 
 + 
 +Vous pourrez par la suite consulter la liste complète des [[partitionspartitions utilisables]], ou la page [[:gpu:utilisation | utilisation des noeuds GPU]]. Nous présentons ci-après les choix les plus usuels. 
 + 
 +==== Travaux de très courte durée ==== 
 +Utilisez ''partition=rapide'' 
 +  * pour les travaux très courts (< 1 heure) : mise au point du code, tests 
 +  * limites d'usage basses 
 +==== Travaux "normaux" ==== 
 +Utilisez ''partition=normal'' 
 +  * pour les jobs les plus communs (**2 jours maximum**) 
 + 
 +==== Calcul sur GPU ==== 
 +Partition ''gpu'' 
 +==== Points d'attention sur les ressources ==== 
 +  * Vous **devez** indiquer les ressources mémoire et temps nécessaires, car les valeurs par défaut sont très basses et ne permettraient certainement pas à votre travail de se terminer 
 +  * Les quantités demandées en temps, CPU, mémoire doivent être compatible avec la //partition//, sinon ils ne seront pas acceptés lors de la soumission 
 +  * Un job consommant plus de mémoire ou de temps que demandé sera tué 
 + 
 + 
 + 
slurm/les-bases.1433430210.txt.gz · Dernière modification: 2015/06/04 17:03 de montap01