| 1 | == Trabajo de una tarea single threaded con N repeticiones variando un argumento == |
| 2 | Es un caso muy habitual, donde un programa que tiene un solo hilo de ejecución y por tanto necesita un solo core, se tiene que lanzar N veces variando los argumentos. |
| 3 | {{{ |
| 4 | #!/bin/bash |
| 5 | #SBATCH --job-name=sample_multi |
| 6 | #SBATCH --array=0-36 |
| 7 | #SBATCH --partition=normal |
| 8 | #SBATCH --output=/home/someuser/gbs_project/prueba_GVCF/logs//gbs_VC_%A_%a.out |
| 9 | #SBATCH --ntasks=1 |
| 10 | #SBATCH --nodes=1 |
| 11 | #SBATCH --cpus-per-task=1 |
| 12 | #SBATCH --mem-per-cpu=12G |
| 13 | #SBATCH --time=0-12:00 |
| 14 | |
| 15 | |
| 16 | mapfile -t FILE_ARRAY < file_list.tmp.txt |
| 17 | ref='/home/someuser/sample_multi/raw_data/reference_genome/some_genome.fa' |
| 18 | file=${FILE_ARRAY[ $SLURM_ARRAY_TASK_ID ]} |
| 19 | sample=$(basename $file | cut -d'.' -f 1) |
| 20 | gatk HaplotypeCaller -ERC GVCF -R $ref -O /home/someuser/sample_multi/prueba_GVCF/${sample}.g.vcf -I $file |
| 21 | echo |
| 22 | echo Finished this sub-task! |
| 23 | }}} |
| 24 | |
| 25 | El script define el nombre del trabajo y la partición. Define un {{{array}}} que variará de 0 a 36 y se utilizará como argumento para el nombre de los ficheros de salida (%a) y el fichero de entrada (file) mediante la variable {{{$SLURM_ARRAY_TASK_ID}}}. |
| 26 | |
| 27 | El resto de los parámetros propios de SBATCH fijan los requerimientos de nuestro programa. Cada iteración será una tarea que se ejecutará en 1 nodo requiriendo una sola cpu (core) por tarea, y un máximo de 12 gigaBytes de memoria. El parámetro {{{--time}}} fija el tiempo máximo de ejecución, 0 días y 12 horas en este caso. |
| 28 | |
| 29 | El tiempo de ejecución se usa para que de una parte no rebase al iniciarse el máximo definido en la partición (si lo rebasara se quedaría en estado PENDING), y que una vez en ejecución no rebase este tiempo (si lo hiciera se autocancelaría). Es interesante porque evita que se ejecuten indefinidamente por ejemplo algoritmos que mediante iteraciones requieran determinada convergencia a un resultado que nunca se alcance. |
| 30 | |
| 31 | El resto de líneas corresponden a las instrucciones en sí del trabajo, que lógicamente dependerán de lo que se quiera hacer. En la sección [Variables de slurm] se describen las variables de slurm que podremos usar como argumentos en esta parte de nuestro script. |