Ich versuche zu verstehen, was der Unterschied zwischen SLURMs srunund sbatchBefehlen 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 , srunist für die Einreichung von Arbeitsplätzen und sbatchfü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 srunvs sbatch?
Ein besonderer Unterschied ist , dass srunwird einen Fehler verursachen , wenn sie testjob.shnicht Ausführbarkeitsberechtigung dh haben chmod +x testjob.shwährend sbatchglü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 srunhäufig in sbatchSkripten 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 srunalleine verwenden?
srundas 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.shvs (b)sbatch myjob.shvs (c)srun myjob.shvs (d)srun runjob.sh? (Natürlich ist der letzte albern, aber ich bin neugierig).