Ejecutar un trabajo en la cola#
Normalmente, un trabajo es creado mediante un script de lanzamiento (shell script) donde las primeras líneas del archivo deben contener las directivas SBATCH así como la línea de comienzo #!/bin/bash
que indica el interprete de shell a usar.
Mi primer trabajo con slurm#
En el siguiente ejemplo es un sencillo script que le ayude a familiarizarse con ellos.
Simplemente realiza la solicitud de recursos (particiones, nº de nodos, memoria, tiempo máximo de ejecución, directorios de trabajo, ficheros de salida,....),comienza con una ejecución de comandos linux básicos (steps) y espera 120 segundos antes de finalizar el trabajo.
#!/bin/bash
#SBATCH --job=mi_primer_test # Nombre del trabajo
#SBATCH --partition=batch # Partición (express/sbatch/long/fatnodes)
#SBATCH --nodes=1 # Nº de nodos
#SBATCH --mem=30000M # Memoria solicitada por nodo (30000M or 60000M)
#SBATCH --tasks-per-node=1 # Nº tareas por nodo
#SBATCH --constrains=sandy # sandy, ilk (icelake)... arquitecture
#SBATCH --time=02:00 # Límite de tiempo
#SBATCH --output=file_%j.log # Log de salida estandar
#SBATCH --error=file_%j.err # Log de salida errores
#SBATCH -D . # Directorio de trabajo
#SBATCH --mail-user=EMAIL # Donde será enviado el mail
#SBATCH --mail-type=END,FAIL # Eventos email
##########################################################
# UN COMENTARIO
echo "Comienza mi script"
pwd
hostname
date
sleep 120
echo "Finaliza mi script"
El mismo script se puede escribir con la opciónes corta:
#!/bin/bash
#SBATCH -J mi_primer_test # Nombre del trabajo
#SBATCH -p batch # Partición (express/sbatch/long/fatnodes)
#SBATCH -N 1 # Nº de nodos
#SBATCH --mem=30000M # Memoria solicitada por nodo (30000M or 60000M)
#SBATCH --tasks-per-node=1 # Nº tareas por nodo
#SBATCH --constrains=sandy # sandy, ilk (icelake)... arquitecture
#SBATCH -t 02:00 # Límite de tiempo
#SBATCH -o file%j.log # Log de salida
#SBATCH -e file_%j.err # Log de salida errores
#SBATCH -D . # Directorio de trabajo
#SBATCH --mail-user=EMAIL # Donde será enviado el mail
#SBATCH –mail-type=END,FAIL # Eventos email
##########################################################
# UN COMENTARIO
echo "Comienza mi script"
pwd
hostname
date
sleep 120
echo "Finaliza mi script"
Guarde el fichero creado anteriormente con un nombre apropiado en un directorio de trabajo creado para ello, por ejemplo mi_primer_test.sh
o mi_primer_test.sbatch
.
Info
Hay determinadas opciones que tienen valores ya establecidos por defecto, como es la partición, donde la partición por defecto es la batch
.
Para ver todas las opciones disponibles sobre las directivas sbatch puede visitar la documentación oficial de slurm o ejecutando los siguientes comandos:
Como lanzar un job con sbatch#
Para lanzar el trabajo solo tiene que ejecutar el siguiente comando.
Mi segundo trabajo con slurm#
En este segundo ejemplo simplemente cargaremos una aplicación (module) para poder usarla. Concretamente un módulo de python y ejecutaremos un pequeño script de python.
Es recomendable crear un entorno virtual para ejecutar python (virtualenv, venv, pyenv, conda environment, pipenv). Por ejemplo para usar venv
, en el directorio de trabajo ejecutar:
- Crear el script de lanzamiento:
#!/bin/bash
#SBATCH --job=mi_python_test # Nombre del trabajo
#SBATCH --nodes=1 # Nº de nodos
#SBATCH --constrains=sandy # sandy, ilk (icelake)... arquitecture
#SBATCH --time=02:00 # Límite de tiempo
#SBATCH --output=file_%j.log # Log de salida estandar
#SBATCH --error=file_%j.err # Log de salida errores
#SBATCH --chdir=. # Directorio de trabajo
#SBATCH --mail-user=email # Donde será enviado el mail
#SBATCH --mail-type=END,FAIL # Eventos email
##########################################################
# antes de cargar el módulo vemos si ha ejecutable de python3
echo "python3 antes:"; python3 --version
# Carga modulos
module purge
module load GCCcore/11.2.0 Python/3.8.6
echo "python3 despues"; python3 --version
which python3
echo "COMIENZA STEP1"
# Activo el entorno de python
source /path/workdir/venv/bin/activate
# Lanzamos el script de python
python3 hello_world.py
echo "FINALIZA MI SCRIPT"
Recuerde que su directorio de trabajo es .
, que es el mismo directorio donde está script de ejecución y. Si hello_world.py
está en otro directorio, debe especificar la ruta completa.
Otra opción es usar la variable de entorno de slurm* SLURM_SUBMIT_DIR
. Para lanzar el trabajo: