Estou tentando entender qual é a diferença entre SLURM srune sbatchcomandos. Ficarei feliz com uma explicação geral, ao invés de respostas específicas para as seguintes perguntas, mas aqui estão alguns pontos específicos de confusão que podem ser um ponto de partida e dar uma ideia do que estou procurando.
De acordo com a documentação , sruné para enviar trabalhos, e sbatché para enviar trabalhos para execução posterior, mas a diferença prática não é clara para mim, e o comportamento deles parece ser o mesmo. Por exemplo, tenho um cluster com 2 nós, cada um com 2 CPUs. Se eu executar srun testjob.sh &5x seguidas, ele enfileira perfeitamente o quinto trabalho até que uma CPU fique disponível, assim como a execução sbatch testjob.sh.
Para tornar a pergunta mais concreta, acho que um bom lugar para começar pode ser: Quais são algumas coisas que posso fazer com um e não posso fazer com o outro, e por quê?
Muitos dos argumentos para ambos os comandos são os mesmos. Os que parecem as mais relevantes são --ntasks, --nodes, --cpus-per-task, --ntasks-per-node. Como eles estão relacionados entre si e como eles diferem em relação a srunvs sbatch?
Uma diferença em particular é que sruncausará um erro se testjob.shnão tiver permissão de executável, ou seja, chmod +x testjob.shquando sbatcho executará sem problemas. O que está acontecendo "por baixo do capô" que faz com que isso seja o caso?
A documentação também menciona que sruné comumente usado dentro de sbatchscripts. Isso leva à questão: como eles interagem entre si e qual é o caso de uso "canônico" para cada um deles? Especificamente, eu usaria srunsozinho?
srundentro do script de envio? Talvez eu esteja confuso sobre o significado de "etapa do trabalho". Por exemplo, se eu tiver um script chamadorunjob.shque contém#!/bin/bash srun myjob.sh, há uma diferença prática entre chamar (a)sbatch runjob.shvs (b)sbatch myjob.shvs (c)srun myjob.shvs (d)srun runjob.sh? (Claramente o último é bobo, mas estou curioso).