| | 1 | == Formato básico de un fichero slurm == |
| | 2 | Un fichero slurm no es más que un shell script que mediante una cabecera de líneas de comentario, instruye a slurm sobre las características del trabajo a realizar, y mediante unas líneas de órdenes lanza los procesos en sí. |
| | 3 | |
| | 4 | A los ficheros slurm se le suele poner la extensión {{{.slurm}}}, pero es algo convencional y no obligatorio. De esa manera podríamos tener un fichero slurm que se llamara {{{trabajo-uno.slurm}}} |
| | 5 | |
| | 6 | El caso más sencillo de uso sería algo así: |
| | 7 | |
| | 8 | {{{ |
| | 9 | #!/bin/bash |
| | 10 | |
| | 11 | #SBATCH -J hello |
| | 12 | #SBATCH -p normal |
| | 13 | #SBATCH -o hello-%j-%a.out |
| | 14 | #SBATCH --array=1-10 |
| | 15 | |
| | 16 | # Ejecutar un script python con un argumento |
| | 17 | srun python hello-parallel-fast.py $SLURM_ARRAY_TASK_ID |
| | 18 | }}} |
| | 19 | |
| | 20 | La primera línea nos indica que se trata de un fichero a ser interpretado por el bash. Vemos como todas las líneas de comentario siguientes van dirigidas para ser preprocesadas por el comando {{{sbatch}}} que veremos en otro apartado. Son las siguientes: |
| | 21 | - -J le da nombre al trabajo tal como se verá en la cola. |
| | 22 | - -p especifica la partición que se usará para el trabajo, {{{normal}}} o {{{fat}}} en nuestro caso. |
| | 23 | - -o especifica el nombre de los ficheros de salida para cada una de las ejecuciones. Se pueden usar variables como {{{%j}}} que se sustituirá por el nombre del trabajo o {{{%a}}} que se sustituye por la iteración de la ejecución del array. |
| | 24 | - --array especifica el número de iteraciones que se realizarán, de 1 a 10 en este caso, pudiendo usar el valor del array como argumento de nuestro programa. |
| | 25 | |
| | 26 | Al final viene la línea que ejecuta nuestro proceso en sí. Se precede por el comando {{{srun}}} y simplemente ejecuta el programa python {{{hello-parallel-fast.py}}} pasándole como argumento el identificador de la ejecución del array que se trate, que como hemos dicho irá de uno a diez. |
| | 27 | |
| | 28 | '''Al invocar el fichero con {{{sbatch trabajo-uno.slurm}}}, el gestor de colas mandará diez veces el mismo proceso a diez nodos diferentes de la partición normal de nuestro cluster. |
| | 29 | ''' |
| | 30 | |
| | 31 | Si nuestro programa en python necesita muy poca memoria y un solo procesador, es evidente que estamos desperdiciando muchos recursos reservando 10 nodos para este trabajo, que se puede dilatar durante muchas horas o días. Es por ello que en la parte de "casos de uso" veremos como poder afinar más en la selección de recursos para no acaparar nosotros solos todos los nodos. |