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:1Kolumny:
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-shellWywoł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=24GW 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 jobW 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 resourcesUż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 c1n1Utrzymanie 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 67Alternatywnie można anulować sesję interaktywną, do której jesteśmy aktualnie połączeni przez SSH przez:
scancel $SLURM_JOB_IDIstnieje także możliwość anulowania wszystkich rezerwacji i zadań w kolejce przez:
scancel --meSystem 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.