W zadaniach SLURM używaj zmiennej $TMPDIR
do przekazywania ścieżki do katalogu na pliki tymczasowe dla programów obliczeniowych, na przykład:
export SCRATCH=$TMPDIR
export GAUSS_SCRDIR=$TMPDIR
Katalogi $TMPDIR
są dostępne jedynie z poziomu zadań SLURM
Na potrzeby prowadzonych obliczeń dostępna jest tymczasowa przestrzeń dyskowa służąca do przechowywania plików, z których aktywnie korzystają programy użytkowników. Do każdego zadania obliczeniowego przypisany jest conajmniej jeden katalog na pliki tymczasowe, który posiada swoją unikalną ścieżkę przechowywaną w zmiennej TMPDIR_XXX
, gdzie XXX
zależy od rodzaju tymczasowej przestrzeni dyskowej (XXX
= LUSTRE
, LOCAL
lub SHM
).
Użytkownik ma prawo dostępu jedynie do katalogów swoich zadań.
Aktualna lista partycji i ich TMPDIR
Aktualna lista tymczasowych przestrzeni dla każdej z partycji SLURM, wraz z oznaczeniem domyślnych rodzajów tymczasowych przestrzeni dyskowych, znajduje się w Tabelach w kolumnach "Dostępne TMPDIR".**
Przechowywanie katalogów TMPDIR
Katalog TMPDIR jest przechowywany przez kolejne 14 dni po zakończeniu zadania. Zachowane katalogi TMPDIR znajdują się pod ścieżką/lustre/tmp/slurm/finished_jobs/${SLURM_JOB_ID}
, gdzie${SLURM_JOB_ID}
to numer zakończonego zadania.Więcej informacji znajduje się w sekcji Odzyskiwanie zawartości TMPDIR po zakończeniu zadania
Kopie zapasowe katalogów w przestrzeni tymczasowej nie są wykonywane
Nie ma możliwości odzyskania utraconych danych z katalogówTMPDIR_XXX
. Zawartość katalogówTMPDIR_XXX
nie jest w żaden sposób zabezpieczana przez WCSS i może zostać w każdej chwili skasowana lub utracona bez ostrzeżenia. Użytkownicy powinni zabezpieczać ważne wyniki we własnym zakresie.
bem2-cpu-short
, bem2-cpu-normal
, bem2-cpu-interactive
lem-cpu-short
, lem-cpu-normal
, lem-cpu-interactive
lem-gpu-short
, lem-gpu-normal
, lem-gpu-interactive
TMPDIR_LUSTRE=/lustre/tmp/slurm/${SLURM_JOB_ID}
--gres=storage:lustre:1
bem2-cpu-short
i bem2-cpu-normal
), 360T (partycje lem-cpu-short
, lem-cpu-normal
, lem-gpu-short
, lem-gpu-normal
)Współdzielony system plików jednocześnie dostępny na wszystkich serwerach obliczeniowych z danej partycji.
Służy przede wszystkim wielowęzłowym zadaniom obliczeniowym, w których różne węzły operują na tym samym zestawie plików.
Dostęp do TMPDIR_LUSTRE
Katalogi tymczasowej przestrzeni dyskowej/lustre/tmp/slurm/$SLURM_JOB_ID
są dostępne jedynie z poziomu zadań SLURM i nie są od razu widoczne po zalogowaniu na serwer ui.wcss.pl.Aby przejrzeć pliki pod TMPDIR należy najpierw uruchomić sesję interaktywną za pomocą komendy
sub-interactive
.
Osobne systemy plików Lustre TMP
Superkomputer Bem2 (partycjebem2-cpu[-short,normal]
) oraz superkomputer LEM (partycjelem-cpu[-short,normal], lem-gpu[-short,normal]
) posiadają swoje odrębne tymczasowe systemy plików Lustre - katalogi pod ściezką/lustre/tmp
z superkomputera Bem2 nie są dostępne na superkomputerze Lem i vice versa. W przypadku korzystania z systemu plików Lustre należy zapoznać się z zasadami korzystania znajdujących się na stronie System plików Lustre.
lem-cpu-short
, lem-cpu-normal
, lem-cpu-interactive
lem-gpu-short
, lem-gpu-normal
, lem-gpu-interactive
TMPDIR_LOCAL=/mnt/lscratch/slurm/${SLURM_JOB_ID}
--gres=storage:local:<QUOTA>
lem-cpu-short
i lem-cpu-normal
); 7000G (partycje lem-gpu-short
i lem-gpu-normal
)<QUOTA>
(np. 100M, 1G, 100G, 200G ...):Partycje | Domyślna | Maksymalna |
---|---|---|
lem-cpu-short, lem-cpu-normal | 200G | 3400G |
lem-gpu-short, lem-gpu-normal | 200G | 7000G |
lem-gpu-interactive | 200G | 1500G |
lem-cpu-interactive | 50G | 400G |
Lokalny system plików znajdujący się na dyskach NVME, dostępny w obrębie pojedynczego węzła obliczeniowego.
Służy przede wszystkim jednowęzłowym zadaniom obliczeniowym, które posiadają spore zapotrzebowanie na przestrzeń dyskową (powyżej 50GB) i wykonują wiele operacji IO (ang. Input/Output).
bem2-cpu-short
, bem2-cpu-normal
, bem2-cpu-interactive
lem-cpu-short
, lem-cpu-normal
, lem-cpu-interactive
lem-gpu-short
, lem-gpu-normal
,lem-gpu-interactive
TMPDIR_SHM=/dev/shm/slurm/${SLURM_JOB_ID}
--gres=storage:shm:<QUOTA>
<QUOTA>
(np. 100M, 1G, 100G, 200G ...)Lokalna przestrzeń na pliki znajdująca się w pamięci podręcznej RAM (ścieżka /dev/shm
), dostępna w obrębie pojedynczego węzła obliczeniowego.
Służy przede wszystkim jednowęzłowym zadaniom obliczeniowym o niskim zapotrzebowaniu na przestrzeń dyskową (ponizej 50GB) i wykonujących wiele operacji IO (ang. Input/Output).
Korzystanie z SHM i alokacja pamięci w zadaniu SLURM
W przypadku korzystania z SHM (opcja--gres=storage:shm:<QUOTA>
), ilość potrzebnej przestrzeni<QUOTA>
zostanie automatycznie dodana do zapotrzebowania na pamięć operacyjną przez zadanie (deklarowaną za pomocą opcji--mem
).Przykładowo, jeśli w zadaniu na potrzeby obliczeń wymagane jest 5GB pamięci operacyjnej (opcja
--mem=5G
), a pliki tymczasowe mają być przechowywane w przestrzeni SHM i mogą zajmować do 50GB (opcja--gres=storage:shm:50G
), to całkowite zapotrzebowanie pamięci RAM w tym zadaniu wyniesie50G+5G=55G
, co zostanie automatycznie uwzględnione podczas kolejkowania tego zadania (ustawiona zostanie nowa wartość--mem=55G
).
Użytkownik deklaruje rodzaj tymczasowej przestrzeni dyskowej podczas zlecania zadania SLURM jako tzw. zasób GRES (ang. Generic Resource Scheduling) za pomocą opcji --gres=storage:<XXX>:<ILOŚĆ>
, gdzie <XXX>
jest rodzajem tymczasowej przestrzeni dyskowej, a <ILOŚĆ>
deklaruje maksymalną możliwą zajętość katalogu TMPDIR (tzw. quotę), dla której można korzystać z przedrostków M
(MiB) oraz G
(GiB). W przypadku korzystania z pliku wsadowego dla sbatch
, należy podać opcję #SBATCH --gres=storage:<XXX>:<ILOŚĆ>
.
Po uruchomieniu zadania tworzone są tylko te katalogi tymczasowej przestrzeni dyskowej, które zostały zadeklarowane przy zlecaniu zadania (wliczając domyślnie przyznawane katalogi dla danej partycji). Przykładowo, jeśli użytkownik sprecyzuje jedynie --gres=storage:lustre
, to utworzony zostanie jedynie katalog pod ścieżką przetrzymywaną w zmiennej $TMPDIR_LUSTRE
, a katalogi $TMPDIR_SHM
oraz $TMPDIR_LOCAL
nie będą dostępne!
Wybór kilku rodzajów TMPDIR jednocześnie
Możliwe jest podanie kilku rodzajów tymczasowych przestrzeni dyskowych (w zależności od ich dostępności na danej partycji SLURM), oddzielając je za pomocą przecinka, np.--gres=storage:lustre,storage:local:10G
. Dodatkowo, jesli użytkownik korzysta z innych rodzajów GRES, np. kart GPU, je również należy wymienić po przecinku, np.--gres=storage:lustre,storage:local:10G,gpu:hopper:2
.
W przypadku, gdy podczas zlecania zadania SLURM użytkownik nie sprecyzuje rodzaju tymczasowej przestrzeni dyskowej, na potrzeby zadania zostanie przyporządkowany domyślny rodzaj katalogu TMPDIR_XXX
.
Domyślne rodzaje katalogów TMPDIR_XXX
przyporządkowywane są w zależności od partycji i rodzaju zadania - jedno lub wielowęzłowego. Domyślne rodzaje katalogów dla każdej z partycji oznaczone są w Tabelach na stronie Partycje SLURM i kolumnach "Dostępne TMPDIR" za pomocą znaków "*" dla zadań jednowęzłowych oraz "**" dla zadań wielowęzłowych.
Przykłady:
bem2-cpu
bez sprecyzowania opcji --gres=storage
, dla takiego zadania zostanie domyślnie przyznana tymczasowa przestrzeń dyskowa Lustre, tj. TMPDIR_LUSTRE=/lustre/tmp/slurm/${SLURM_JOB_ID}
.lem-gpu
, dla takiego zadania zostanie domyślnie przyznana tymczasowa przestrzeń dyskowa lokalna, tj. TMPDIR_LOCAL=/mnt/lscratch/slurm/${SLURM_JOB_ID}
.lem-gpu
użytkownik zleci zadanie wielowęzłowe, to dla takiego zadania zostanie domyślnie przyznana tymczasowa przestrzeń dyskowa Lustre, tj. TMPDIR_LUSTRE=/lustre/tmp/slurm/${SLURM_JOB_ID}
.Na czas trwania zadania tworzone są odpowiednie katalogi tymczasowej przestrzeni dyskowej i eksportowane są odpowiadające im zmienne TMPDIR_XXX
, a w przypadku wyboru kilku rodzajów tymczasowej przestrzeni - kilka katalogów i kilka zmiennych TMPDIR_XXX
.
Na czas trwania zadania tworzona jest również globalna zmienna TMPDIR
, która jest ustawiana jako jedna z dostępnych zmiennych TMPDIR_LUSTRE
, TMPDIR_SHM
lub TMPDIR_LOCAL
.
Preferencja TMPDIR
W przypadku, gdy użytkownik zadeklarował użycie więcej niż jednej przestrzeni na tymczasowe pliki, zmienna TMPDIR zostaje ustawiona jako ta o największej preferencji według szereguTMPDIR_LUSTRE < TMPDIR_SHM < TMPDIR_LOCAL
.
bem2-cpu
)Aby skorzystać z domyślnego rodzaju TMPDIR wystarczy nie deklarować zmiennej --gres=storage:<XXX>
. Przykładowo:
$ srun -p bem2-cpu -N 1 -c 1 -t 1 --mem=1G {...}
Na czas trwania takiego zadania zostaną utworzone następujące zmienne i katalogi:
TMPDIR_LUSTRE = /lustre/tmp/slurm/${SLURM_JOB_ID}
, o braku ograniczenia na zajętość kataloguTMPDIR = ${TMPDIR_LUSTRE}
$ srun -p bem2-cpu -N 1 -c 1 -t 1 --mem=1G --gres=storage:lustre {...}
lub w skrypcie sbatch
:
#/bin/bash
#SBATCH -p bem2-cpu
#SBATCH -N 1
#SBATCH -c 1
#SBATCH -t 1
#SBATCH --mem=1G
#SBATCH --gres=storage:lustre
{...}
Na czas trwania takiego zadania zostaną utworzone następujące zmienne i katalogi:
TMPDIR_LUSTRE = /lustre/tmp/slurm/${SLURM_JOB_ID}
, o braku ograniczenia na zajętość kataloguTMPDIR = ${TMPDIR_LUSTRE}
$TMPDIR_LOCAL
10GB$ srun -p lem-gpu -N 1 -c 1 -t 01:00:00 --mem=1G --gres=storage:local:10GB {...}
lub w skrypcie sbatch
:
#/bin/bash
#SBATCH -p lem-gpu
#SBATCH -N 1
#SBATCH -c 1
#SBATCH -t 1
#SBATCH --mem=1G
#SBATCH --gres=storage:local:10G
{...}
Na czas trwania takiego zadania zostaną utworzone następujące zmienne i katalogi:
TMPDIR_LOCAL = /mnt/lscratch/slurm/${SLURM_JOB_ID}
, o ograniczeniu na zajętość 10GBTMPDIR = ${TMPDIR_LOCAL}
$ srun -p bem2-cpu -N 1 -c 1 -t 01:00:00 --mem=1G --gres=storage:shm:100G {...}
lub w skrypcie sbatch
:
#/bin/bash
#SBATCH -p bem2-cpu
#SBATCH -N 1
#SBATCH -c 1
#SBATCH -t 1
#SBATCH --mem=1G
#SBATCH --gres=storage:shm:100G
{...}
Na czas trwania takiego zadania zostaną utworzone następujące zmienne i katalogi:
TMPDIR_SHM = /dev/shm/slurm/${SLURM_JOB_ID}
, o ograniczeniu na zajętość 100GBTMPDIR = ${TMPDIR_SHM}
1G + 100G = 101G
, co zostanie uwzględnione podczas kolejkowania zadania i alokacji zasobów na węzłach obliczeniowych$ srun -p lem-gpu -N 2 -c 1 -t 01:00:00 --mem=1GB --gres=storage:local:10G,storage:lustre {...}
lub w skrypcie sbatch
:
#/bin/bash
#SBATCH -N 2
#SBATCH -p lem-gpu
#SBATCH -c 1
#SBATCH -t 1
#SBATCH --mem=1G
#SBATCH --gres=storage:local:10G,storage:lustre
{...}
Na czas trwania takiego zadania zostaną utworzone następujące zmienne i katalogi:
TMPDIR_LUSTRE = /lustre/tmp/slurm/${SLURM_JOB_ID}
, o braku ograniczenia na zajętość kataloguTMPDIR_LOCAL = /mnt/lscratch/slurm/${SLURM_JOB_ID}
, o ograniczeniu na zajętość 10GBTMPDIR = ${TMPDIR_LOCAL}
Po zakończeniu zadania, cała zawartość katalogu TMPDIR zostaje automatycznie przeniesiona na system plików Lustre TMP i jest tam przechowywana przez kolejne 14 dni. Zachowane katalogi TMPDIR znajdują się pod ścieżką /lustre/tmp/slurm/finished_jobs/${SLURM_JOB_ID}
, gdzie ${SLURM_JOB_ID}
to numer zakończonego zadania.
Dzięki temu użytkownicy mają możliwość m. in. restartu obliczeń z plików checkpointowych zapisywanych w TMPDIR czy dostępu do danych wyjściowych, które nie zostały bezpośrednio przeniesione do katalogu domowego (np. z powodu bardzo dużego rozmiaru). Katalog TMPDIR jest przenoszony na system plików Lustre TMP niezależnie od rodzaju pamięci dyskowej, na której się pierwotnie znajdował - lokalnym dysku (TMPDIR_LOCAL
), pamięci RAM (TMPDIR_SHM
) czy systemie Lustre TMP (TMPDIR_LUSTRE
).
Przeglądanie zawartości starych katalogów TMPDIR możliwe jest np. po uruchomieniu odpowiedniego zadania interaktywnego:
sub-interactive
- dla zadań wykonanych na superkomputerze Bem2 (partycje bem2-cpu-short
, bem2-cpu-normal
, bem2-cpu-interactive
)sub-interactive-lem-cpu
- dla zadań wykonanych na superkomputerze LEM (partycje lem-cpu-short
, lem-cpu-normal
, lem-cpu-interactive
, lem-gpu-short
, lem-gpu-normal
, lem-gpu-interactive
)Różne systemy plików Lustre TMP
Z powodu rozdzielności systemów Lustre TMP na superkomputerach Bem2 i LEM, zachowane katalogi TMPDIR są dostępne jedynie z poziomu węzłów obliczeniowych tego samego superkomputera, na którym były liczone - Bem2 lub LEM. Katalogi/lustre/tmp/slurm/finished_jobs/${SLURM_JOB_ID}
są dostępne jedynie z poziomu zadań obliczeniowych.
Zadanie o numerze 1234567
zakończyło się z powodu przekroczenia maksymalnego czasu zadania (TIMEOUT
). W przypadku wykorzystanego oprogramowania możliwy jest restart obliczeń za pomocą pliku checkpointowego, który na bieżąco był zapisywany w katalogu TMPDIR podczas trwania zadania.
$ sacct -X -j 1234567
JobID JobName Partition Account AllocCPUS State ExitCode
------------ ---------- ---------- ---------- ---------- ---------- --------
1234567 bash lem-cpu-s+ kdm-staff 1 TIMEOUT 0:0
Zadanie było liczone na partycji lem-cpu-short
(skróconej przez komendę do lem-cpu-s+
), a więc na superkomputerze LEM.
sub-interactive-lem-cpu
uruchamianie zadania interaktywnego może potrwać do kilku minut ze względu na uruchamianie zgaszonego serwera):$ sub-interactive-lem-cpu
(use `sub-interactive -h` for help)
An interactive job is being submitted with the following parameters:
job_name interactive
service (D) kdm-staff
partition lem-cpu-interactive
nodes 1
cores 1
memory 3 GB
time limit 1 hours
reservation
x11 disabled
gpu disabled
$ cd /lustre/tmp/slurm/finished_jobs/1234567