Lanzar trabajos

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

myjob.slurm
#!/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

myjob.slurm
#!/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 memoría y threads que se usarán dependen del tipo de job que se ejecutará. Se recomienda usar 1 thread y 1G como norma general y modificar según corresponda.

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

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

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]}

Este archivo creará 3 jobs con la misma solicitud de recursos, pero cada job ejecutará lo siguiente:

jobId_1 : python readTest.py input1.txt

jobId_2: python readTest.py input2txt

jobId_3: python readTest.py input3.txt

Last updated