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] |
| |
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émoire, nombre 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> |
| |
| Ensuite, on 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. |
| |
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. | 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 ==== | ==== 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 ==== |
* 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 ]] | |