Trabalho Python em cluster slurm, nós vs núcleos
Tenho uma pergunta extremamente básica, para a qual de alguma forma nunca consegui encontrar uma resposta. Vamos supor que eu tenha acesso a um cluster executando slurm e que precise executar um trabalho Python no cluster. Vamos supor que meu código não tenha sido escrito para suportar multiprocessamento. Eu tenho algum motivo para exigir vários núcleos? Ou devo me limitar a 1 nó e 1 núcleo?
Por outro lado, se eu quisesse executar 5 vezes o mesmo script (com variáveis de entrada diferentes, por exemplo), há alguma diferença entre exigir 1 nó e atribuir 1 núcleo a cada trabalho, ou exigir 5 nós com 1 núcleo cada?
Respostas
Se o seu script python não usa vários threads, então sim, você deve se limitar a uma tarefa ( -n1) com uma CPU ( -c1) em um nó ( -N1). Você não precisa especificar isso, pois é o padrão de qualquer maneira. Se você solicitar mais recursos, eles serão desperdiçados, pois você não os utiliza.
No entanto: Algumas bibliotecas Python para cálculos multithread sem a necessidade de especificá-los explicitamente, portanto, se você fizer alguns cálculos numpy, poderá se beneficiar de vários núcleos .
Por outro lado, se eu quisesse executar 5 vezes o mesmo script (com variáveis de entrada diferentes, por exemplo), há alguma diferença entre exigir 1 nó e atribuir 1 núcleo a cada trabalho, ou exigir 5 nós com 1 núcleo cada?
Sim, há: Se você pedir ao Slurm 5 nós com 1 tarefa por nó, ele terá que esperar até que 5 nós tenham espaço para uma tarefa. Mesmo se, por exemplo, um nó com 20 CPUs estiver completamente vazio, seu trabalho não será executado, pois você solicitou explicitamente 5 nós. Portanto, eu aconselharia começar 5 trabalhos com -n1.