Uso avanzado de SLURM

Para programas que hagan un uso más complejo de los recursos del cluster, como programas paralelo y distribuidos, CUDA, etc., es posible que el scrip slanzarv resulte insuficiente para describir los requisitos del trabajo.

En tal caso, o simplemente porque así se prefiere, se puede utilizar directamente SLURM.

El modo de empleo sería crear un script con las especificaciones del trabajos y luego enviarlo a ejecución mediante sbatch.

Ejemplo de script con la descripción del trabajo:

#!/bin/sh
#SBATCH -N 2 #(solicita dos nodos)
#SBATCH -n 2 #(dos tareas en total)
#SBATCH -p short #(solicita la partición específica. Pueden solicitarse varias separadas por comas)
#SBATCH -t 00:00:30 #(30 sec ejecución)
srun hostname

En el script se solicitan una serie de recursos y tiempo de ejecución en una partición específica y finalmente se ejecuta el programa (hostname).

Si llamamos job.sh al script, se enviaría a SLURM con:

$ sbatch ./job.sh

Las opciones de sbatch también se pueden indicar a través de sbatch, en el momento del envío. Las opciones así indicadas tienen preferencia sobre las del script. Así, para enviar el script anterior a la partición​ htc-general, ​ sin cambiar el script, se ejecutaría:

$ sbatch -p htc-general ./job.sh

Ejemplos de scripts

openMP

#!/bin/bash
#SBATCH -n 1 #(una tarea en total)
#SBATCH -c 8 #(8 cores por tarea)
#SBATCH -t 00:10:00 #(10 min ejecución)

srun ./omphello_f

openMP con selección de partición

#!/bin/bash
#SBATCH -n 1 #(una tarea en total)
#SBATCH -c 8 #(8 cores por tarea)
#SBATCH -t 00:10:00 #(10 min ejecución)
#SBATCH -p short

srun ./omphello_f

MPI

#!/bin/bash
#SBATCH -N 2
#SBATCH -n 8
#SBATCH --ntasks-per-node=4
#SBATCH -c 2
#SBATCH -p htc-general
#SBATCH -t 00:10:00

srun ./pi3

Se solicita la ejecución en 2 nodos, usando 8 procesos (-n 8) y 4 procesos por nodo (–ntasks-per-node=4) y dos cores por proceso (-c 2). En total 16 cores distribuidos en 8 por nodo.

Memoria

Las opciones relacionadas con la solicitud de memoria son:

--mem 5GB (memoria por nodo)
--mem-per-cpu 2GB (memoria por core)