Aller au contenu principal

Bonnes pratiques avec SLURM

Une bonne utilisation de SLURM permet de réduire les temps d'attente, de mieux partager les ressources et de rendre les calculs plus fiables et reproductibles.

Dimensionner les ressources​

Demandez uniquement les ressources nécessaires :

  • partition adaptée ;
  • nombre de tâches cohérent avec le programme ;
  • CPU par tâche réellement exploités ;
  • mémoire suffisante mais raisonnable ;
  • GPU uniquement si l'application l'utilise ;
  • durée légèrement supérieure au temps prévu.

Une demande surdimensionnée peut augmenter le temps d'attente et empêcher d'autres jobs de démarrer.

Tester avant la production​

Utilisez une session interactive courte ou une partition de test pour :

  • vérifier les modules ;
  • tester les chemins d'accès ;
  • valider les paramètres ;
  • mesurer le temps d'exécution ;
  • estimer la mémoire et les GPU nécessaires.

Passez ensuite à un job batch pour la production.

Utiliser des scripts reproductibles​

Conservez dans le script :

  • les directives #SBATCH ;
  • les modules chargés ;
  • les variables importantes ;
  • les chemins d'entrée et de sortie ;
  • les paramètres du programme ;
  • la commande exacte d'exécution.

Exemple :

#!/bin/bash
#SBATCH --job-name=analyse
#SBATCH --partition=std
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=4
#SBATCH --mem=8G
#SBATCH --time=01:00:00
#SBATCH --output=logs/%x-%j.out
#SBATCH --error=logs/%x-%j.err

set -euo pipefail

module purge
module load <module>
mkdir -p logs
python script.py

Versionnez les scripts et les fichiers de configuration avec Git lorsque cela est possible.

Surveiller la consommation​

Après chaque test significatif :

sacct -j <job_id> \
--format=JobID,State,Elapsed,AllocCPUS,MaxRSS,AllocTRES

Comparez les ressources demandées avec les ressources réellement consommées. Ajustez les prochains jobs en conséquence.

Choisir batch ou interactif​

Utilisez une session interactive pour :

  • développer ;
  • tester ;
  • déboguer ;
  • exécuter un traitement court ;
  • utiliser une application graphique.

Utilisez un job batch pour :

  • les traitements longs ;
  • les campagnes de calcul ;
  • les workflows automatisés ;
  • les traitements qui doivent continuer sans terminal ouvert.

Utiliser les ressources GPU correctement​

  • Demandez un GPU uniquement si le logiciel est compatible.
  • Vérifiez le GPU attribué avec nvidia-smi.
  • Adaptez le nombre de CPU à la capacité d'alimentation du GPU.
  • Vérifiez la mémoire GPU nécessaire.
  • Ne réservez pas plusieurs GPU si le programme n'en utilise qu'un.
  • Documentez le modèle GPU utilisé pour les benchmarks.

Gérer les données​

Utilisez l'espace adapté au cycle de vie des données :

  • $HOME pour les fichiers personnels et les configurations ;
  • l'espace projet pour les données partagées et les résultats à conserver ;
  • $SCRATCH pour les fichiers temporaires et intermédiaires ;
  • le stockage local du nœud uniquement pour les besoins temporaires du job.

Ne considérez pas $SCRATCH ni le stockage local comme des archives permanentes.

Consultez Espaces de stockage.

Gérer les logs​

Utilisez des noms de fichiers qui identifient le job :

#SBATCH --output=logs/%x-%j.out
#SBATCH --error=logs/%x-%j.err

Pour un job array :

#SBATCH --output=logs/%x-%A_%a.out
#SBATCH --error=logs/%x-%A_%a.err

Conservez les logs importants avec les scripts et les paramètres utilisés.

Organiser les workflows​

Utilisez les dépendances SLURM pour imposer un ordre entre les étapes :

job_prepare=$(sbatch --parsable preparation.slurm)
sbatch --dependency=afterok:"$job_prepare" analyse.slurm

Utilisez un job array lorsque le même script doit traiter plusieurs entrées indépendantes :

#SBATCH --array=0-99%10

Ces mécanismes évitent de lancer manuellement des dizaines de jobs et facilitent la traçabilité.

Respecter les nœuds de connexion​

Les nœuds de connexion sont destinés à :

  • préparer les scripts ;
  • compiler de petits programmes ;
  • gérer les fichiers ;
  • consulter les jobs ;
  • soumettre des allocations.

N'y exécutez pas de calcul long ou fortement consommateur de CPU, de mémoire ou de GPU.

Fermer les sessions inutilisées​

Annulez les jobs devenus inutiles :

scancel <job_id>

Depuis Open OnDemand, supprimez les sessions terminées ou inutilisées dans le menu Jobs. Fermer un onglet du navigateur ne suffit pas nécessairement à arrêter le job.

Sécurité​

  • Ne mettez jamais de mot de passe dans un script.
  • Ne stockez pas de jeton d'accès dans un dépôt Git.
  • Protégez les fichiers contenant des informations sensibles.
  • Vérifiez les permissions des fichiers de configuration.
  • N'utilisez pas les identifiants d'un autre utilisateur.
  • Signalez les comportements inhabituels au support.

Reproductibilité​

Pour chaque calcul important, conservez :

  • le script SLURM ;
  • la version du code ;
  • les modules et versions utilisés ;
  • les paramètres du programme ;
  • les ressources demandées ;
  • les informations du job ;
  • les logs ;
  • les résultats et leur provenance.

Vous pouvez relever les détails du job avec :

scontrol show job <job_id>

Checklist avant soumission​

  • La partition est-elle adaptée ?
  • Le nombre de tâches correspond-il au programme ?
  • Le nombre de CPU est-il justifié ?
  • La mémoire est-elle suffisante ?
  • Le GPU est-il réellement nécessaire ?
  • La durée respecte-t-elle la limite de la partition ?
  • Les fichiers d'entrée sont-ils accessibles ?
  • Les répertoires de sortie existent-ils ?
  • Les logs sont-ils configurés ?
  • Le script a-t-il été testé sur un petit cas ?

Pages associées​