Ich versuche zu verstehen, was der Unterschied zwischen SLURMs srun
und sbatch
Befehlen ist. Ich freue mich über eine allgemeine Erklärung und nicht über spezifische Antworten auf die folgenden Fragen, aber hier sind einige spezifische Verwirrungspunkte, die als Ausgangspunkt dienen und eine Vorstellung davon geben können, wonach ich suche.
Gemäß der Dokumentation , srun
ist für die Einreichung von Arbeitsplätzen und sbatch
für Arbeitsplätze für die spätere Ausführung einreichen, aber der praktische Unterschied ist mir unklar, und ihr Verhalten scheint das gleiche zu sein. Zum Beispiel habe ich einen Cluster mit 2 Knoten mit jeweils 2 CPUs. Wenn ich srun testjob.sh &
5x hintereinander ausführe , wird der fünfte Job in eine Warteschlange gestellt, bis eine CPU verfügbar ist, ebenso wie die Ausführung sbatch testjob.sh
.
Um die Frage konkreter zu machen, denke ich, dass ein guter Ausgangspunkt sein könnte: Was kann ich mit einem tun, was ich mit dem anderen nicht tun kann, und warum?
Viele der Argumente für beide Befehle sind gleich. Diejenigen , die die wichtigsten scheinen , sind --ntasks
, --nodes
, --cpus-per-task
, --ntasks-per-node
. Wie hängen diese miteinander zusammen und wie unterscheiden sie sich für srun
vs sbatch
?
Ein besonderer Unterschied ist , dass srun
wird einen Fehler verursachen , wenn sie testjob.sh
nicht Ausführbarkeitsberechtigung dh haben chmod +x testjob.sh
während sbatch
glücklich es laufen wird. Was passiert "unter der Haube", was dazu führt, dass dies der Fall ist?
In der Dokumentation wird auch erwähnt, dass srun
häufig in sbatch
Skripten verwendet wird. Dies führt zu der Frage: Wie interagieren sie miteinander und was ist der "kanonische" Anwendungsfall für jeden von ihnen? Konkret, würde ich jemals srun
alleine verwenden?
srun
das Einreichungsskript aufzurufen ? Vielleicht bin ich verwirrt über die Bedeutung eines "Jobschritts". Wenn ich zum Beispiel ein Skript namens haberunjob.sh
, das enthält#!/bin/bash srun myjob.sh
, gibt es einen praktischen Unterschied zwischen dem Aufruf von (a)sbatch runjob.sh
vs (b)sbatch myjob.sh
vs (c)srun myjob.sh
vs (d)srun runjob.sh
? (Natürlich ist der letzte albern, aber ich bin neugierig).