Travail Python sur cluster slurm, nœuds vs cœurs

Aug 29 2020

J'ai une question extrêmement fondamentale à laquelle je n'ai jamais réussi à trouver de réponse. Supposons que j'ai accès à un cluster exécutant slurm et que j'ai besoin d'exécuter une tâche Python sur le cluster. Supposons que mon code n'a pas été écrit pour prendre en charge le multitraitement. Ai-je une raison d'exiger plusieurs cœurs? Ou devrais-je alors m'en tenir à 1 nœud et 1 cœur?

Inversement, si je voulais exécuter 5 fois le même script (avec différentes variables d'entrée par exemple), y a-t-il une différence entre exiger 1 nœud et attribuer 1 cœur à chaque travail, ou exiger 5 nœuds avec 1 cœur chacun?

Réponses

MarcusBoden Sep 01 2020 at 12:54

Si votre script python n'utilise pas plusieurs threads, alors oui, vous devez vous en tenir à une tâche ( -n1) avec un processeur ( -c1) sur un nœud ( -N1). Vous n'avez pas besoin de le spécifier car c'est de toute façon la valeur par défaut. Si vous demandez plus de ressources, elles seront simplement gaspillées, car vous ne les utilisez pas.

However: Some python libraries to multithreaded calculations without the need to specify them explicitly, so if you do some numpy calculations, you may benefit from multiple cores.

Conversely, if I wanted to run 5 times the same script (with different input variables for example), is there any difference between requiring 1 node and assigning 1 core to each job, or requiring 5 nodes with 1 core each?

Yes, there is: If you ask Slurm for 5 Nodes with 1 task per node, then it will have to wait until 5 nodes have room for a task. Even if for example a node with 20 CPUs is completely empty, your job won't run, as you explicitly asked for 5 nodes. So I would advise to start 5 jobs with -n1.