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.