Skip to content

Allocation de ressources

Gérer l'allocation de ressources dans SLURM est essentiel pour optimiser l'utilisation des ressources disponibles (CPU, mémoire, GPU, etc.) et garantir que vos jobs s'exécutent efficacement. Voici un guide complet pour gérer l'allocation de ressources dans SLURM :


1. Comprendre les ressources disponibles

Avant de soumettre un job, il est important de connaître les ressources disponibles sur votre cluster. Utilisez les commandes suivantes pour obtenir des informations :

a. Afficher les partitions

Les partitions sont des groupes de nœuds avec des configurations spécifiques (par exemple, CPU, GPU).

sinfo

Options utiles :

  • -p <partition> : Filtrer par partition.
  • -o "%P %N %C %G" : Afficher les partitions, nœuds, CPU disponibles et GPU disponibles.

Exemple :

sinfo -o "%P %N %C %G"

b. Afficher les détails des nœuds

Utilisez scontrol show node pour afficher des informations détaillées sur les nœuds.

scontrol show node <nom_du_noeud>

Cela affiche des détails tels que :

  • Nombre de CPU (CPUs).
  • Mémoire totale (RealMemory).
  • GPU disponibles (Gres).

2. Allouer des ressources dans un job

a. Options de base pour l'allocation de ressources

Lorsque vous soumettez un job avec sbatch ou srun, vous pouvez spécifier les ressources nécessaires. Voici les options courantes :

Option Description
--ntasks=<nombre> Nombre de tâches (par défaut, 1).
--cpus-per-task=<n> Nombre de CPU par tâche.
--mem=<taille> Mémoire allouée (par exemple, 8G pour 8 Go).
--time=<durée> Durée maximale du job (format jours-heures:minutes:secondes).
--gres=gpu:<nombre> Demander des GPU (par exemple, --gres=gpu:1 pour 1 GPU).
--partition=<nom> Partition à utiliser (par exemple, defq, gpu, etc.).

Exemple de script de job :

#!/bin/bash
#SBATCH --job-name=mon_job
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=4
#SBATCH --mem=8G
#SBATCH --time=01:00:00
#SBATCH --gres=gpu:1
#SBATCH --partition=gpu

# Charger les modules nécessaires
module load cuda/11.0

# Exécuter le programme
./mon_programme

b. Allocation de GPU

Si votre job nécessite des GPU, utilisez l'option --gres=gpu:<nombre>. Assurez-vous de sélectionner une partition qui supporte les GPU.

Exemple :

sbatch --gres=gpu:2 --partition=gpu mon_script_job.sh

c. Allocation de mémoire

Spécifiez la mémoire requise avec --mem. Si vous avez besoin de mémoire par CPU, utilisez --mem-per-cpu.

Exemple :

sbatch --ntasks=4 --cpus-per-task=2 --mem-per-cpu=4G mon_script_job.sh

d. Allocation de temps

Spécifiez la durée maximale du job avec --time. Si le job dépasse cette durée, il sera automatiquement annulé.

Exemple :

sbatch --time=2-12:00:00 mon_script_job.sh  # 2 jours et 12 heures

3. Optimiser l'allocation des ressources

a. Estimer les besoins

  • CPU : Utilisez --cpus-per-task pour spécifier le nombre de CPU nécessaires par tâche.
  • Mémoire : Estimez la mémoire requise en fonction de vos tests préliminaires.
  • GPU : Utilisez --gres=gpu uniquement si votre application supporte et nécessite des GPU.

b. Éviter la surallocation

  • Ne demandez pas plus de ressources que nécessaire, car cela peut retarder l'exécution de votre job.
  • Utilisez des estimations réalistes pour --time afin d'éviter que le job ne soit annulé prématurément.

4. Modifier l'allocation des ressources

a. Modifier un job en attente

Utilisez scontrol update pour modifier les ressources d'un job en attente.

Exemples :

  • Changer la mémoire :

scontrol update jobid=12345 MinMemoryCPU=16G

  • Changer le nombre de CPU :

scontrol update jobid=12345 CPUs=8

  • Changer la durée :

scontrol update jobid=12345 Time=04:00:00


b. Réallouer des ressources en cours d'exécution

Il n'est généralement pas possible de modifier les ressources d'un job en cours d'exécution. Vous devrez annuler le job (scancel) et le soumettre à nouveau avec les nouvelles ressources.


5. Surveiller l'utilisation des ressources

a. Utilisation des CPU et de la mémoire

Utilisez sstat pour surveiller l'utilisation des ressources d'un job en cours.

sstat -j <job_id> --format=JobID,MaxRSS,MaxVMSize,NTasks,CPUTime

b. Utilisation des GPU

Si vous utilisez des GPU, vous pouvez surveiller leur utilisation avec des outils comme nvidia-smi sur le nœud d'exécution.


6. Bonnes pratiques

  • Testez avec des petits jobs pour estimer les ressources nécessaires.
  • Utilisez des partitions adaptées (par exemple, gpu pour les jobs GPU).
  • Surveillez l'utilisation des ressources avec sstat pour ajuster les allocations futures.
  • Évitez la surallocation pour ne pas bloquer inutilement les ressources du cluster.

7. Exemple complet

Voici un exemple de script de job avec une allocation de ressources optimisée :

#!/bin/bash
#SBATCH --job-name=mon_job
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=8
#SBATCH --mem=16G
#SBATCH --time=02:00:00
#SBATCH --gres=gpu:1
#SBATCH --partition=gpu
#SBATCH --output=mon_job_%j.out
#SBATCH --error=mon_job_%j.err

# Charger les modules nécessaires
module load cuda/11.0

# Exécuter le programme
./mon_programme

Soumettez le job avec :

sbatch mon_script_job.sh

En suivant ces étapes, vous pouvez gérer efficacement l'allocation de ressources dans SLURM et optimiser l'exécution de vos jobs.