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 [2017/05/02 10:02]
montap01 [Travaux normaux]
slurm:les-bases [2024/10/02 17:23] (Version actuelle)
montap01 [Calcul sur GPU]
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 ==== +===== Premier exemple pratique ===== 
-Préparez un fichier texte qui décrit + 
-  * les ressources nécessaires quantité de mémoirenombre de CPU +==== Fichier batch et soumission  ==== 
-  le temps d’exécution maximum prévu+Nous créons un fichier texte ''mon_programme.batch'' (n'importe quel nom est admissible) :  
 + 
 +<code> 
 +#!/bin/bash 
 + 
 +#SBATCH --partition=rapide 
 +#SBATCH --ntasks=1 
 +#SBATCH --mem-per-cpu=100 
 +#SBATCH --time=00:30:00 
 + 
 +./mon_programme 
 +</code> 
 + 
 +Ensuiteon indique à slurm que l'on veut lancer ce job : 
 + 
 +  sbatch mon_programme.batch 
 + 
 +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.. 
 + 
 +==== Explications ==== 
 +Le fichier texte ''mon_programme.sbatch'' est de type //shell script//.  
 + 
 +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 :
   * la //partition// voulue (plus de détails ci-après)   * la //partition// voulue (plus de détails ci-après)
-  * la ou les commandes à exécuter+  * les ressources nécessaires : nombre de processus qui seront lancés, quantité de mémoire, nombre de CPU 
 +  * le temps d’exécution maximum prévu 
 + 
 +Dans notre exemple :  
 +  * ''%%--%%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 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 :!: 
 + 
 +Dans sa seconde partie, le fichier contient la ou les commandes à exécuter
 + 
 +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. 
 + 
 +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 
 + 
 +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> 
 +   
 +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.
  
-Ensuitela 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.+Par défautles 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 ==== ==== 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> <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>
  
-===== Partition =====+===== Les partitions slurm =====
 Un élément est **primordial** quand vous soumettez un job : la //partition//  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é   * 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)   * 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+  * 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 [[partitions-qos | partitions et QoS utilisables]], ou la page [[:gpu:utilisation | utilisation des noeuds GPU]]. Nous présentons ci-après les choix les plus usuels.+Vous pourrez par la suite consulter la liste complète des [[partitions| partitions 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 ==== ==== Travaux de très courte durée ====
Ligne 39: Ligne 91:
   * pour les jobs les plus communs (**2 jours maximum**)   * pour les jobs les plus communs (**2 jours maximum**)
  
-===== 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 ==== +==== Points d'attention sur les ressources ====
-Nous créons un fichier texte ''mon_programme.batch'' :  +
- +
-<code> +
-#!/bin/bash +
-#SBATCH --partition=rapide +
-#SBATCH --ntasks=1 +
-#SBATCH --mem-per-cpu=100 +
-#SBATCH --time=00:30:00 +
- +
-./mon_programme +
-</code> +
- +
-==== Soumission du travail ==== +
-Ensuite, on indique à slurm que l'on veut lancer ce job : +
- +
-  sbatch mon_programme.batch +
- +
-==== Options sbatch ==== +
-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'' sélectionne la //partition// +
-  * ''%%--%%ntasks=1'' donne le nombre de processus +
-  * ''%%--%%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 ==== +
-<note important> +
   * 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   * 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   * 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é   * Un job consommant plus de mémoire ou de temps que demandé sera tué
-</note> 
  
-===== Résultats du job ===== 
-Par défaut, les sorties standards et d'erreur sont redirigés vers le fichier ''slurm-<JOB_ID>.out'' 
  
-===== Inter-agir avec slurm ===== 
  
-==== Voir la file d'attente ==== 
-Voir tous les jobs dans la file : 
-  squeue -l 
  
-==== Arrêter  un job en cours ==== 
-  scancel <JOB_ID> 
-===== Pour plus d'information ===== 
-Consultez le contenu de la rubrique dédiée à [[start | slurm ]] 
slurm/les-bases.1493712137.txt.gz · Dernière modification: 2017/05/02 10:02 de montap01