Prometheus:Podstawy: Różnice pomiędzy wersjami
(→Uruchamianie zadań: Dodane info o zlecaniu zadań z GPGPU) |
m (→Zadania wykorzystujące GPGPU: Zrobione odstępy) |
||
Linia 140: | Linia 140: | ||
Karty GPU w systemie kolejkowym SLURM są rodzajem tzw. generic resources (GRES), a ich identyfikatorem jest "gpu".<br/> | Karty GPU w systemie kolejkowym SLURM są rodzajem tzw. generic resources (GRES), a ich identyfikatorem jest "gpu".<br/> | ||
− | Informację o tym na których węzłach/kolejkach znajdują się karty GPU można otrzymać np. przy pomocy komendy <tt>sinfo</tt>: | + | Informację o tym na których węzłach/kolejkach znajdują się karty GPU można otrzymać np. przy pomocy komendy <tt>sinfo</tt>: |
+ | |||
<code>sinfo -o '%P || %N || %G'</code> | <code>sinfo -o '%P || %N || %G'</code> | ||
+ | |||
Zlecanie zadań odbywa się poprzez podanie opcji <code>--gres=gpu[:count]</code> systemu kolejkowego.<br/> | Zlecanie zadań odbywa się poprzez podanie opcji <code>--gres=gpu[:count]</code> systemu kolejkowego.<br/> | ||
W przypadku gdy nie ma podanej opcji <tt>count</tt>, system kolejkowy domyślnie alokuje jedną kartę na węźle obliczeniowym. | W przypadku gdy nie ma podanej opcji <tt>count</tt>, system kolejkowy domyślnie alokuje jedną kartę na węźle obliczeniowym. | ||
− | Przykładowo, gdy chcemy uruchomić zadanie interaktywne na dwóch węzłach i na każdym z nich chcemy zażądać 2 karty GPU (czyli łącznie 4 karty GPU): | + | Przykładowo, gdy chcemy uruchomić zadanie interaktywne na dwóch węzłach i na każdym z nich chcemy zażądać 2 karty GPU (czyli łącznie 4 karty GPU): |
+ | |||
<code>srun -p plgrid-gpu -N 2 --ntasks-per-node=24 -n 48 -A grant_id --gres=gpu:2 --pty /bin/bash -l</code> | <code>srun -p plgrid-gpu -N 2 --ntasks-per-node=24 -n 48 -A grant_id --gres=gpu:2 --pty /bin/bash -l</code> | ||
− | Analogicznie jest dla skryptu wsadowego, np. gdy żądamy po jednej karcie na węzeł obliczeniowy: | + | |
+ | Analogicznie jest dla skryptu wsadowego, np. gdy żądamy po jednej karcie na węzeł obliczeniowy: | ||
+ | |||
<code>#SBATCH --gres=gpu</code> | <code>#SBATCH --gres=gpu</code> | ||
Po zleceniu zadania system kolejkowy automatycznie ustawia zmienną środowiskową <tt>$CUDA_VISIBLE_DEVICES</tt> oraz zezwala na dostęp do zaalokowanych do kart. | Po zleceniu zadania system kolejkowy automatycznie ustawia zmienną środowiskową <tt>$CUDA_VISIBLE_DEVICES</tt> oraz zezwala na dostęp do zaalokowanych do kart. | ||
+ | |||
'''Uwaga:''' Wszelkie informacje na temat komend SLURMa można znaleźć w manualu, np.: <code> man sbatch</code> | '''Uwaga:''' Wszelkie informacje na temat komend SLURMa można znaleźć w manualu, np.: <code> man sbatch</code> |
Wersja z 13:07, 8 gru 2015
Spis treści
Logowanie
Dostęp do klastra Prometheus realizowany jest za pośrednictwem maszyny dostępowej:
prometheus.cyfronet.pl
np.
ssh plgtestowy@prometheus.cyfronet.pl
Możliwe jest także użycie krótszego aliasu pro.cyfronet.pl.
Logowanie na maszynę dostępową możliwe jest poprzez SSH.
Dostępne oprogramowanie
Opis dostępnego oprogramowania znajduje się tutaj.
Dostęp do oprogramowania realizowany jest za pomocą narzędzia Lmod.
Partycje
Odpowiednikiem kolejek PBS dla systemu SLURM są partycje. Prometheus posiada aktualnie następujące partycje:
Nazwa partycji | Maksymalny czas trwania zadania |
Informacje |
---|---|---|
plgrid | 72:00:00 | Partycja domyślna |
plgrid-testing | 1:00:00 | Partycja dla zadań testowych |
plgrid-long | 168:00:00 | Patrycja o dla zadań o wydłużonym walltime (negocjowana w grancie) |
plgrid-extra-long | 336:00:00 | Patrycja o dla zadań o wydłużonym walltime (negocjowana w grancie) |
plgrid-gpu | 72:00:00 | Patrycja o dla zadań wykorzystujących karty GPGPU (negocjowana w grancie) |
Dokładne informacje na temat partycji można otrzymać przy pomocy polecenia
scontrol show partition [<nazwa_partycji>]
Uwagi:
- Aktualnie dla użytkowników udostępniona jest wyłącznie partycja plgrid
- Zadania nieprzekraczające rozmiaru wyspy obliczeniowej powinny być uruchamiane w ramach partycji wyspy. Zlecanie obliczeń w partycji all powoduje potencjalne rozbicie zadania pomiędzy wyspami obliczeniowymi, co skutkuje obniżeniem efektywności obliczeń.
Zasoby dyskowe
Lokalizacja | Limit danych | Limit liczby plików | Przeznaczenie | Sposób dostępu |
Przepustowość | Pojemność | Kopia bezpieczeństwa |
Możliwość wykonywania intensywnych zapisów i/lub odczytów |
Uwagi |
---|---|---|---|---|---|---|---|---|---|
$HOME | 40 GB | 1 000 000 | katalog domowy użytkownika | NFS | 1 GB/s | ∞ | tak | nie | |
$SCRATCH | 100 TB | 1 000 000 | przestrzeń dla plików tymczasowych zadań | Lustre | 120 GB/s | 5 PB | nie | tak | dane starsze niż 30 dni będą usuwane automatycznie |
$PLG_GROUPS_STORAGE/nazwa_zespołu | suma grantów | przestrzeń dla katalogów zespołów (PL-Grid) | Lustre | 30 GB/s | 2,5 PB | nie | nie |
Zmienne środowiskowe
Osobiste:
- $HOME, $PLG_USER_STORAGE, np. '/people/plgtestowy' - wskazuje na katalog domowy
- $PLG_USER_SCRATCH_SHARED, $SCRATCH np. '/net/scratch/people/plgtestowy/' - scratch dla użytkownika - tu należy trzymać dane podczas obliczeń
Zespołowe (do nich należy dodać nazwę zespołu):
- PLG_GROUPS_STORAGE, PLG_GROUPS_SHARED, np. '/net/archive/groups' - wskazuje na katalog do składowania danych zespołów (dane wejściowe, wyjściowe, wymiana danych pomiędzy osobami)
Uruchamianie zadań
Zlecanie zadań na klastrze Prometheus odbywa się poprzez system kolejkowy SLURM.
Zadanie może być zlecone zarówno w trybie wsadowym jak i w trybie interaktywnym.
Przed uruchomieniem zadań zapoznaj się z informacjami o systemie grantów
Tryb wsadowy
Do zlecania zadania w trybie wsadowym służy komenda sbatch.
Użycie komendy:
sbatch skrypt.sh
Przykładowy skrypt:
UWAGA! To jest przykładowy skrypt, którego NIE NALEŻY uruchamiać. Przed jego uruchomieniem należy przeglądnąć podane opcje i dostosować je do własnych potrzeb, zmieniając m.i. nazwę grantu, nazwę partycji, czas trwania zadania, adres email, itp.
#!/bin/bash -l
## Nazwa zlecenia
#SBATCH -J ADFtestjob
## Liczba węzłów
#SBATCH -N 2
## Maksymalna liczba zadań w zleceniu (domyślnie ilość rdzeni)
#SBATCH -n 48
## Ilość zadań na węzeł
#SBATCH --ntasks-per-node=24
## Maksymalna ilość zużytej pamięci na węzeł (w MB)
#SBATCH --mem 24000
## Maksymalny czas trwania zlecenia
#SBATCH --time=20:00:00
## Nazwa grantu do rozliczenia zużycia zasobów
#SBATCH -A testgrant
## Specyfikacja partycji
#SBATCH -p blue
## Plik ze standardowym wyjściem
#SBATCH --output="adf.out"
## Plik ze standardowym wyjściem błędów
#SBATCH --error="adf.err"
## Typ powiadomień e-mail
#SBATCH --mail-type=BEGIN,END
## E-mail na który wysłać powiadomienia (domyślnie adres podany przy tworzeniu konta PL-Grid)
#SBATCH --mail-user=user@example.com
## przejscie do katalogu z ktorego wywolany zostal sbatch
cd $SLURM_SUBMIT_DIR
srun /bin/hostname
module load apps/adf/2014.07
adf input.adf
Tryb interaktywny
Do zlecania zadań w trybie interaktywnym z powłoką służy komenda (przykład):
srun -p plgrid -N 2 --ntasks-per-node=24 -n 48 -A grant_id --pty /bin/bash -l
Powyższa komenda uruchomi zadanie na 2 węzłach i 48 rdzeniach (24 rdzenie na węzeł).
Samo polecenie srun odpowiada za uruchomienie komendy w ramach zaalokowanych zasobów.
Jednak w przypadku, gdy zasoby nie zostały wcześniej zaalokowane, komenda ta uprzednio dokonuje ich rezerwacji tuż przed uruchomieniem obliczeń.
Zadania wykorzystujące GPGPU
Karty GPU w systemie kolejkowym SLURM są rodzajem tzw. generic resources (GRES), a ich identyfikatorem jest "gpu".
Informację o tym na których węzłach/kolejkach znajdują się karty GPU można otrzymać np. przy pomocy komendy sinfo:
sinfo -o '%P || %N || %G'
Zlecanie zadań odbywa się poprzez podanie opcji --gres=gpu[:count]
systemu kolejkowego.
W przypadku gdy nie ma podanej opcji count, system kolejkowy domyślnie alokuje jedną kartę na węźle obliczeniowym.
Przykładowo, gdy chcemy uruchomić zadanie interaktywne na dwóch węzłach i na każdym z nich chcemy zażądać 2 karty GPU (czyli łącznie 4 karty GPU):
srun -p plgrid-gpu -N 2 --ntasks-per-node=24 -n 48 -A grant_id --gres=gpu:2 --pty /bin/bash -l
Analogicznie jest dla skryptu wsadowego, np. gdy żądamy po jednej karcie na węzeł obliczeniowy:
#SBATCH --gres=gpu
Po zleceniu zadania system kolejkowy automatycznie ustawia zmienną środowiskową $CUDA_VISIBLE_DEVICES oraz zezwala na dostęp do zaalokowanych do kart.
Uwaga: Wszelkie informacje na temat komend SLURMa można znaleźć w manualu, np.: man sbatch
Monitorowanie kolejek, partycji, węzłów, zadań i zasobów
- Sktypty specyficzne dla Prometheusa
- pro-jobs - statystyki dla uruchomionych zadań użytkownika
- pro-jobs-history - statystyki dla zakończonych zadań użytkownika
- pro-fs - statystyki użycia zasobów dyskowych przez użytkownika
- Narzędzia systemu SLURM
squeue
- lista aktualnie zakolejkowanych/uruchomionych zadańscontrol show job [<ID_zadania>]
- szczegóły zadaniasstat -a -j ID_zadania/ID_zadania.batch
- zużycie zasobów w ramach kroków (step) działającego zadaniasacct
- zużycie zasobów zakończonego już zadania/krokuscontrol show partition [<nazwa_partycji>]
- właściwości partycjisinfo
- lista węzłówscontrol show node [<nazwa_węzła>]
- właściwości węzła
Przenoszenie danych z klastra Zeus
Klastry Zeus i Prometheus nie współdzielą żadnych zasobów dyskowych, w związku z tym, aby korzystać z danych zgromadzonych na Zeusie, należy je najpierw skopiować. W tym celu możemy posłużyć się komendami:
scp
- w przypadku małych plików (używa loginu i hasła),globus-url-copy
- w przypadku dużych plików (używa loginu i hasła LUB grid proxy),uberftp
- w przypadku dużych plików, interaktywnie (używa grid proxy).
Podstawowe informacje o komendzie globus-url-copy:
- składnia:
globus-url-copy ŻRÓDŁO CEL
, gdzie źródło i cel poprzedzone są nazwą protokołu: np.file://
, - aby pobrać pliki z zeusa używamy 2 protokołów:
- gsiftp -
gsiftp://zeus.cyfronet.pl/
- uwierzytelnianie za pomocą proxy (musimy najpierw stworzyć grid proxy komendągrid-proxy-init
), - sshftp -
sshftp://zeus.cyfronet.pl/
- uwierzytelnianie hasłem PLGrid,
- gsiftp -
- uwierzytelnianie proxy pozwala uruchamiać wiele transferów bez podawania hasła za każdym razem,
- protokół docelowy to
file://
czyli plik/katalog lokalny, - dla ŻRÓDŁA i CELU musimy podać pełną ścieżkę pliku lub możemy użyć skrótu w postaci
~plgLOGIN
do naszego katalogu domowego, - dla CELU (czyli protokołu
file://
) możemy podać też zmienne środowiskowe np.$PWD
- bieżący katalog, - w przypadku CELU gdy podamy nazwę pliku np.
$PWD/nazwa.txt
, plik zapisze się pod daną nazwą, a gdy podamy tylko katalog, to plik zapisze się pod taką samą nazwą jak źródłowy, - aby przesyłać całe katalogi, należy je najpierw spakować komendą
tar -czf archiwum.tar katalog
, - w przypadku gdy nasz login na klastrze Prometheus różni się od tego na klastrze Zeus możemy użyć wyłącznie protokołu "sshftp://" a do ŹRÓDŁA należy dodać login na klastrze Zeus np.
sshftp://MOJ_USERNAME@zeus.cyfronet.pl/
.
Przykład użycia komendy globus-url-copy
:
- skopiuj z katalogu domowego użytkownika plgLOGIN na klastrze Zeus, do bieżącego katalogu plik "bigfile.txt" i nadaj mu tą samą nazwę:
globus-url-copy sshftp://zeus.cyfronet.pl/~plgLOGIN/bigfile.txt file://$PWD/
- skopiuj plik "/mnt/gpfs/work/plgrid/groups/plggGROUP_NAME/bigfile.txt" z klastara Zeus do bieżącego katalogu:
globus-url-copy sshftp://zeus.cyfronet.pl//mnt/gpfs/work/plgrid/groups/plggGROUP_NAME/bigfile.txt file://$PWD/
- j.w. ale z podanym loginem z klastra Zeus (domyślnie używany jest taki sam użytkownik na jakiego jesteśmy zalogowani)
globus-url-copy sshftp://MOJ_USERNAME@zeus.cyfronet.pl//mnt/gpfs/work/plgrid/groups/plggGROUP_NAME/bigfile.txt file://$PWD/
Odnośniki do dodatkowych pomocy/dokumentacji:
- scp:
- globus-url-copy:
- uberftp:
- grid-proxy-init
Zasady obowiązujące na klastrze Prometheus
- obliczenia wykonywane na maszynie dostępowej będą usuwane bez ostrzeżenia
- obliczenia wykraczające poza zakres deklarowanego tematu badań zużywające znaczną część zasobów klastra będą usuwane bez ostrzeżenia
- W celu skompilowania programu proszę użyć polecenia:
srun -p plgrid -A grant_id -n 1 --pty /bin/bash -l
Polecenie to spowoduje zalogowanie użytkownika na węzeł obliczeniowy, tam proszę uruchomić kompilację programu - Dane obliczeniowe należy składować i przetwarzać na systemie plików Lustre pod lokalizacją $SCRATCH
- W obliczeniach nie należy korzystać z katalogu /tmp, do przechowywania plików tymczasowych należy wykorzystywać katalogi znajdujące się pod zmiennymi $SCRATCH, $SCRATCHDIR lub $TMPDIR
Kontakt
Pomoc dla użytkowników PL-Grid: mailto:helpdesk@plgrid.pl
Kontakt z administratorami: mailto:prometheus@cyfronet.pl, +48 12 632 33 55 w. 603.