Estoy tratando de entender cuál es la diferencia entre SLURM srun
y sbatch
comandos. Estaré feliz con una explicación general, en lugar de respuestas específicas a las siguientes preguntas, pero aquí hay algunos puntos específicos de confusión que pueden ser un punto de partida y dar una idea de lo que estoy buscando.
Según la documentación , srun
es para enviar trabajos y sbatch
es para enviar trabajos para ejecución posterior, pero la diferencia práctica no me queda clara y su comportamiento parece ser el mismo. Por ejemplo, tengo un clúster con 2 nodos, cada uno con 2 CPU. Si ejecuto srun testjob.sh &
5 veces seguidas, pondrá en cola el quinto trabajo hasta que haya una CPU disponible, al igual que la ejecución sbatch testjob.sh
.
Para hacer la pregunta más concreta, creo que un buen punto de partida podría ser: ¿Cuáles son algunas de las cosas que puedo hacer con una que no puedo hacer con la otra y por qué?
Muchos de los argumentos de ambos comandos son los mismos. Los que parecen los más relevantes son --ntasks
, --nodes
, --cpus-per-task
, --ntasks-per-node
. ¿Cómo se relacionan entre sí y en qué se diferencian de srun
vs sbatch
?
Una diferencia particular es que srun
causará un error si testjob.sh
no tiene permiso de ejecución, es decir, chmod +x testjob.sh
cuando sbatch
lo ejecutará felizmente. ¿Qué está sucediendo "bajo el capó" que hace que este sea el caso?
La documentación también menciona que srun
se usa comúnmente dentro de los sbatch
scripts. Esto lleva a la pregunta: ¿Cómo interactúan entre sí y cuál es el caso de uso "canónico" para cada uno de ellos? Específicamente, ¿alguna vez lo usaría srun
solo?
srun
dentro del guión de envío? Quizás estoy confundido sobre el significado de un "paso laboral". Por ejemplo, si tengo un script llamadorunjob.sh
que contiene#!/bin/bash srun myjob.sh
, ¿hay una diferencia práctica entre llamar (a)sbatch runjob.sh
vs (b)sbatch myjob.sh
vs (c)srun myjob.sh
vs (d)srun runjob.sh
? (Claramente el último es una tontería, pero tengo curiosidad).