19 | | El problema es que el pipeline completo tarda 6 horas y si se lanza en un solo trabajo usando las especificaciones de cores y memoria máximos para el conjunto de tareas, se reservarían durante esas 6 horas 10 cores y 10 Gb de memoria, cuando dichas necesidades máximas solo se necesitan en un hora en cada caso. |
20 | | |
21 | | Esto evidentemente provoca un uso no óptimo de los recursos del HPC, impidiendo que otros trabajos puedan ejecutarse cuando realmente hay recursos ociosos. |
22 | | |
23 | | Frente a esto, se puede usar una estrategia de separar las tareas en un único trabajo usando diferentes especificaciones. Supongamos el siguiente shell script: |
24 | | |
25 | | {{{#!bash |
26 | | #!/bin/bash |
27 | | srun --job-name=adquisicion --mem=1G --partition=fast --cpus-per-task=10 stress --cpu 1 --timeout 120 |
28 | | srun --job-name=curado --mem=10G --partition=fast --cpus-per-task=2 stress --cpu 4 --timeout 60 |
29 | | srun --job-name=analisis --mem=4G --partition=fast --cpus-per-task=5 stress --cpu 10 --timeout 60 |
30 | | srun --job-name=resultados --mem=1G --partition=fast --cpus-per-task=5 stress --cpu 1 --timeout 120 |
31 | | }}} |
32 | | |
| 19 | El problema es que el pipeline completo tarda 6 horas y si se lanza en un solo trabajo usando las especificaciones de cores y memoria máximos para el conjunto de tareas, se reservarían durante esas 6 horas 10 cores y 10 Gb de memoria, cuando dichas necesidades máximas solo se necesitan en un hora en cada caso. Esto se puede apreciar con el siguiente shell script: |
| 35 | Al ejecutarlo con {{{sbatch}}} obtenemos una gráfica del uso de recursos frente a lo reservado como la siguiente: |
| 36 | |
| 37 | ... |
| 38 | |
| 39 | Esto evidentemente provoca un uso no óptimo de los recursos del HPC, impidiendo que otros trabajos puedan ejecutarse cuando realmente hay recursos ociosos. |
| 40 | |
| 41 | Frente a esto, se puede usar una estrategia de separar las tareas en un único trabajo usando diferentes especificaciones. Supongamos el siguiente shell script: |
| 42 | |
| 43 | {{{#!bash |
| 44 | #!/bin/bash |
| 45 | srun --job-name=adquisicion --mem=1G --partition=fast --cpus-per-task=10 stress --cpu 1 --vm 1 --vm-bytes 1G --timeout 120 |
| 46 | srun --job-name=curado --mem=10G --partition=fast --cpus-per-task=2 stress --cpu 4 --vm 1 --vm-bytes 10G --timeout 60 |
| 47 | srun --job-name=analisis --mem=4G --partition=fast --cpus-per-task=5 stress --cpu 10 --vm 1 --vm-bytes 4G --timeout 60 |
| 48 | srun --job-name=resultados --mem=1G --partition=fast --cpus-per-task=5 stress --cpu 1 --vm 1 --vm-bytes 1G --timeout 120 |
| 49 | }}} |
| 50 | |
| 51 | Al ejecutarlo con {{{nohup ./<script> &}}} obtenemos un mayor aprovechamiento de los recursos tal y como se muestra en las siguientes imagenes: |
| 52 | |
| 53 | ... |