Lanzar trabajos
Siempre use srun o sbatch para iniciar jobs.
Sí no inicio sus jobs con sbatch o srun significa que estan ejecutandose en el frontend del cluster y serán cancelados sin previo aviso.
Iniciar un trabajo (job)
La forma de usar el cluster es en base a trabajos batch (job) en la cual se define la cantidad de recursos a solicitar y el software especifico a ejecutar.
Script base para lanzar trabajos, se debe modificar en base a los recursos solicitados y el software usado. Los Job que no utilicen todos los recursos solicitados serán cancelados sin previo aviso.
Script para usar un nodo de forma simple en base al número de tareas y tiempo de computo
#!/bin/bash
## save this file as myjob.slurm
## nodes request and configuration
#SBATCH --job-name=mydemojob # job Name
#SBATCH --ntasks=4 # Total number of tasks requested
#SBATCH --mem=1G # total of memory requested
#SBATCH --time=01:30:00 # Run time (hh:mm:ss) - 1.5 hours
#SBATCH --partition=compute-slim # Name of partition
## output
#SBATCH --output=%u_%x_%j.out # output userName_jobName_jobId.out
# Put your software in this line
hostname
Script para usar un nodo en especifico
#!/bin/bash
## save this file as myjob.slurm
## nodes request and configuration
#SBATCH --job-name=mydemojob # job Name
#SBATCH --ntasks=4 # Total number of tasks requested
#SBATCH --mem=1G # total of memory requested
#SBATCH --time=01:30:00 # Run time (hh:mm:ss) - 1.5 hours
#SBATCH --partition=compute-slim # Name of partition
#SBATCH --nodelist=compute-slim-0-0 # Run in specific node
## output
#SBATCH --output=%u_%x_%j.out # output userName_jobName_jobId.out
# Put your software in this line
hostname
La cantidad de threads y memoria sólo son útiles cuando el código del job puede aprovechar estos recursos. Sí usa un programa consulte la documentación o asegúrese que su código pueda usar multiples threads.
Ejecutaremos desde nuestra cuenta el comando " sbatch" y el archivo "myjob.slurm" lo que nos entregará el id asignado a nuestro job

Al terminar el job veremos que nos crea un archivo de salida en base al patrón indicado

Ver estado de un trabajo
Para ver el estado de un trabajo ya ejecutado podemos usar sacct -j junto con el número del trabajo
sacct -j IdJob

Cancelar un trabajo
Para cancelar un trabajo debemos usar el comando scancel y el id del job

Ver recursos disponibles
Cuando se realice un mantenimiento de los nodos de computo no se avisará (estado drain ). Ya que los nodo se reincorporará en el menor tiempo posible. En este estado es posible encolar jobs para que se ejecuten cuando el nodo sea reincorporado.
Sólo se avisará en los casos que el clúster completo deba ser apagado generalmente debido a trabajos físicos en el centro de datos. En este estado será imposible conectarse y encolar jobs
Para ver el estado del cluster podemos usar el comando sinfo, la columna STATE nos indica el estado del nodo y la columna TIMELIMIT nos indica el tiempo máximo que un job puede ejecutarse en una cola.
down: El nodo esta fuera de linea
idle: El nodo esta libre
alloc: el nodo esta usado al 100%
mix: El nodo esta en uso pero no al 100%
drng: El nodo esta en transición desde un estado alloc o mix al estado drain
drain: El nodo esta en mantenimiento podemos consultar detalles con el comando "sinfo -R"
sinfo

Sí necesita usar un nodo en estado down, drng o drain use sbatch para ingresar su job a la cola. Los jobs se ejecutarán según la prioridad en la cola cuando el nodo vuelva a estar operativo.
Existe un caso particular en que los nodos pueden estar en estado idle pero los jobs no se ejecutan inmediatamente. Esto se debe a que el cluster tiene una ventana de mantenimiento planificada y el job no alcanza a finalizar antes de que el mantenimiento inicie (Ej es lunes mi job necesita 4 días de computo pero la ventana de mantenimiento inicia el miercoles).
Puede consultar con el comando: scontrol show reservations
Ver cola de trabajos
Con el comando squeue se puede ver la cola y saber en que estado se encuentra nuestro job. En general un job en una ejecución normal debería estar en dos estados PENDING (PD) esperando en la cola o RUNNING (R) ejecutándose en un nodo.
# ver cola de trabajo del usuario
squeue -u `whoami`
# ver cola de trabajo general de todo el clúster
squeue
Lanzar varios trabajos a la vez (array job)
Cuando se requiera lanzar varias veces un job donde la única diferencia entre ellos sea el input (argumentos) que tendrá nuestro programa a ejecutar se recomienda usar la siguiente configuración
#!/bin/bash
#SBATCH --job-name=array_job
#SBATCH --time=00:10:00
#SBATCH --ntasks=1
#SBATCH --mem=1G
## this line is the array count, in this case it will be excecuted 3 times
#SBATCH --array=1-3
## output file unique for each job in array
#SBATCH --output=logs/output_%A_%a.out
## array with input string
data=(input1.txt input2.txt input3.txt)
## print the hostname to know the job is executed in a compute node
hostname
## Loop part,SLURM_ARRAY_TASK_ID will move from 1 to 3, and the element read from the array
i=$((SLURM_ARRAY_TASK_ID - 1))
echo "task_id: ${SLURM_ARRAY_TASK_ID} - data[$i]: ${data[$i]}"
## execute your code and use the element i in the data array
python readTest.py ${data[$i]}
Last updated