Lancer un job sur Juliet
Une seule partition nommée mesonet
Documentation Utilisateur pour Slurm
1. Introduction à Slurm
Slurm (Simple Linux Utility for Resource Management) est un puissant système de gestion de ressources conçu pour planifier, surveiller et exécuter des travaux sur des grappes de calcul. Voici quelques concepts de base :
- Travail (Job) : Une unité de travail soumise à Slurm pour exécution.
- Partition : Un groupe de nœuds de calcul avec des propriétés similaires.
- Nœud : Une machine individuelle au sein de la grappe.
- Tâche (Task) : Une unité d'exécution d'un travail, qui peut être un processus ou un thread.
- Sbatch : Utilitaire pour soumettre des travaux non interactifs.
- Srun : Utilitaire pour exécuter des tâches interactives ou non interactives.
2. Soumission de travaux
Paramètres requis
Certains paramètres doivent être fournis afin de permettre le lancement de votre job. Ils peuvent être fournis dans le script ou en paramètre de sbatch.
- Temps d'allocation, le paramètre
--time=HH:MM:SS
vous permet d'avoir des ressources allouées pendant HH heures MM minutes et SS secondes.
La limite de temps pour un calcul sur Juliet est de 10 jours.
- Projet, le paramètre
--account=m2xxxx
vous permet de renseigner de quel projet les heures doivent être décomptées Pour savoir les projets auxquels vous êtes associé, vous pouvez utiliser la commande
sacctmgr --noheader --parsable2 show association where user=$USER format=account
Il n'est pas possible de lancer un job avec le projet default
Paramètres optionnels
- Nombre de noeuds demandés : Le paramètre
--nodes=n
vous permettra de réserver N noeuds pour le job entier (par défaut 1) - Nombre de cpu par noeud: Le paramètre
--cpu_per_task=n
vous permettra de réserver n CPUs par tâche (par défaut 1) - Nombre de GPU par noeud: Le paramètre
--gpus=n
vous permettra de réserver n GPUs pour le job entier (par défaut 0) - Quantité de mémoire demandée Le paramètre
--mem=kG
vous permettra d'allouer k Go de RAM pour le job entier (par défaut n_cpu Go avec n_cpu le nombre de cpu alloués pour le job entier) - Réservation demandée Le paramètre
--reservation=xxx
vous permettra d'utiliser les noeuds alloués à la réservation xxx.
Exemple 1 : Soumettre un script simple
sbatch mon_script.sh
Cette commande soumet le script mon_script.sh
pour exécution. Assurez-vous que mon_script.sh
contient les directives Slurm appropriées en haut du script pour spécifier les ressources nécessaires.
Exemple 2 : Soumettre avec allocation de ressources
sbatch --partition=mesonet --nodes=2 --ntasks-per-node=4 mon_script.sh
Cette commande alloue le travail à la partition "mesonet" sur 2 nœuds, avec 4 tâches par nœud. Assurez-vous d'ajuster les valeurs selon vos besoins.
Exemples de scripts sbatch
Exemple de script shell utilisant un nœud complet :
#!/bin/bash
#SBATCH -p mesonet
#SBATCH -N 1
#SBATCH -c 224
#SBATCH --gres=gpu:8
#SBATCH --time=1:00:00
#SBATCH --mem=0
#SBATCH --account=m2xxxx
~/miniconda3/envs/h2ogpt/bin/python generate.py --share=False --gradio_offline_level=1 --base_model=h2oai/h2ogpt-4096-llama2-70b-chat --use_gpu_id=False
Exemple de script shell utilisant un seul GPU :
#!/bin/bash
#SBATCH -p mesonet
#SBATCH -N 1
#SBATCH -c 28
#SBATCH --gres=gpu:1
#SBATCH --time=1:00:00
#SBATCH --mem=256G
#SBATCH --account=m2xxxx
~/miniconda3/envs/h2ogpt/bin/python generate.py --share=False --gradio_offline_level=1 --base_model=h2oai/h2ogpt-4096-llama2-70b-chat
3. Vérification de l'état des travaux
Exemple 3 : Vérifier l'état de vos travaux
squeue -u votre_nom_utilisateur
Cette commande affiche la liste des travaux en cours pour l'utilisateur spécifié. Vous pouvez voir des informations telles que l'ID du travail, l'état, le nœud, le temps, etc.
Exemple 4 : Vérifier les travaux de tous les utilisateurs
squeue
Cette commande affiche la liste de tous les travaux en cours. Utilisez des options supplémentaires pour filtrer les résultats, par exemple, squeue --partition=mesonet
pour afficher les travaux dans la partition "mesonet".
4. Gestion des travaux
Exemple 5 : Annuler un travail
scancel ID_du_travail
Cette commande annule le travail avec l'ID spécifié. Vous pouvez obtenir l'ID du travail à partir de la commande squeue
.
Exemple 6 : Modifier la priorité d'un travail
scontrol update JobID ID_du_travail Priority=50
Cette commande modifie la priorité du travail avec l'ID spécifié. La priorité affecte l'ordre d'exécution des travaux.
5. Gestion des ressources
Exemple 7 : Spécifier les ressources avec sbatch
sbatch --partition=compute --nodes=1 --cpus-per-task=8 --mem=16G mon_script.sh --time=HH:MM:SS --account=m2xxxx
Cette commande spécifie les ressources pour le travail, y compris la partition, le nombre de nœuds, le nombre de tâches par nœud et le nombre de CPU par tâche.
Exemple 8 : Exécuter des tâches interactives avec srun
srun --time=HH:MM:SS --account=m2xxxx --pty -c 4 /bin/bash
Cette commande lance un shell interactif avec 4 CPU alloués. Utile pour les tâches interactives ou les tests.
6. Paramètres avancés
Exemple 9 : Utiliser une réservation de nœuds
srun --reservation=ma_reservation --nodes=2 mon_script.sh --time=HH:MM:SS --account=m2xxxx
Cette commande exécute le travail sur une réservation de 2 nœuds spécifiée avec l'option --reservation
.
Exemple 10 : Utiliser une partition spécifique avec srun
srun --partition=visu --nodes=1 --time=HH:MM:SS --account=m2xxxx mon_script.sh
Cette commande exécute le travail sur la partition "visu" avec 1 nœud.
7. Informations sur les noeuds de calcul
sinfo
Cette commande affiche des informations détaillées sur les nœuds disponibles, telles que leur nom, partition, état, nombre de tâches, mémoire, ressources, charge CPU, temps d'activité et utilisation GPU