SLURM " srun` vs `sbatch et de leurs paramètres
J'essaie de comprendre quelle est la différence entre SLURM de srun
et sbatch
commandes. Je serai heureux avec une explication générale, plutôt que des réponses aux questions suivantes, mais voici quelques points particuliers de la confusion qui peut être un point de départ et de donner une idée de ce que je suis à la recherche pour.
Selon la la documentation, srun
est pour l'envoi de tâches, et sbatch
est pour l'envoi de tâches pour exécution ultérieure, mais en pratique, la différence est claire pour moi, et leur comportement semble être le même. Par exemple, j'ai un cluster avec 2 nœuds, chacun avec 2 Processeurs). Si j'exécute srun testjob.sh &
5x de suite, il faudra bien la queue de la cinquième jusqu'à ce qu'un CPU devient disponible, tout comme l'exécution de sbatch testjob.sh
.
De faire de la question plus concrète, je pense qu'un bon endroit pour commencer peut-être: Quelles sont les choses que je peux faire avec celui que j'ai ne peut pas faire avec les autres, et pourquoi?
Nombre des arguments pour les deux commandes sont les mêmes. Celles qui semblent les plus pertinentes sont --ntasks
, --nodes
, --cpus-per-task
, --ntasks-per-node
. Comment sont-ils liés les uns aux autres, et en quoi elles diffèrent pour srun
vs sbatch
?
L'un particulier de la différence, c'est que srun
provoquera une erreur si testjob.sh
n'est pas exécutable, c'est à dire l'autorisation chmod +x testjob.sh
alors que sbatch
seront heureux de vous exécuter. Ce qui se passe "sous le capot" qui provoque ce le cas?
La documentation mentionne également que srun
est couramment utilisé à l'intérieur de sbatch
scripts. Cela conduit à la question: Comment ils interagissent les uns avec les autres, et qu'est-ce que le "canonique" cas d'utilisation pour chacun d'eux? Plus précisément, j'utilise jamais srun
par lui-même?
Vous devez vous connecter pour publier un commentaire.
La documentation dit
tout
Ils acceptent tous deux pratiquement le même jeu de paramètres. La principale différence est que
srun
est interactif et de blocage (vous obtenez le résultat de votre terminal et vous ne pouvez pas écrire d'autres commandes jusqu'à ce qu'il est fini), alors quesbatch
est le traitement par lot et non-bloquant (les résultats sont écrits dans un fichier et vous pouvez envoyer d'autres commandes tout de suite).Si vous utilisez
srun
dans le fond, avec les&
signe, puis vous supprimez le 'blocage' fonction desrun
, qui devient interactif mais non bloquant. Il est encore interactif bien, ce qui signifie que la sortie de l'encombrement de votre terminal, et lesrun
processus sont liés à votre terminal. Si vous vous déconnectez, vous perdrez le contrôle sur eux, ou ils pourraient être tués (selon qu'ils utilisent desstdout
ou pas au fond). Et ils seront tués si l'ordinateur auquel vous vous connectez pour la soumission de travaux est en cours de redémarrage.Si vous utilisez
sbatch
, vous vous soumettez votre travail et il est géré par Slurm ; vous pouvez vous déconnecter, de tuer votre terminal, etc. sans conséquence. Votre travail n'est plus lié à un processus en cours d'exécution.Une fonctionnalité qui est disponible à
sbatch
et de ne passrun
est emploi arrrays. Commesrun
peut être utilisé à l'intérieur d'unsbatch
script, il n'y a rien que vous ne pouvez pas faire avecsbatch
.Tous les paramètres
--ntasks
,--nodes
,--cpus-per-task
,--ntasks-per-node
ont le même sens dans les deux commandes. C'est vrai pour presque tous les paramètres, à l'exception notable de--exclusive
.srun
immédiatement exécute le script sur la machine distante, tandis quesbatch
copies le script dans un espace de stockage interne, puis l'envoie sur le nœud de calcul lorsque le travail commence. Vous pouvez vérifier ceci en modifiant votre script de soumission après qu'il a été soumis; les modifications ne seront pas prises en compte (voir cette).Vous utilisez généralement
sbatch
de soumettre un emploi etsrun
dans le script de soumission à créer des étapes de travail que Slurm les appelle.srun
est utilisé pour lancer le processus. Si votre programme est un parallèle MPI programme,srun
prend en charge la création de tous les processus MPI. Si non,srun
permettra de exécuter votre programme autant de fois que spécifié par le--ntasks
option. Il existe de nombreux cas d'utilisation en fonction de si votre programme est mis en parallèle ou non, a une longue durée ou pas, est composé d'un seul fichier exécutable ou pas, etc. À moins d'indication contraire,srun
hérite par défaut, les options pertinentes de lasbatch
ousalloc
lequel il s'exécute, en vertu de (à partir de ici).Autres que pour les petits tests, aucun. Une utilisation courante est
srun --pty bash
pour obtenir un shell sur un calcul d'emploi.srun
à l'intérieur du script de soumission? Peut-être que je suis confus au sujet de la signification d'une "étape de travail." Par exemple, si j'ai un script qui s'appellerunjob.sh
qui contient#!/bin/bash srun myjob.sh
, est-t-il une différence entre un appel (un)sbatch runjob.sh
vs (b)sbatch myjob.sh
vs (c)srun myjob.sh
vs (d)srun runjob.sh
? (Le dernier est bête, mais je suis curieux).srun
à l'intérieur de lasbatch
script de soumission. Cependant, j'ai constaté que les commandes sanssrun
dans le script de soumission sera exécuté de la même manière. Est-il réellement une différence entre les quatre invocations je l'ai mentionné ci-dessus?#SBATCH --argument
ne sont pas correctement mis en évidence, et ressemblent à des commentaires (dans Vim). Avez-vous un thème personnalisé?Ce n'est pas réellement répondre pleinement à la question, mais voici quelques informations que j'ai trouvé qui peut être utile pour quelqu'un dans le futur:
À partir d'un sujet que j'ai trouvé avec une question similaire:
Des informations supplémentaires à partir de la SLURM FAQ page.