Wieloetapowe zadanie
Poradnik ten bazuje na wcześniejszym: proste zadanie.
Zadanie mogą być wieloetapowe, dzięki czemu ich umiejscowienie w klastrze jest o wiele łatwiejsze.
Następnie rozbudujmy skrypt zadanie.py
:
zadanie.py
import sys
print("Witaj! Jestem etapem numer: ", sys.argv[1])
Rozbudujmy także skrypt:
wykonaj.sh
#!/usr/bin/env bash
#SBATCH --job-name=wielewitaj # nazwa zadania
#SBATCH --partition=cpu # partycja (CPU/GPU)
#SBATCH --array=1-10 # liczba etapów
#SBATCH --cpus-per-task=1 # jeden CPU
#SBATCH --time=00:15:00 # limit czasu wykonania zadania - 15min
#SBATCH --output=zadanie-%A-%a.out # schemat pliku wynikowego %A - numer zadania, %a - numer etapu
#SBATCH --mail-type=ALL # konfiguracja powiadomienia e-mail
#SBATCH --mail-user=WPISZ_SWOJ_PELEN_EMAIL # adres dla powiadomień e-mail
# Przykład wykonania skryptu Pythona w trybie wsadowym Slurm
# aktywacja bazowego środowiska
eval "$(/work/$USER/miniconda3/bin/conda shell.bash hook)"
# aktywacja modułu anaconda
module load anaconda
# Wykonanie skryptu
srun python zadanie.py $SLURM_ARRAY_TASK_ID
Przesłanie zadania do systemu kolejkowego Slurm:
sbatch wykonaj.sh
Możemy sprawdzić wyniki każdego etapu przez:
cat zadanie*.out
W przypadku wykonywania dużych zadań wieloetapowych warto ograniczyć liczbę jednocześnie wykonywanych zadań: #SBATCH --array=1-100%5
- spowoduje wykonanie jednocześnie do 5 etapów.