SSH
Po zalogowaniu się do węzła dostępowego za pomocą SSH możliwe jest uzyskanie interaktywnej rezerwacji w klastrze obliczeniowym. Takie rozwiązanie jest preferowane do pracy eksperymentalnej lub przygotowania zadań, gdyż uruchamianie obliczeń na węźle dostępowym jest zabronione.
Rezerwacja
Jak każde zadanie obliczeniowe w klastrze rezerwacje interaktywne muszę być inicjowane za pomocą systemu Slurm.
Przed utworzeniem rezerwacji warto sprawdzić obecny stan klastra za pomocą polecenia sinfo
. Przykładowy wynik:
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST
cpu* up 3-00:00:00 1 idle c1n1
gpu up 1-00:00:00 2 mix g1n[1,5]
gpu up 1-00:00:00 2 alloc g1n[2,6]
gpu up 1-00:00:00 4 idle g1n[3-4],g4n[1-2] [...]
Interpretacja:
- węzeł CPU c1n1 jest całkowicie dostępny -
idle
- węzły GPU g1n1 oraz g1n5 są częściowo zajęte -
mix
- węzły GPU g1n2 oraz g1n6 są całkowicie zajęte -
alloc
- węzły GPU g1n3, g1n4, g4n1 oraz g4n2 są dostępne -
idle
Dostępny jest także skrypt lscluster
pozwalający zobaczyć skondensowany status klastra, przykładowo:
Hostname Partition Node Num_CPU CPUload Freemem GRES/node Joblist
State Use/Tot (15min) (GB) JobID User GRES/job ...
c1n1 cpu* idle 0 8 0.00 50 (null)
g1n1 gpu mix 4 14 0.00* 18 gpu:nvidia_geforce_rtx_4090:1 9089 s123456 gpu:nvidia_geforce_rtx_4090=1
g1n2 gpu alloc 14 14 0.00* 1* gpu:nvidia_geforce_rtx_4090:1 9086 s123123 gpu:nvidia_geforce_rtx_4090=1
g1n3 gpu idle 0 14 0.00 50 gpu:nvidia_geforce_rtx_4090:1
g1n4 gpu idle 0 14 0.00 50 gpu:nvidia_geforce_rtx_4090:1
g1n5 gpu mix 12 14 0.16* 8* gpu:nvidia_geforce_rtx_4090:1 9120 s321321 gpu:nvidia_geforce_rtx_4090=1
g1n6 gpu alloc 14 14 1.01* 1* gpu:nvidia_geforce_rtx_4090:1 9122 s321123 gpu:nvidia_geforce_rtx_4090=1
g2n1 gpu_csi mix 1 60 0.28* 216 gpu:nvidia_geforce_rtx_3090:2 9118 user1 (null)
g3n1 gpu_csi mix 64 90 1.00* 401 gpu:nvidia_a100:4 9096 user2 gpu:nvidia_a100=2
g4n1 gpu idle 0 14 0.00 50 gpu:nvidia_geforce_rtx_3090:1 g4n2 gpu idle 0 14 0.00 50 gpu:nvidia_geforce_rtx_3090:1
Kolumny:
Hostname
- nazwa węzłaPartition
- jedna z partycji do której należy dany węzeł, w przypadku zadań z wielu partycji zostanie dopisany znak+
do nazwy jednej z nichNode State
- stan danego węzłaNum_CPU - Tot
- liczba wszystkich CPU w węźleNum_CPU - Use
- liczba CPU aktualnie w użyciuCPULoad (15min)
- obciążenie węzłaFreemem
- ilość dostępnej pamięci RAM w węźleGRES/node
- typ i liczba GPU w węźleJoblist
- zawiera zadania aktualnie przypisane do danego węzła oraz ewentualne zajęte przez nie GPU, zadanie bez GPU oznaczone jest przez(null)
Listę aktualnie uruchomionych zadań można wyświetlić za pomocą polecenia squeue -l
, a tylko własnych po dodaniu parametru -u $USER
. Jeśli własna lista jest pusta, to możemy utworzyć nową minimalną rezerwację:
salloc --no-shell
Wywołanie salloc
tylko z parametrem --no-shell
spowoduje utworzenie rezerwacji o najmniejszych parametrach czyli 1 CPU i 4GB RAM.
Możliwe kontrolowanie wielu parametrów (opisanych w sekcji Slurm), na przykład stworzenie rezerwacji z 4 CPU i 24GB RAM:
salloc --no-shell -c4 --mem=24G
W powyższym poleceniu została użyta krótka forma -c4
parametru --cpus-per-task=4
. Wiele parametrów ma dwie formy. Ponieważ domyślnie uruchamiane jest jedno podzadanie, kontrolowane parametrem --ntasks
, specyfikujemy 4 CPU na nasze zadanie za pomocą parametru --cpus-per-task
.
Jeśli rezerwacja jest możliwa do zrealizowana od razu, to system zwróci listę przyznanych zasobów, w tym przypadku węzłów obliczeniowych:
salloc: Granted job allocation 67
salloc: Waiting for resource configuration salloc: Nodes c1n1 are ready for job
W przeciwnym wypadku wywołanie salloc
zwróci odpowiedni komunikat i będzie aktywnie czekać na dostępne zasoby:
salloc: Pending job allocation 67 salloc: job 67 queued and waiting for resources
Użytkownik może anulować rezerwację i przerwać ten stan oczekiwania poprzez wciśnięcie Ctrl+cCtrl+c.
Połączenie z docelowym węzłem
W tym przypadku nasza sesja została przygotowana na węźle c1n1
. Możemy się z nią połączyć za pomocą SSH bezpośrednio z węzła dostępowego:
ssh c1n1
Utrzymanie sesji interaktywnej
Zalecamy uruchomienie multipleksera terminala (na przykład tmux
lub screen
) po połączeniu do docelowego węzła. Uruchomienie multipleksera na węźle dostępowym i późniejsze połączenie do węzłów obliczeniowych nie jest zalecane, gdyż różne węzły dostępowe mogą być dynamicznie przydzielane do użytkowników.
Użycie tego rozwiązania pozwoli uodpornić sesję na problemy z połączeniem między użytkownikiem a węzłem obliczeniowym. Spełnia ono także wiele innych funkcji. Zalecamy zapoznanie się z poradnikiem twórców tmux
.
Po uruchomieniu programu poleceniem tmux
zostanie utworzona nowa sesja, a terminal użytkownika zostanie rozbudowany o pasek statusu. Po jego lewej stronie znajduje się lista aktualnie otwartych terminali w sesji, a po prawej nazwa węzła wraz z godziną i datą.
Od tak utworzonej sesji można się ręcznie odłączyć za pomocą polecenia tmux detach
lub poprzez wciśnięcie kombinacji klawiszy Ctrl+bCtrl+b, dd.
Skróty klawiszowe tmux
składają się z tak zwanych akordów klawiszowych. Pod tym pojęciem rozumiane są sekwencję skrótów klawiszowych wykonanych w krótkich odstępach czasu od siebie. W powyższym przypadku użytkownik powinien najpierw wcisnąć skrót Ctrl+bCtrl+b i po jego puszczeniu wcisnąć klawisz dd.
Poprawne wykonanie odłączenia zostanie potwierdzone komunikatem:
[detached (from session 0)]
Aby ponownie podłączyć się do tej sesji należy użyć polecenia tmux attach
.
W sesji możliwe jest otwarcie wielu terminali jednocześnie. Służy do tego akord Ctrl+bCtrl+b, cc. Dostępny jest interfejs pozwalający na łatwe przełączanie między nimi - Ctrl+bCtrl+b, ww.
Kończenie pracy
Po zakończeniu pracy z sesją interaktywną należy anulować rezerwację wykonując z dowolnego węzła polecenie:
scancel 67
Alternatywnie można anulować sesję interaktywną, do której jesteśmy aktualnie połączeni przez SSH przez:
scancel $SLURM_JOB_ID
Istnieje także możliwość anulowania wszystkich rezerwacji i zadań w kolejce przez:
scancel --me
System obsługi klastra zapisuje także stopień wykorzystania zasobów. Pozostawianie nieużywanych rezerwacji może być podstawą do nałożenia ograniczeń na konto użytkownika.