| 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 | ... |