Python-Job auf Slurm-Cluster, Knoten gegen Kerne
Ich habe eine äußerst grundlegende Frage, auf die ich irgendwie nie eine Antwort gefunden habe. Nehmen wir an, ich habe Zugriff auf einen Cluster, in dem Slurm ausgeführt wird, und ich muss einen Python-Job auf dem Cluster ausführen. Nehmen wir an, mein Code wurde nicht zur Unterstützung der Mehrfachverarbeitung geschrieben. Habe ich einen Grund, mehrere Kerne zu benötigen? Oder soll ich mich dann an 1 Knoten und 1 Kern halten?
Wenn ich dagegen fünfmal dasselbe Skript ausführen möchte (z. B. mit unterschiedlichen Eingabevariablen), gibt es einen Unterschied zwischen der Anforderung von 1 Knoten und der Zuweisung von 1 Kern zu jedem Job oder der Anforderung von 5 Knoten mit jeweils 1 Kern?
Antworten
Wenn Ihr Python-Skript nicht mehrere Threads verwendet, sollten Sie sich an eine Aufgabe ( -n1) mit einer CPU ( -c1) auf einem Knoten ( -N1) halten. Sie müssen dies nicht angeben, da dies ohnehin die Standardeinstellung ist. Wenn Sie weitere Ressourcen anfordern, werden diese nur verschwendet, da Sie sie nicht verwenden.
Allerdings: Einige Python-Bibliotheken für Multithread-Berechnungen, ohne dass diese explizit angegeben werden müssen. Wenn Sie also einige Numpy-Berechnungen durchführen, können Sie von mehreren Kernen profitieren .
Wenn ich dagegen fünfmal dasselbe Skript ausführen möchte (z. B. mit unterschiedlichen Eingabevariablen), gibt es einen Unterschied zwischen der Anforderung von 1 Knoten und der Zuweisung von 1 Kern zu jedem Job oder der Anforderung von 5 Knoten mit jeweils 1 Kern?
Ja, es gibt: Wenn Sie Slurm nach 5 Knoten mit 1 Aufgabe pro Knoten fragen, muss es warten, bis 5 Knoten Platz für eine Aufgabe haben. Selbst wenn beispielsweise ein Knoten mit 20 CPUs vollständig leer ist, wird Ihr Job nicht ausgeführt, da Sie explizit nach 5 Knoten gefragt haben. Daher würde ich empfehlen, 5 Jobs mit zu beginnen -n1.