Advanced Job Submission/fr
Gérer de nombreux cas de calcul¶
Les outils suivants sont utiles pour traiter plusieurs fichiers, avec ou sans différentes combinaisons de paramètres (parameter sweep) :
- Vecteurs de tâches : pour soumettre plusieurs tâches similaires dans un seul script, une méthode idéale lorsque chaque tâche dure plus d’une heure et que leur nombre est inférieur à mille;
- GNU Parallel : pour exécuter et gérer plusieurs calculs courts, y compris des parameter sweeps, sur un nœud réservé via une tâche parallèle;
- GLOST (Greedy Launcher Of Small Tasks) : utilise MPI et une architecture gestionnaire-travailleur pour exécuter progressivement une longue liste de tâches séquentielles sur les cœurs CPU réservés via une tâche parallèle;
- META : une suite de scripts conçus chez SHARCNET pour automatiser le calcul à haut débit (exécution d’un grand nombre de calculs séquentiels, parallèles ou GPU).
Dépendance entre les tâches¶
Alors que les tâches Slurm constituent les éléments de base des pipelines de calcul, les dépendances entre les tâches sont les liens et les relations entre les étapes d’un pipeline. Par exemple, si deux tâches différentes doivent s’exécuter l’une après l’autre, la seconde dépend de la première. La seconde tâche peut dépendre de l’heure de début, l’heure de fin ou le statut final de la première tâche. En général, on souhaite que la seconde tâche ne démarre qu'une fois la première terminée avec succès. Par exemple,
JOBID1=$(sbatch --parsable job1.sh) # Sauvegarde l'ID de la première tâche
sbatch --dependency=afterok:$JOBID1 job2.sh # Dépend de la première tâche
Remarques
- Plusieurs tâches peuvent avoir la même dépendance (plusieurs tâches en attente d'une seule tâche).
- Une tâche peut avoir plusieurs dépendances (une tâche en attente de plusieurs tâches).
- Il existe plusieurs types de dépendances :
after,afterany,afterok,afternotok, etc. Pour plus de détails, voir l'option--dependencyà la page officielle de documentationsbatch.
Tâches hétérogènes¶
L'ordonnanceur Slurm prend en charge les tâches hétérogènes, ce qui peut s'avérer très utile si vous savez à l'avance que votre application MPI nécessitera davantage de cœurs CPU et de mémoire pour le processus principal que pour les autres processus.
Par exemple, si le processus principal nécessite 8 cœurs et un total de 32Go de RAM, tandis que les autres processus ne nécessitent que 1 cœur et 1Go de RAM, nous pouvons spécifier les deux types d'exigences dans un même script de tâche.
# heterogeneous_mpi_job.sh
#!/bin/bash
#SBATCH --ntasks=1 --cpus-per-task=8 --mem-per-cpu=4000M
#SBATCH hetjob
#SBATCH --ntasks=15 --cpus-per-task=1 --mem-per-cpu=1000M
srun --cpus-per-task=8 : --cpus-per-task=1 application.exe
Nous pouvons aussi séparer les demandes de ressources par un deux-points (:) sur la ligne de commande sbatch.
```bash sbatch --ntasks=1 --cpus-per-task=8 --mem-per-cpu=4000M : --ntasks=15 --cpus-per-task=1 --mem-per-cpu=1000M mpi_job.sh