TMPDIR_XXX
, gdzie XXX
= LUSTRE
, LOCAL
lub SHM
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".**
UWAGA! Po zakończeniu zadania, katalog TMPDIR jest automatycznie usuwany
Wyjątkiem jest katalogTMPDIR_LUSTRE=/lustre/tmp/slurm/${SLURM_JOB_ID}
dla tymczasowego systemu plików Lustre, który pozostaje dostępny dla jego właściciela przez kolejne 14 dni.
UWAGA! 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.
Przestrzeń dyskowa | Opis i przeznaczenie | Współdzielenie | Opcja GRES | Ścieżka TMPDIR_XXX | Retencja danych po zakończeniu zadania | Quota | Maksymalna pojemność |
---|---|---|---|---|---|---|---|
Lustre | 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. | wiele węzłów | --gres=storage:lustre |
TMPDIR_LUSTRE=/lustre/tmp/slurm/${SLURM_JOB_ID} |
14 dni | brak | 750TB (partycje bem2-cpu-short oraz bem2-cpu-normal ) |
Local | Lokalny system plików (ZFS) znajdujący się na lokalnych 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). | jeden węzeł | --gres=storage:local:<QUOTA> |
TMPDIR_LOCAL=/mnt/lscratch/slurm/${SLURM_JOB_ID} |
nie | tak, ustalana przez użytkownika za pomocą <QUOTA> (np. 100M, 1G, 100G ...) |
7000GB (partycje lem-gpu-short i lem-gpu-normal ) |
SHM | 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). |
jeden węzeł | --gres=storage:shm:<QUOTA> |
TMPDIR_SHM=/dev/shm/slurm/${SLURM_JOB_ID} |
nie | tak, ustalana przez użytkownika za pomocą <QUOTA> (np. 100M, 1G, 100G ...) |
Równa ilości RAM danego węzła obliczeniowego |
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
.
Korzystanie z SHM i alokacja pamięci
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
).
UWAGA! 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.
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ŚĆ>
.
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
.
Automatyczne tworzenie katalogów TMPDIR
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!
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 katalogi TMPDIR
Domyślne rodzaje katalogówTMPDIR_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
.
Globalna zmienna TMPDIR
Na czas trwania zadania tworzona jest globalna zmiennaTMPDIR
, która jest ustawiana jako jedna z dostępnych zmiennychTMPDIR_LUSTRE
,TMPDIR_SHM
lubTMPDIR_LOCAL
. 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}